summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Boddie <david.boddie@nokia.com>2010-09-30 13:25:45 (GMT)
committerDavid Boddie <david.boddie@nokia.com>2010-09-30 13:25:45 (GMT)
commit70fd09b335f60be7b68f258c47abe2bb092d5775 (patch)
treecef95cddc6adad7d7efb2adb74e423e43ba04322
parent6700a9f41692912f221fac55e4cae1809549fa13 (diff)
parent8c65dc25962e167237c2573979b1dfff88c29326 (diff)
downloadQt-70fd09b335f60be7b68f258c47abe2bb092d5775.zip
Qt-70fd09b335f60be7b68f258c47abe2bb092d5775.tar.gz
Qt-70fd09b335f60be7b68f258c47abe2bb092d5775.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-doc-team into 4.7
-rwxr-xr-xbin/createpackage.pl24
-rwxr-xr-xbin/patch_capabilities.pl99
-rwxr-xr-xconfigure64
-rwxr-xr-xconfigure.exebin1321472 -> 1402368 bytes
-rw-r--r--dist/changes-4.7.149
-rw-r--r--doc/src/declarative/examples.qdoc2
-rw-r--r--doc/src/declarative/qdeclarativedebugging.qdoc18
-rw-r--r--doc/src/development/qmake-manual.qdoc3
-rw-r--r--doc/src/getting-started/examples.qdoc50
-rw-r--r--doc/src/painting-and-printing/printing.qdoc11
-rw-r--r--doc/src/snippets/widgetprinting.cpp93
-rwxr-xr-xdoc/src/template/scripts/functions.js268
-rw-r--r--doc/src/template/scripts/narrow.js108
-rw-r--r--doc/src/template/style/narrow.css13
-rwxr-xr-xdoc/src/template/style/style.css102
-rw-r--r--examples/declarative/animation/easing/easing.qml2
-rw-r--r--examples/declarative/text/fonts/hello.qml3
-rw-r--r--examples/declarative/toys/corkboards/Day.qml15
-rw-r--r--examples/declarative/ui-components/searchbox/SearchBox.qml2
-rw-r--r--examples/multimedia/audiooutput/audiooutput.cpp4
-rw-r--r--examples/opengl/pbuffers/glwidget.cpp4
-rw-r--r--examples/xml/rsslisting/main.cpp1
-rw-r--r--examples/xml/rsslisting/rsslisting.cpp89
-rw-r--r--examples/xml/rsslisting/rsslisting.h16
-rw-r--r--mkspecs/common/g++.conf2
-rw-r--r--mkspecs/common/mac-g++.conf3
-rw-r--r--mkspecs/common/symbian/symbian.conf62
-rw-r--r--mkspecs/features/default_post.prf87
-rw-r--r--mkspecs/features/moc.prf4
-rw-r--r--mkspecs/linux-icc/qmake.conf2
-rw-r--r--mkspecs/win32-msvc2003/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2005/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2008/qmake.conf3
-rw-r--r--mkspecs/win32-msvc2010/qmake.conf3
-rw-r--r--qmake/generators/unix/unixmake.cpp51
-rw-r--r--src/3rdparty/libconninet.pri18
-rw-r--r--src/3rdparty/libconninet/AUTHORS0
-rw-r--r--src/3rdparty/libconninet/COPYING510
-rw-r--r--src/3rdparty/libconninet/ChangeLog0
-rw-r--r--src/3rdparty/libconninet/INSTALL229
-rw-r--r--src/3rdparty/libconninet/NEWS0
-rw-r--r--src/3rdparty/libconninet/README0
-rwxr-xr-xsrc/3rdparty/libconninet/autogen.sh3
-rw-r--r--src/3rdparty/libconninet/configure.ac86
-rw-r--r--src/3rdparty/libconninet/conninet.pc.in11
-rw-r--r--src/3rdparty/libconninet/debian/changelog305
-rw-r--r--src/3rdparty/libconninet/debian/compat1
-rw-r--r--src/3rdparty/libconninet/debian/control39
-rw-r--r--src/3rdparty/libconninet/debian/copyright19
-rw-r--r--src/3rdparty/libconninet/debian/libconninet0-dev.dirs2
-rw-r--r--src/3rdparty/libconninet/debian/libconninet0-dev.files4
-rw-r--r--src/3rdparty/libconninet/debian/libconninet0.dirs1
-rw-r--r--src/3rdparty/libconninet/debian/libconninet0.files1
-rwxr-xr-xsrc/3rdparty/libconninet/debian/rules123
-rw-r--r--src/3rdparty/libconninet/doxygen.cfg.in1147
-rw-r--r--src/3rdparty/libconninet/src/iapconf.h84
-rw-r--r--src/3rdparty/libconninet/src/iapmonitor.h48
-rw-r--r--src/3rdparty/libconninet/src/proxyconf.h53
-rw-r--r--src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp191
-rw-r--r--src/3rdparty/libconninet/tests/ut_iapconf.cpp186
-rw-r--r--src/3rdparty/libconninet/tests/ut_iapmonitor.cpp118
-rw-r--r--src/3rdparty/libconninet/tests/ut_maemo_icd.cpp274
-rw-r--r--src/3rdparty/libconninet/tests/ut_proxyconf.cpp400
-rw-r--r--src/3rdparty/libjpeg.pri15
-rw-r--r--src/3rdparty/webkit/.tag2
-rw-r--r--src/3rdparty/webkit/ChangeLog8
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog36
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h33
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.cpp111
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.h69
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/symbian/SymbianDefines.h42
-rw-r--r--src/3rdparty/webkit/VERSION2
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog31
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro4
-rw-r--r--src/3rdparty/webkit/WebKit.pri2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp12
-rw-r--r--src/corelib/codecs/qtextcodec_symbian.cpp4
-rw-r--r--src/corelib/corelib.pro15
-rw-r--r--src/corelib/global/global.pri3
-rw-r--r--src/corelib/global/qglobal.cpp81
-rw-r--r--src/corelib/global/qglobal.h10
-rw-r--r--src/corelib/io/qurl.cpp1
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp3
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp38
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h8
-rw-r--r--src/corelib/thread/qthread_unix.cpp2
-rw-r--r--src/corelib/thread/qthread_win.cpp2
-rw-r--r--src/corelib/tools/qbytearray.cpp1
-rw-r--r--src/corelib/tools/qchar.cpp17
-rw-r--r--src/corelib/tools/qstring.cpp43
-rw-r--r--src/corelib/tools/qstringmatcher.cpp1
-rw-r--r--src/corelib/tools/qunicodetables.cpp119
-rw-r--r--src/corelib/tools/qunicodetables_p.h28
-rw-r--r--src/dbus/qdbusconnection_p.h3
-rw-r--r--src/dbus/qdbusintegrator.cpp76
-rw-r--r--src/declarative/debugger/debugger.pri6
-rw-r--r--src/declarative/debugger/qdeclarativedebug_p.h1
-rw-r--r--src/declarative/debugger/qdeclarativedebughelper.cpp66
-rw-r--r--src/declarative/debugger/qdeclarativedebughelper_p.h (renamed from src/declarative/qml/qdeclarativeclassfactory_p.h)33
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp41
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp191
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview_p_p.h4
-rw-r--r--src/declarative/graphicsitems/qdeclarativepositioners_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp10
-rw-r--r--src/declarative/qml/qdeclarative.h2
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp4
-rw-r--r--src/declarative/qml/qdeclarativeengine_p.h1
-rw-r--r--src/declarative/qml/qdeclarativeimport.cpp1
-rw-r--r--src/declarative/qml/qdeclarativetypenotavailable.cpp4
-rw-r--r--src/declarative/qml/qml.pri2
-rw-r--r--src/declarative/util/qdeclarativeanimation.cpp9
-rw-r--r--src/declarative/util/qdeclarativeanimation_p.h2
-rw-r--r--src/declarative/util/qdeclarativefontloader.cpp6
-rw-r--r--src/declarative/util/qdeclarativelistmodel.cpp467
-rw-r--r--src/declarative/util/qdeclarativelistmodel_p.h13
-rw-r--r--src/declarative/util/qdeclarativelistmodel_p_p.h137
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent.cpp33
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent_p.h4
-rw-r--r--src/declarative/util/qdeclarativetimer_p.h2
-rw-r--r--src/declarative/util/qdeclarativeview.cpp2
-rw-r--r--src/declarative/util/qdeclarativexmllistmodel.cpp8
-rw-r--r--src/declarative/util/qlistmodelinterface_p.h3
-rw-r--r--src/gui/dialogs/qfiledialog.cpp1
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp128
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp3
-rw-r--r--src/gui/gui.pro15
-rw-r--r--src/gui/image/qjpeghandler.cpp60
-rw-r--r--src/gui/image/qpixmap.cpp51
-rw-r--r--src/gui/image/qpixmap_x11.cpp3
-rw-r--r--src/gui/image/qpixmapfilter.cpp15
-rw-r--r--src/gui/itemviews/qtreeview.cpp4
-rw-r--r--src/gui/kernel/qapplication.cpp21
-rw-r--r--src/gui/kernel/qapplication_p.h4
-rw-r--r--src/gui/kernel/qapplication_s60.cpp4
-rw-r--r--src/gui/kernel/qapplication_x11.cpp1
-rw-r--r--src/gui/kernel/qdnd_win.cpp12
-rw-r--r--src/gui/painting/qbezier.cpp41
-rw-r--r--src/gui/painting/qprintengine_ps.cpp1
-rw-r--r--src/gui/painting/qprintengine_win.cpp2
-rw-r--r--src/gui/painting/qrasterizer.cpp180
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp20
-rw-r--r--src/gui/painting/qtextureglyphcache_p.h6
-rw-r--r--src/gui/styles/qs60style.cpp3
-rw-r--r--src/gui/styles/qstylehelper_p.h2
-rw-r--r--src/gui/text/qstatictext.cpp5
-rw-r--r--src/gui/text/qtextcontrol.cpp6
-rw-r--r--src/gui/text/qtextdocumentfragment.cpp1
-rw-r--r--src/gui/text/qtexthtmlparser.cpp1
-rw-r--r--src/gui/widgets/qlabel.cpp27
-rw-r--r--src/gui/widgets/qlabel_p.h1
-rw-r--r--src/gui/widgets/qmenu_symbian.cpp8
-rw-r--r--src/gui/widgets/qsplashscreen.cpp7
-rw-r--r--src/imports/folderlistmodel/folderlistmodel.pro6
-rw-r--r--src/imports/gestures/gestures.pro4
-rw-r--r--src/imports/gestures/qdeclarativegesturearea.cpp2
-rw-r--r--src/imports/particles/particles.pro4
-rw-r--r--src/network/access/qfilenetworkreply.cpp5
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp4
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp4
-rw-r--r--src/network/kernel/qhostinfo.cpp19
-rw-r--r--src/network/network.pro15
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp4
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp11
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h2
-rw-r--r--src/opengl/gl2paintengineex/qtriangulatingstroker.cpp1
-rw-r--r--src/opengl/qgl.cpp33
-rw-r--r--src/opengl/qgl_p.h3
-rw-r--r--src/opengl/qgl_x11.cpp5
-rw-r--r--src/opengl/qglframebufferobject.cpp101
-rw-r--r--src/opengl/qglframebufferobject_p.h5
-rw-r--r--src/opengl/qglpixelbuffer.cpp8
-rw-r--r--src/opengl/qglpixelbuffer_win.cpp34
-rw-r--r--src/opengl/qpaintengine_opengl.cpp9
-rw-r--r--src/openvg/qpaintengine_vg.cpp7
-rw-r--r--src/plugins/bearer/icd/dbusdispatcher.cpp (renamed from src/3rdparty/libconninet/src/dbusdispatcher.cpp)62
-rw-r--r--src/plugins/bearer/icd/dbusdispatcher.h (renamed from src/3rdparty/libconninet/src/dbusdispatcher.h)62
-rw-r--r--src/plugins/bearer/icd/iapconf.cpp (renamed from src/3rdparty/libconninet/src/iapconf.cpp)134
-rw-r--r--src/plugins/bearer/icd/iapconf.h74
-rw-r--r--src/plugins/bearer/icd/iapmonitor.cpp (renamed from src/3rdparty/libconninet/src/iapmonitor.cpp)66
-rw-r--r--src/plugins/bearer/icd/iapmonitor.h (renamed from src/declarative/qml/qdeclarativeclassfactory.cpp)32
-rw-r--r--src/plugins/bearer/icd/icd.pro16
-rw-r--r--src/plugins/bearer/icd/maemo_icd.cpp (renamed from src/3rdparty/libconninet/src/maemo_icd.cpp)559
-rw-r--r--src/plugins/bearer/icd/maemo_icd.h (renamed from src/3rdparty/libconninet/src/maemo_icd.h)90
-rw-r--r--src/plugins/bearer/icd/proxyconf.cpp (renamed from src/3rdparty/libconninet/src/proxyconf.cpp)60
-rw-r--r--src/plugins/bearer/icd/proxyconf.h73
-rw-r--r--src/plugins/bearer/icd/qicdengine.cpp14
-rw-r--r--src/plugins/bearer/icd/qicdengine.h2
-rw-r--r--src/plugins/bearer/icd/qnetworksession_impl.cpp18
-rw-r--r--src/plugins/bearer/icd/qnetworksession_impl.h7
-rw-r--r--src/plugins/bearer/icd/wlan-utils.h110
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.h7
-rw-r--r--src/plugins/imageformats/jpeg/jpeg.pro14
-rw-r--r--src/plugins/qpluginbase.pri2
-rw-r--r--src/qbase.pri19
-rw-r--r--src/qt3support/dialogs/q3filedialog.cpp1
-rw-r--r--src/qt3support/text/q3richtext.cpp1
-rw-r--r--src/s60installs/bwins/QtCoreu.def4
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def94
-rw-r--r--src/s60installs/bwins/QtGuiu.def10
-rw-r--r--src/s60installs/eabi/QtDeclarativeu.def95
-rw-r--r--src/s60installs/eabi/QtGuiu.def3
-rw-r--r--src/src.pro3
-rw-r--r--src/xmlpatterns/schema/qxsdtypechecker.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/data/error-object.qml7
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/data/error-property.qml5
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/data/error-property2.qml5
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/data/error-syntax.qml9
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp31
-rw-r--r--tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp15
-rw-r--r--tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h67
-rw-r--r--tests/auto/declarative/qdeclarativedebughelper/qdeclarativedebughelper.pro5
-rw-r--r--tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp115
-rw-r--r--tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp13
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/data/daniel.ttfbin0 -> 51984 bytes
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp42
-rw-r--r--tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp64
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/testtypes.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/testtypes.h6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/data/multipleroles.qml25
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp345
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/datamodel.qml1
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp23
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/quit.qml5
-rw-r--r--tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativeview/data/error1.qml5
-rw-r--r--tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp17
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt1
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp9
-rw-r--r--tests/auto/qapplication/test/test.pro2
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp188
-rw-r--r--tests/auto/qgraphicsview/tst_qgraphicsview.cpp48
-rw-r--r--tests/auto/qimagereader/images/qtbug13653-no_eoi.jpgbin0 -> 8250 bytes
-rw-r--r--tests/auto/qimagereader/qimagereader.qrc1
-rw-r--r--tests/auto/qimagereader/tst_qimagereader.cpp5
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp23
-rw-r--r--tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp22
-rw-r--r--tests/auto/qsettings/qsettings.pro1
-rw-r--r--tests/auto/qthread/tst_qthread.cpp41
-rw-r--r--tests/auto/qtimer/tst_qtimer.cpp27
-rw-r--r--tests/auto/qtreeview/tst_qtreeview.cpp22
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp33
-rw-r--r--tests/auto/selftests/expected_cmptest.txt2
-rw-r--r--tests/auto/selftests/expected_crashes_3.txt2
-rw-r--r--tests/auto/selftests/expected_longstring.txt2
-rw-r--r--tests/auto/selftests/expected_maxwarnings.txt2
-rw-r--r--tests/auto/selftests/expected_skip.txt2
-rw-r--r--tools/assistant/tools/assistant/cmdlineparser.cpp7
-rw-r--r--tools/assistant/tools/assistant/cmdlineparser.h1
-rw-r--r--tools/assistant/tools/assistant/doc/assistant.qdocconf2
-rw-r--r--tools/assistant/tools/assistant/main.cpp12
-rw-r--r--tools/assistant/tools/assistant/mainwindow.cpp9
-rw-r--r--tools/assistant/tools/assistant/mainwindow.h2
-rw-r--r--tools/configure/configure.pro2
-rw-r--r--tools/configure/configureapp.cpp29
-rw-r--r--tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp2
-rw-r--r--tools/qdoc3/doc/files/qt.qdocconf8
-rw-r--r--tools/qdoc3/generator.cpp35
-rw-r--r--tools/qdoc3/test/assistant.qdocconf4
-rw-r--r--tools/qdoc3/test/designer.qdocconf4
-rw-r--r--tools/qdoc3/test/linguist.qdocconf4
-rw-r--r--tools/qdoc3/test/qdeclarative.qdocconf8
-rw-r--r--tools/qdoc3/test/qmake.qdocconf4
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf8
-rw-r--r--tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf8
-rw-r--r--tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf8
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf42
-rw-r--r--tools/qdoc3/test/qt.qdocconf8
-rw-r--r--tools/qdoc3/test/qt_ja_JP.qdocconf8
-rw-r--r--tools/qdoc3/test/qt_zh_CN.qdocconf8
-rw-r--r--tools/qml/browser/Browser.qml48
-rw-r--r--translations/assistant_sl.ts579
-rw-r--r--translations/designer_sl.ts110
-rw-r--r--translations/linguist_sl.ts709
-rw-r--r--translations/qt_gl.ts9828
-rw-r--r--translations/qt_help_sl.ts2
-rw-r--r--translations/qt_sl.ts479
-rw-r--r--util/unicode/main.cpp211
285 files changed, 16375 insertions, 6654 deletions
diff --git a/bin/createpackage.pl b/bin/createpackage.pl
index cce0b54..85be5d3 100755
--- a/bin/createpackage.pl
+++ b/bin/createpackage.pl
@@ -212,21 +212,21 @@ my $certpath = File::Spec->catdir($scriptpath, File::Spec->updir(), "src/s60inst
# Check some pre-conditions and print error messages if needed.
unless (length($templatepkg)) {
- print "\nError: Template PKG filename is not defined!\n";
+ print "\nERROR: Template PKG filename is not defined!\n";
Usage();
}
# Check template exist
stat($templatepkg);
unless( -e _ ) {
- print "\nError: Package description file '$templatepkg' does not exist!\n";
+ print "\nERROR: Package description file '$templatepkg' does not exist!\n";
Usage();
}
# Check certifcate preconditions and set default certificate variables if needed
if (length($certificate)) {
unless(length($key)) {
- print "\nError: Custom certificate key file parameter missing.!\n";
+ print "\nERROR: Custom certificate key file parameter missing.!\n";
Usage();
}
} else {
@@ -261,7 +261,7 @@ if (length($certfile)) {
# Do some validation
unless(scalar(@certinfo) >= 2 && scalar(@certinfo) <= 3 && length($certinfo[0]) && length($certinfo[1]) ) {
- print "\nError: $certfile line '$_' does not contain valid information!\n";
+ print "\nERROR: $certfile line '$_' does not contain valid information!\n";
Usage();
}
@@ -280,14 +280,14 @@ if (!$preservePkgOutput) {
local $/;
# read template file
-open( TEMPLATE, $templatepkg) or die "Error '$templatepkg': $!\n";
+open( TEMPLATE, $templatepkg) or die "ERROR: '$templatepkg': $!";
$_=<TEMPLATE>;
close (TEMPLATE);
# If the pkg file does not contain macros, there is no need for platform or target.
if (m/\$\(PLATFORM\)/) {
unless (length($platform) && length($target)) {
- print "\nError: Platform or target is not defined!\n";
+ print "\nERROR: Platform or target is not defined!\n";
Usage();
}
}
@@ -297,7 +297,7 @@ s/\$\(PLATFORM\)/$platform/gm;
s/\$\(TARGET\)/$target/gm;
#write the output
-open( OUTPUT, ">$pkgoutput" ) or die "Error '$pkgoutput' $!\n";
+open( OUTPUT, ">$pkgoutput" ) or die "ERROR: '$pkgoutput' $!";
print OUTPUT $_;
close OUTPUT;
@@ -306,7 +306,7 @@ if ($preprocessonly) {
}
if($stub) {
- if(!($epocroot)) { die("EPOCROOT must be set to create stub sis files"); }
+ if(!($epocroot)) { die("ERROR: EPOCROOT must be set to create stub sis files"); }
my $systeminstall = "$epocroot/epoc32/data/z/system/install";
mkpath($systeminstall);
my $stub_sis_name = $systeminstall."/".$stub_sis_name;
@@ -319,15 +319,15 @@ if($stub) {
&& !$onlyUnsigned) {
print("Auto-patching capabilities for self signed package.\n");
my $patch_capabilities = File::Spec->catfile(dirname($0), "patch_capabilities");
- system ("$patch_capabilities $pkgoutput");
+ system ("$patch_capabilities $pkgoutput") and die ("ERROR: Automatic patching failed");
}
# Create SIS.
# The 'and' is because system uses 0 to indicate success.
if($epocroot) {
- system ("$epocroot/epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("makesis failed");
+ system ("$epocroot/epoc32/tools/makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed");
} else {
- system ("makesis $pkgoutput $unsigned_sis_name") and die ("makesis failed");
+ system ("makesis $pkgoutput $unsigned_sis_name") and die ("ERROR: makesis failed");
}
print("\n");
@@ -354,7 +354,7 @@ if($stub) {
my $relcert = File::Spec->abs2rel($certificate);
my $relkey = File::Spec->abs2rel($key);
# The 'and' is because system uses 0 to indicate success.
- system ("signsis $unsigned_sis_name $signed_sis_name $relcert $relkey $passphrase") and die ("signsis failed");
+ system ("signsis $unsigned_sis_name $signed_sis_name $relcert $relkey $passphrase") and die ("ERROR: signsis failed");
# Check if creating signed SIS Succeeded
stat($signed_sis_name);
diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl
index 0c0538c..06ab116 100755
--- a/bin/patch_capabilities.pl
+++ b/bin/patch_capabilities.pl
@@ -46,7 +46,13 @@
#
#######################################################################
+#
+# Note: Please make sure to output all changes done to the pkg file in a print statements
+# starting with "Patching: " to ease integration into IDEs!
+#
+
use File::Copy;
+use File::Spec;
sub Usage() {
print("This script can be used to set capabilities of all binaries\n");
@@ -142,39 +148,56 @@ if (@ARGV)
# Parse each line.
while (<PKG>)
{
- # Patch pkg UID
my $line = $_;
my $newLine = $line;
- if ($line =~ m/^\#.*\(0x[0-9|a-f|A-F]*\).*$/)
+
+ # Patch pkg UID if it's in protected range
+ if ($line =~ m/^\#.*\((0x[0-7][0-9a-fA-F]*)\).*$/)
{
- $newLine =~ s/\(0x./\(0xE/;
+ my $oldUID = $1;
+ my $newUID = $oldUID;
+ $newUID =~ s/0x./0xE/i;
+ $newLine =~ s/$oldUID/$newUID/;
+ print ("Patching: UID $oldUID is not compatible with self-signing! Changed to: $newUID.\n");
}
- # Patch embedded sis name and UID
- if ($line =~ m/^@.*\.sis.*\(0x[0-9|a-f|A-F]*\).*$/)
+ # Patch embedded sis name and UID if UID is in protected range
+ if ($line =~ m/^@\"*(.*\.sis).*\((0x[0-7][0-9a-fA-F]*)\).*$/)
{
- $newLine =~ s/\(0x./\(0xE/;
- if ($line !~ m/^.*_selfsigned.sis.*$/)
+ my $oldSisName = $1;
+ my $oldUID = $2;
+ my $newUID = $oldUID;
+ $newUID =~ s/0x./0xE/i;
+ $newLine =~ s/$oldUID/$newUID/;
+ print ("Patching: Embedded sis $oldSisName UID $oldUID changed to: $newUID.\n");
+
+ if ($oldSisName !~ m/^.*_selfsigned.sis$/i)
{
- $newLine =~ s/\.sis/_selfsigned\.sis/i;
+ my $newSisName = $oldSisName;
+ $newSisName =~ s/\.sis$/_selfsigned\.sis/i;
+ $newLine =~ s/$oldSisName/$newSisName/i;
+ print ("Patching: Embedded sis $oldSisName name changed to: $newSisName.\n");
}
}
- # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, also)
+ # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, too)
# to reduce unnecessary error messages.
- if ($line =~ m/^\(0x2002af5f\).*\{.*\}$/)
+ if ($line =~ m/^\((0x2002af5f)\).*\{.*\}$/)
{
- $newLine = "\n"
+ $newLine = "\n";
+ print ("Patching: Removed dependency to sqlite3.sis ($1) to avoid installation issues in case sqlite3.sis is also patched.\n");
}
- if ($line =~ m/^\(0x2001E61C\).*\{.*\}$/)
+ if ($line =~ m/^\((0x2001E61C)\).*\{.*\}$/)
{
- $newLine = "\n"
+ $newLine = "\n";
+ print ("Patching: Removed dependency to qt.sis ($1) to avoid installation issues in case qt.sis is also patched.\n");
}
# Remove manufacturer ifdef
if ($line =~ m/^.*\(MANUFACTURER\)\=\(.*\).*$/)
{
$newLine = "\n";
+ print ("Patching: Removed manufacturer check as it is usually not desirable in self-signed packages.\n");
}
if ($line =~ m/^ELSEIF.*MANUFACTURER$/)
@@ -240,7 +263,9 @@ if (@ARGV)
foreach my $binaryPath(@binaries)
{
# Create the command line for setting the capabilities.
+ my ($binaryVolume, $binaryDirs, $binaryBaseName) = File::Spec->splitpath($binaryPath);
my $commandToExecute = $baseCommandToExecute;
+ my $executeNeeded = 0;
if (@capabilitiesSpecified)
{
$commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesSpecified));
@@ -250,34 +275,70 @@ if (@ARGV)
my $dllCaps;
open($dllCaps, "elftran -dump s $binaryPath |") or die ("Could not execute elftran");
my $capsFound = 0;
+ my $originalVid;
my @capabilitiesToSet;
my $capabilitiesToAllow = join(" ", @capabilitiesToAllow);
+ my @capabilitiesToDrop;
while (<$dllCaps>) {
+ if (/^Secure ID: ([0-7][0-9a-fA-F]*)$/) {
+ my $exeSid = $1;
+ if ($binaryBaseName =~ /\.exe$/) {
+ # Installer refuses to install protected executables in a self signed package, so abort if one is detected.
+ # We can't simply just patch the executable SID, as any registration resources executable uses will be linked to it via SID.
+ print ("Patching: Executable with SID in the protected range (0x$exeSid) detected: \"$binaryBaseName\". A self-signed sis with protected executables is not supported.\n");
+ exit(1);
+ }
+ }
+ if (/^Vendor ID: ([0-9a-fA-F]*)$/) {
+ $originalVid = "$1";
+ }
if (!$capsFound) {
$capsFound = 1 if (/Capabilities:/);
} else {
$_ = trim($_);
if ($capabilitiesToAllow =~ /$_/) {
push(@capabilitiesToSet, $_);
+ } else {
+ push(@capabilitiesToDrop, $_);
}
}
}
close($dllCaps);
+ if ($originalVid !~ "00000000") {
+ print ("Patching: Vendor ID (0x$originalVid) incompatible with self-signed packages, setting it to zero for \"$binaryBaseName\".\n");
+ $executeNeeded = 1;
+ }
+ if ($#capabilitiesToDrop) {
+ my $capsToDropStr = join("\", \"", @capabilitiesToDrop);
+ $capsToDropStr =~ s/\", \"$//;
+
+ if ($binaryBaseName =~ /\.exe$/) {
+ # While libraries often have capabilities they do not themselves need just to enable them to be loaded by wider variety of processes,
+ # executables are more likely to need every capability they have been assigned or they won't function correctly.
+ print ("Patching: Executable with capabilities incompatible with self-signing detected: \"$binaryBaseName\". (Incompatible capabilities: \"$capsToDropStr\".) Reducing capabilities is only supported for libraries.\n");
+ exit(1);
+ } else {
+ print ("Patching: The following capabilities used in \"$binaryBaseName\" are not compatible with a self-signed package and will be removed: \"$capsToDropStr\".\n");
+ $executeNeeded = 1;
+ }
+ }
$commandToExecute = sprintf($baseCommandToExecute, join(" ", @capabilitiesToSet));
}
$commandToExecute .= $binaryPath;
- # Actually execute the elftran command to set the capabilities.
- print ("Executing ".$commandToExecute."\n");
- system ($commandToExecute." > $nullDevice");
-
+ if ($executeNeeded) {
+ # Actually execute the elftran command to set the capabilities.
+ print ("\n");
+ system ("$commandToExecute > $nullDevice");
+ }
## Create another command line to check that the set capabilities are correct.
#$commandToExecute = "elftran -dump s ".$binaryPath;
}
print ("\n");
- print ("NOTE: A patched package may not work as expected due to reduced capabilities.\n");
- print (" Therefore it should not be used for any kind of Symbian signing or distribution!\n");
+ print ("NOTE: A patched package may not work as expected due to reduced capabilities and other modifications,\n");
+ print (" so it should not be used for any kind of Symbian signing or distribution!\n");
+ print (" Use a proper certificate to avoid the need to patch the package.\n");
print ("\n");
}
}
diff --git a/configure b/configure
index b933ac1..4316cc8 100755
--- a/configure
+++ b/configure
@@ -685,7 +685,8 @@ CFG_MULTIMEDIA=auto
CFG_AUDIO_BACKEND=auto
CFG_SVG=auto
CFG_DECLARATIVE=auto
-CFG_WEBKIT=auto # (yes|no|auto)
+CFG_DECLARATIVE_DEBUG=yes
+CFG_WEBKIT=auto # (yes|no|auto|debug)
CFG_JAVASCRIPTCORE_JIT=auto
CFG_GFX_AVAILABLE="linuxfb transformed qvfb vnc multiscreen directfb"
@@ -938,13 +939,26 @@ while [ "$#" -gt 0 ]; do
VAR=`echo $1 | sed "s,^-[^-]*-\(.*\),\1,"`
VAL=`echo $1 | sed "s,^-\([^-]*\).*,\1,"`
;;
+ #WebKit options
+ -webkit)
+ VAR="webkit"
+ VAL="yes"
+ ;;
+ -webkit-debug)
+ VAR="webkit"
+ VAL="debug"
+ ;;
+ -no-webkit)
+ VAR="webkit"
+ VAL="no"
+ ;;
#Qt style no options
-no-*)
VAR=`echo $1 | sed "s,^-no-\(.*\),\1,"`
VAL=no
;;
#Qt style yes options
- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
+ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
VAL=yes
;;
@@ -1997,17 +2011,21 @@ while [ "$#" -gt 0 ]; do
fi
fi
;;
- webkit)
- if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then
- CFG_WEBKIT="yes"
+ declarative-debug)
+ if [ "$VAL" = "yes" ]; then
+ CFG_DECLARATIVE_DEBUG="yes"
else
if [ "$VAL" = "no" ]; then
- CFG_WEBKIT="no"
+ CFG_DECLARATIVE_DEBUG="no"
else
UNKNOWN_OPT=yes
fi
fi
;;
+ webkit)
+ [ "$VAL" = "auto" ] && VAL="yes"
+ CFG_WEBKIT="$VAL"
+ ;;
javascript-jit)
if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ] || [ "$VAL" = "no" ]; then
CFG_JAVASCRIPTCORE_JIT="$VAL"
@@ -3523,9 +3541,10 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-no-multimedia] [-multimedia] [-no-phonon] [-phonon] [-no-phonon-backend] [-phonon-backend]
[-no-media-backend] [-media-backend] [-no-audio-backend] [-audio-backend]
[-no-openssl] [-openssl] [-openssl-linked]
- [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-no-javascript-jit] [-javascript-jit]
- [-no-script] [-script] [-no-scripttools] [-scripttools] [-no-declarative] [-declarative]
-
+ [-no-gtkstyle] [-gtkstyle] [-no-svg] [-svg] [-no-webkit] [-webkit] [-webkit-debug]
+ [-no-javascript-jit] [-javascript-jit]
+ [-no-script] [-script] [-no-scripttools] [-scripttools]
+ [-no-declarative] [-declarative][-no-declarative-debug] [-declarative-debug]
[additional platform specific options (see below)]
@@ -3677,6 +3696,7 @@ fi
-no-webkit ......... Do not build the WebKit module.
+ -webkit ............ Build the WebKit module.
WebKit is built if a decent C++ compiler is used.
+ -webkit-debug ...... Build the WebKit module with debug symbols.
-no-javascript-jit . Do not build the JavaScriptCore JIT compiler.
+ -javascript-jit .... Build the JavaScriptCore JIT compiler.
@@ -3687,9 +3707,12 @@ fi
-no-scripttools .... Do not build the QtScriptTools module.
+ -scripttools ....... Build the QtScriptTools module.
- -no-declarative .....Do not build the declarative module.
+ -no-declarative ..... Do not build the declarative module.
+ -declarative ....... Build the declarative module.
+ -no-declarative-debug ..... Do not build the declarative debugging support.
+ + -declarative-debug ....... Build the declarative debugging support.
+
-platform target ... The operating system and compiler you are building
on ($PLATFORM).
@@ -7175,14 +7198,15 @@ if [ "$CFG_WEBKIT" = "auto" ]; then
CFG_WEBKIT="$canBuildWebKit"
fi
-if [ "$CFG_WEBKIT" = "yes" ]; then
+if [ "$CFG_WEBKIT" != "no" ]; then
# This include takes care of adding "webkit" to QT_CONFIG.
cp -f "$relpath/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri" "$outpath/mkspecs/modules/qt_webkit_version.pri"
# The reason we set CFG_WEBKIT, is such that the printed overview of what will be enabled, shows correctly.
- CFG_WEBKIT="yes"
+ if [ "$CFG_WEBKIT" = "debug" ]; then
+ QMAKE_CONFIG="$QMAKE_CONFIG webkit-debug"
+ fi
else
rm -f "$outpath/mkspecs/modules/qt_webkit_version.pri"
- CFG_WEBKIT="no"
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_WEBKIT"
fi
@@ -7229,6 +7253,9 @@ fi
if [ "$CFG_DECLARATIVE" = "yes" ]; then
QT_CONFIG="$QT_CONFIG declarative"
+ if [ "$CFG_DECLARATIVE_DEBUG" = "no" ]; then
+ QCONFIG_FLAGS="$QCONFIG_FLAGS QDECLARATIVE_NO_DEBUG_PROTOCOL"
+ fi
else
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_DECLARATIVE"
fi
@@ -8111,7 +8138,7 @@ EOF
*) ;;
esac
-if [ "$PLATFORM_MAC" = "yes" ] && [ "$CFG_MAC_DWARF2" = "no" ] && [ "$CFG_WEBKIT" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
+if [ "$PLATFORM_MAC" = "yes" ] && [ "$CFG_MAC_DWARF2" = "no" ] && [ "$CFG_WEBKIT" != "no" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then
cat <<EOF
WARNING: DWARF2 debug symbols are not enabled. Linking webkit
in debug mode will run out of memory on systems with 2GB or less.
@@ -8188,8 +8215,12 @@ echo "QtXmlPatterns module ... $CFG_XMLPATTERNS"
echo "Phonon module .......... $CFG_PHONON"
echo "Multimedia module ...... $CFG_MULTIMEDIA"
echo "SVG module ............. $CFG_SVG"
-echo "WebKit module .......... $CFG_WEBKIT"
-if [ "$CFG_WEBKIT" = "yes" ]; then
+case "$CFG_WEBKIT" in
+ yes) echo "WebKit module .......... yes" ;;
+ debug) echo "WebKit module .......... yes (debug)" ;;
+ no) echo "WebKit module .......... no" ;;
+esac
+if [ "$CFG_WEBKIT" != "no" ]; then
if [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" ]; then
echo "JavaScriptCore JIT ..... To be decided by JavaScriptCore"
else
@@ -8197,6 +8228,7 @@ if [ "$CFG_WEBKIT" = "yes" ]; then
fi
fi
echo "Declarative module ..... $CFG_DECLARATIVE"
+echo "Declarative debugging ...$CFG_DECLARATIVE_DEBUG"
echo "Support for S60 ........ $CFG_S60"
echo "Symbian DEF files ...... $CFG_SYMBIAN_DEFFILES"
echo "STL support ............ $CFG_STL"
diff --git a/configure.exe b/configure.exe
index 18c9004..e2f4331 100755
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/dist/changes-4.7.1 b/dist/changes-4.7.1
index c8b26c2..29b4d41 100644
--- a/dist/changes-4.7.1
+++ b/dist/changes-4.7.1
@@ -26,6 +26,11 @@ Optimizations
- Improved the benchmarking library's timing code
* Uses a faster access to the system clock
+ - Introduction of SSSE3 for alpha blending of images.
+
+ - On x86 and 86_64, the memory access has been improved for alpha blending
+ and for some composition functions.
+
* See list of Important Behavior Changes below
@@ -40,6 +45,15 @@ QtCore
QtGui
-----
+ - QGraphicsWidget
+ * [QTBUG-13188] Make sure a font that has propagated from a parent can
+ be set on a QPainter.
+
+
+ - QStaticText
+ * [QTBUG-12614] Fix crash with zero-width string.
+ * [QTBUG-12540] Fix rendering of large glyphs with OpenGL2 paint engine.
+
QtDBus
------
@@ -51,6 +65,10 @@ QtMultimedia
QtNetwork
---------
+ - QSslConfiguration
+ * [QTBUG-13265] fix crash with empty configuration
+ - QSslCertificate
+ * [QTBUG-12489] support dates > 2049
QtOpenGL
@@ -72,11 +90,23 @@ QtSql
QtSvg
-----
+QtXmlPatterns
+-------------
+ - XML Schema internals:
+ * [QTBUG-11559] Only parse 3 digits of time fraction
+
+QtDeclarative
+-------------
+ - QML debugging:
+ * [QTBUG-5162] The debugger is now activated with -qmljsdebugger command
+ line arg to enable support for platforms without environment variables
Qt Plugins
----------
-
+ - Jpeg image IO plugin
+ * [QTBUG-13653] Fixed infinite loop when loading jpeg without EOI marker
+ from memory.
****************************************************************************
* Platform Specific Changes *
@@ -88,7 +118,7 @@ Qt for Unix (X11 and Mac OS X)
Qt for Linux/X11
----------------
-
+ - The configure script now detects all vector extensions of x86 and x86_64
Qt for Windows
--------------
@@ -96,11 +126,23 @@ Qt for Windows
Qt for Mac OS X
---------------
-
+ - The configure script now detects all vector extensions of x86 and x86_64
Qt for Symbian
--------------
+ - configure
+ * [QTBUG-11671] Fixed audio-backend detection in configure tests.
+
+ - qmake
+ * [QTBUG-13523] Added support for using -L notation in the LIBS variable
+ when building with the symbian/linux-armcc or gcce mkspec.
+
+ - QInputContext
+ * [QTBUG-12949] Fixed a bug where passwords would not be committed when
+ confirming.
+ * [QTBUG-13472] Fixed crash in input methods when using symbols menu and
+ numbers only.
****************************************************************************
@@ -110,6 +152,7 @@ Qt for Symbian
- Designer
- uic
+ * Improve warnings and error reports
****************************************************************************
* Important Behavior Changes *
diff --git a/doc/src/declarative/examples.qdoc b/doc/src/declarative/examples.qdoc
index 9929cfe..3f075bb 100644
--- a/doc/src/declarative/examples.qdoc
+++ b/doc/src/declarative/examples.qdoc
@@ -28,7 +28,7 @@
/*!
\page qdeclarativeexamples.html
\title QML Examples and Demos
- \brief Building UI's with QML
+ \brief Building UIs with QML
\ingroup all-examples
diff --git a/doc/src/declarative/qdeclarativedebugging.qdoc b/doc/src/declarative/qdeclarativedebugging.qdoc
index ea21852..64c312c 100644
--- a/doc/src/declarative/qdeclarativedebugging.qdoc
+++ b/doc/src/declarative/qdeclarativedebugging.qdoc
@@ -79,20 +79,8 @@ QDeclarativeImportDatabase::resolveType "Rectangle" = "QDeclarativeRectangle"
\section1 Debugging with Qt Creator
\l{http://qt.nokia.com/products/developer-tools}{Qt Creator} provides built-in
-support for QML debugging. Open a QML project in Creator and enter Debug mode,
-or click the "Start Debugging" option from the menu, and Creator will
-show QML debugging information and options for your application, including
-object inspection, property monitoring and application frame-rate analysis.
-
-Creator can be used to debug both local and remote QML applications. To
-enable remote debugging, start the \l {QML Viewer}
-on the remote device with a debugging port defined, like this:
-
-\code
- QML_DEBUG_SERVER_PORT=3768 qmlviewer myqmlfile.qml
-\endcode
-
-In Creator, open the project settings pane and set the server and port
-details for the remote device, then start debugging.
+support for QML debugging. QML projects and standalone C++ applications that
+utilize QML can be debugged on desktops as well as on remote devices.
+For more information, see the Qt Creator Manual.
*/
diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index f4becf8..754b8ad 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -1602,6 +1602,9 @@
\snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 36
+ Note that \c qmake will skip files that are executable. If you need to install
+ executable files, you can unset the files' executable flags.
+
\target LEXIMPLS
\section1 LEXIMPLS
diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc
index e8c85e6..a5f3446 100644
--- a/doc/src/getting-started/examples.qdoc
+++ b/doc/src/getting-started/examples.qdoc
@@ -273,7 +273,7 @@
\page examples-painting.html
\ingroup all-examples
\title Painting Examples
- \brief How to use the Qt painting system
+ \brief How to use the Qt painting system.
\image painting-examples.png
@@ -303,7 +303,7 @@
\page examples-richtext.html
\ingroup all-examples
\title Rich Text Examples
- \brief Using the document-oriented rich text engine
+ \brief Using the document-oriented rich text engine.
\image richtext-examples.png
@@ -324,7 +324,7 @@
\page examples-desktop.html
\ingroup all-examples
\title Desktop Examples
- \brief Integrating your Qt application with your favorite desktop
+ \brief Integrating your Qt application with your favorite desktop.
\image desktop-examples.png
@@ -371,7 +371,7 @@
\page examples-threadandconcurrent.html
\ingroup all-examples
\title Threading and Concurrent Programming Examples
- \brief Threading and concurrent programming in Qt
+ \brief Threading and concurrent programming in Qt.
\image thread-examples.png
@@ -409,7 +409,7 @@
\page examples.tools.html
\ingroup all-examples
\title Tools Examples
- \brief Using Qt's containers, iterators, and other tool classes
+ \brief Using Qt's containers, iterators, and other tool classes.
\image tool-examples.png
@@ -445,7 +445,7 @@
\page examples-network.html
\ingroup all-examples
\title Network Examples
- \brief How to do network programming in Qt
+ \brief How to do network programming in Qt.
\image network-examples.png
@@ -482,7 +482,7 @@
\page examples-ipc.html
\ingroup all-examples
\title IPC Examples
- \brief Inter-Process Communication with Qt
+ \brief Inter-Process Communication with Qt.
\image ipc-examples.png
@@ -497,7 +497,7 @@
\page examples-opengl.html
\ingroup all-examples
\title OpenGL Examples
- \brief Accessing OpenGL from Qt
+ \brief Accessing OpenGL from Qt.
\image opengl-examples.png
@@ -529,7 +529,7 @@
\page examples-openvg.html
\ingroup all-examples
\title OpenVG Examples
- \brief Accessing OpenVG from Qt
+ \brief Accessing OpenVG from Qt.
\image opengl-examples.png
@@ -548,7 +548,7 @@
\page examples-multimedia.html
\ingroup all-examples
\title Multimedia Examples
- \brief Audio, video, and Phonon with Qt
+ \brief Audio, video, and Phonon with Qt.
\image phonon-examples.png
@@ -595,7 +595,7 @@
\page examples-sql.html
\ingroup all-examples
\title SQL Examples
- \brief Accessing your SQL database from Qt
+ \brief Accessing your SQL database from Qt.
\image sql-examples.png
@@ -623,7 +623,7 @@
\page examples-xml.html
\ingroup all-examples
\title XML Examples
- \brief Using XML with Qt
+ \brief Using XML with Qt.
\image xml-examples.png XML
@@ -658,7 +658,7 @@
\page examples-designer.html
\ingroup all-examples
\title Qt Designer Examples
- \brief Using Qt Designer to build your UI
+ \brief Using Qt Designer to build your UI.
\image designer-examples.png QtDesigner
@@ -681,7 +681,7 @@
\page examples-uitools.html
\ingroup all-examples
\title UiTools Examples
- \brief Using the QtUiTools module
+ \brief Using the QtUiTools module.
\image uitools-examples.png UiTools
@@ -695,7 +695,7 @@
\page examples-linguist.html
\ingroup all-examples
\title Qt Linguist Examples
- \brief Using Qt Linguist to internationalize your Qt application
+ \brief Using Qt Linguist to internationalize your Qt application.
\image linguist-examples.png
@@ -713,7 +713,7 @@
\page examples-script.html
\ingroup all-examples
\title Qt Script Examples
- \brief Using the Qt scripting environment
+ \brief Using the Qt scripting environment.
\image qtscript-examples.png QtScript
@@ -740,7 +740,7 @@
\page examples-webkit.html
\ingroup all-examples
\title WebKit Examples
- \brief Using WebKit in your Qt application
+ \brief Using WebKit in your Qt application.
\image webkit-examples.png WebKit
@@ -779,7 +779,7 @@
\page examples-helpsystem.html
\ingroup all-examples
\title Help System Examples
- \brief Adding interactive help to your Qt application
+ \brief Adding interactive help to your Qt application.
\image assistant-examples.png HelpSystem
@@ -800,7 +800,7 @@
\page examples-statemachine.html
\ingroup all-examples
\title State Machine Examples
- \brief Using Qt's finite state machine classes
+ \brief Using Qt's finite state machine classes.
\image statemachine-examples.png StateMachine
@@ -824,7 +824,7 @@
\page examples-animation.html
\ingroup all-examples
\title Animation Framework Examples
- \brief Doing animations with Qt
+ \brief Doing animations with Qt.
\image animation-examples.png Animation
@@ -844,7 +844,7 @@
\page examples-touch.html
\ingroup all-examples
\title Touch Input Examples
- \brief Using Qt's touch input capability
+ \brief Using Qt's touch input capability.
Support for touch input makes it possible for developers to create
extensible and intuitive user interfaces.
@@ -861,7 +861,7 @@
\page examples-gestures.html
\ingroup all-examples
\title Gestures Examples
- \brief Gesture programming examples
+ \brief Gesture programming examples.
The API of the gesture framework is not yet finalized and
still subject to change.
@@ -875,7 +875,7 @@
\page examples-dbus.html
\ingroup all-examples
\title D-Bus Examples
- \brief Using D-Bus from Qt applications
+ \brief Using D-Bus from Qt applications.
\list
\o \l{dbus/dbus-chat}{Chat}
@@ -892,7 +892,7 @@
\page examples-embeddedlinux.html
\ingroup all-examples
\title Qt for Embedded Linux Examples
- \brief Using Qt in Embedded Linux
+ \brief Using Qt in Embedded Linux.
\image qt-embedded-examples.png QtEmbedded
@@ -912,7 +912,7 @@
\page examples-activeqt.html
\ingroup all-examples
\title ActiveQt Examples
- \brief Using ActiveX from Qt applications
+ \brief Using ActiveX from Qt applications.
\image activeqt-examples.png ActiveQt
diff --git a/doc/src/painting-and-printing/printing.qdoc b/doc/src/painting-and-printing/printing.qdoc
index 62c8192..97cd92f 100644
--- a/doc/src/painting-and-printing/printing.qdoc
+++ b/doc/src/painting-and-printing/printing.qdoc
@@ -136,6 +136,17 @@
used is constructed using the form of the constructor that accepts a
QPaintDevice argument.
+ \section1 Printing Widgets
+
+ To print a widget, you can use the QWidget::render() function. As mentioned,
+ the printer's resolution is usually higher than the screen resolution, so you
+ will have to scale the painter. You may also want to position the widget on the
+ page. The following code sample shows how this may look.
+
+ \snippet doc/src/snippets/widgetprinting.cpp 0
+
+ This will center the widget on the page and scale it so that it fits the page.
+
\section1 Printing from Complex Widgets
Certain widgets, such as QTextEdit and QGraphicsView, display rich content
diff --git a/doc/src/snippets/widgetprinting.cpp b/doc/src/snippets/widgetprinting.cpp
new file mode 100644
index 0000000..47839d8
--- /dev/null
+++ b/doc/src/snippets/widgetprinting.cpp
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window() {
+ myWidget = new QPushButton("Print Me");
+ connect(myWidget, SIGNAL(clicked()), this, SLOT(print()));
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(myWidget);
+ setLayout(layout);
+ }
+
+private slots:
+ void print() {
+ QPrinter printer(QPrinter::HighResolution);
+
+ printer.setOutputFileName("test.pdf");
+
+//! [0]
+ QPainter painter;
+ painter.begin(&printer);
+ double xscale = printer.pageRect().width()/double(myWidget->width());
+ double yscale = printer.pageRect().height()/double(myWidget->height());
+ double scale = qMin(xscale, yscale);
+ painter.translate(printer.paperRect().x() + printer.pageRect().width()/2,
+ printer.paperRect().y() + printer.pageRect().height()/2);
+ painter.scale(scale, scale);
+ painter.translate(-width()/2, -height()/2);
+
+ myWidget->render(&painter);
+//! [0]
+ }
+
+private:
+ QPushButton *myWidget;
+};
+
+int main(int argv, char **args)
+{
+ QApplication app(argv, args);
+
+ Window window;
+ window.show();
+
+ return app.exec();
+}
+
+#include "main.moc"
+
diff --git a/doc/src/template/scripts/functions.js b/doc/src/template/scripts/functions.js
index faa4ca4..0bb88a8 100755
--- a/doc/src/template/scripts/functions.js
+++ b/doc/src/template/scripts/functions.js
@@ -1,38 +1,57 @@
+// Removing search results
+function hideSearchResults() {
+/* hiding search results as the user clicks on the different categories */
+ $('#resultdialog').removeClass('active');
+ $("#resultlist").removeClass().addClass('all');
+ $("#resultlinks").removeClass().addClass('all');
+ $("#searchcount").removeClass().addClass('all');
+}
+/* closing the searhc result dialog */
+$('#resultclose').click(function(e) {
+ e.preventDefault();
+ hideSearchResults();
+});
+
+$(document.body).click(function() {
+});
+
/* START non link areas where cursor should change to pointing hand */
$('.t_button').mouseover(function() {
$('.t_button').css('cursor','pointer');
- /*document.getElementById(this.id).style.cursor='pointer';*/
});
/* END non link areas */
+/* Changing font size to smaller */
$('#smallA').click(function() {
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','smaller');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('font-size','smaller');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
+/* Reset font size */
$('#medA').click(function() {
- $('.content .heading').css('font','600 16px/1 Arial');
- $('.content h1').css('font','600 18px/1.2 Arial');
- $('.content h2').css('font','600 16px/1.2 Arial');
- $('.content h3').css('font','600 14px/1.2 Arial');
- $('.content p').css('font','13px/20px Verdana');
- $('.content li').css('font','400 13px/1 Verdana');
- $('.content li').css('line-height','14px');
- $('.content .toc li').css('font', 'normal 10px/1.2 Verdana');
- $('.content table').css('font','13px/1.2 Verdana');
- $('.content .heading').css('font','600 16px/1 Arial');
- $('.content .indexboxcont li').css('font','600 13px/1 Verdana');
+ $('.mainContent .heading').css('font','600 16px/1 Arial');
+ $('.mainContent h1').css('font','600 18px/1.2 Arial');
+ $('.mainContent h2').css('font','600 16px/1.2 Arial');
+ $('.mainContent h3').css('font','600 14px/1.2 Arial');
+ $('.mainContent p').css('font','13px/20px Verdana');
+ $('.mainContent li').css('font','400 13px/1 Verdana');
+ $('.mainContent li').css('line-height','14px');
+ $('.mainContent .toc li').css('font', 'normal 10px/1.2 Verdana');
+ $('.mainContent table').css('font','13px/1.2 Verdana');
+ $('.mainContent .heading').css('font','600 16px/1 Arial');
+ $('.mainContent .indexboxcont li').css('font','600 13px/1 Verdana');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
-
+/* Changing font size to bigger */
$('#bigA').click(function() {
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','large');
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('line-height','25px');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('font-size','large');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('line-height','25px');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
+/* Show page content after closing feedback box */
$('.feedclose').click(function() {
$('.bd').show();
$('.hd').show();
@@ -41,6 +60,7 @@ $('.feedclose').click(function() {
$('#blurpage').hide();
});
+/* Hide page content and show feedback box */
$('.feedback').click(function() {
$('.bd').hide();
$('.hd').hide();
@@ -48,75 +68,117 @@ $('.feedback').click(function() {
$('#feedbackBox').show();
$('#blurpage').show();
});
-var lookupCount = 0;
-var articleCount = 0;
-var exampleCount = 0;
-var qturl = ""; // change from "http://doc.qt.nokia.com/4.6/" to 0 so we can have relative links
+/* Default search URL */
+var qturl = "";
+
+/* The next function handles the response data (in xml) returned by the search engine */
+
+// Process data sent back from the server. The data is structured as a XML.
+/*
+XML structure handled by function processNokiaData()
+<page> - container for each page returned
+<pageWords/> - contains keywords
+<pageTitle/> - contains page title/header content
+<pageUrl/> - contains page URL - URL relative to root
+<pageType> - contains page type - APIPage/Article/Example
+</page>
+*/
+
function processNokiaData(response){
+/* fetch the responce from the server using page as the root element */
var propertyTags = response.getElementsByTagName('page');
-
- for (var i=0; i< propertyTags.length; i++) {
- var linkStart = "<li class=\"liveResult\"><a href='"+qturl+"";
- var linkEnd = "</a></li>";
-
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage'){
- lookupCount++;
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element = full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd;
- $('#ul001').append(full_li_element);
- $('#ul001 .defaultLink').css('display','none');
-
- }
- }
-
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article'){
- articleCount++;
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
-
- $('#ul002').append(full_li_element);
- $('#ul002 .defaultLink').css('display','none');
-
- }
+ /* reset counters */
+ var lookupCount = 0;
+ var articleCount = 0;
+ var exampleCount = 0;
+ var full_li_element;
+
+/* remove any old results */
+ $('#resultlist li').remove();
+
+
+ /* running through the elements in the xml structure */
+ for (var i=0; i<propertyTags.length; i++) {
+ /* for every element named pageWords*/
+ for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++) {
+ /* start a new list element */
+ full_li_element = '<li';
+ /* if the pageType element reads APIPage, add class name api */
+ if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage') {
+ full_li_element += ' class="api"';
+ apiCount++;
+ }
+ /* if the pageType element reads Article, add class name article */
+ else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article') {
+ full_li_element += ' class="article"';
+ articleCount++;
+ }
+ /* if the pageType element reads Example, add class name example */
+ else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example') {
+ full_li_element += ' class="example"';
+ exampleCount++;
+ }
+ /* adding the link element*/
+ full_li_element += '><a href="'+qturl;
+ /* adding the URL attribute*/
+ full_li_element += propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
+ /* adding the link title and closing the link and list elements */
+ full_li_element += '">' + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + '</a></li>';
+ /* appending the list element to the #resultlist div*/
+ $('#resultlist').append(full_li_element);
+ }
+ }
+
+ /* if the result is not empty */
+ if (propertyTags.length > 0) {
+ /* add class name active to show the dialog */
+ $('#resultdialog').addClass('active');
+ /* setting number of hits*/
+ $('#resultcount').html(propertyTags.length);
+ $('#apicount').html(apiCount);
+ $('#articlecount').html(articleCount);
+ $('#examplecount').html(exampleCount);
+ }
+
+
+ // Filtering results in display
+ $('p#resultlinks a').click(function(e) {
+ e.preventDefault();
+ // Displays API ref pages
+ if (this.id == "showapiresults") {
+ $("#resultlist").removeClass().addClass('api');
+ $("#resultlinks").removeClass().addClass('api');
+ $("#searchcount").removeClass().addClass('api');
+ }
+ // Displays Articles
+ else if (this.id == "showarticleresults") {
+ $("#resultlist").removeClass().addClass('article');
+ $("#resultlinks").removeClass().addClass('article');
+ $("#searchcount").removeClass().addClass('article');
}
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example'){
- exampleCount++;
-
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
-
- $('#ul003').append(full_li_element);
- $('#ul003 .defaultLink').css('display','none');
-
- }
- }
- if(i==propertyTags.length){$('#pageType').removeClass('loading');}
-
- }
- if(lookupCount > 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult hit\">Found ' + lookupCount + ' hits</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
- if(articleCount > 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul002 li').css('display','block');}
- if(exampleCount > 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul003 li').css('display','block');}
-
- if(lookupCount == 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
- if(articleCount == 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul002 li').css('display','block');}
- if(exampleCount == 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul003 li').css('display','block');}
- // reset count variables;
- lookupCount=0;
- articleCount = 0;
- exampleCount = 0;
-
+ // Displays Examples
+ if (this.id == "showexampleresults") {
+ $("#resultlist").removeClass().addClass('example');
+ $("#resultlinks").removeClass().addClass('example');
+ $("#searchcount").removeClass().addClass('example');
+ }
+ // Displays All
+ if (this.id == "showallresults") {
+ $("#resultlist").removeClass().addClass('all');
+ $("#resultlinks").removeClass().addClass('all');
+ $("#searchcount").removeClass().addClass('all');
+ }
+ });
}
+
//build regular expression object to find empty string or any number of blank
var blankRE=/^\s*$/;
+
+
function CheckEmptyAndLoadList()
{
+ /* Start Extracting information for feedback and adding this to the feedback form */
var pageUrl = window.location.href;
var pageVal = $('title').html();
$('#feedUrl').remove();
@@ -124,55 +186,52 @@ function CheckEmptyAndLoadList()
$('.menuAlert').remove();
$('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">');
$('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">');
- $('.liveResult').remove();
- $('.defaultLink').css('display','block');
+ /* End Extracting information for feedback and adding this to the feedback form */
+
+ /* extracts search query */
var value = document.getElementById('pageType').value;
+ /* if the search is less than three chars long remove class names and remove elements from old search*/
if((blankRE.test(value)) || (value.length < 3))
{
- //empty inputbox
- // load default li elements into the ul if empty
- // loadAllList(); // replaced
- $('.defaultLink').css('display','block');
- // $('.liveResult').css('display','none');
- }else{
- $('.defaultLink').css('display','none');
+ $('#resultdialog').removeClass('active');
+ $('#resultlist li').remove();
}
}
-/*
-$(window).resize(function(){
-if($(window).width()<400)
- $('body').addClass('offline');
-else
- $('body').removeClass('offline');
- });
- */
-// Loads on doc ready
+
+// Loads on doc ready - prepares search
$(document).ready(function () {
- //alert(pageUrl);
- //$('#pageUrl').attr('foo',pageUrl);
+ /* fetch page title*/
var pageTitle = $('title').html();
+ /* getting content from search box */
var currentString = $('#pageType').val() ;
+ /* if the search box is not empty run CheckEmptyAndLoadList*/
if(currentString.length < 1){
- $('.defaultLink').css('display','block');
CheckEmptyAndLoadList();
}
+ /* on key-up in the search box execute the following */
$('#pageType').keyup(function () {
+ /* extract the search box content */
var searchString = $('#pageType').val() ;
+ /* if the string is less than three characters */
if ((searchString == null) || (searchString.length < 3)) {
+ /* remove classes and elements*/
$('#pageType').removeClass('loading');
- $('.liveResult').remove();
$('.searching').remove();
+ /* run CheckEmptyAndLoadList */
CheckEmptyAndLoadList();
+
$('.report').remove();
- // debug$('.content').prepend('<li>too short or blank</li>'); // debug
return;
}
+ /* if timer checks out */
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(function () {
+ /* add loading image by adding loading class */
$('#pageType').addClass('loading');
$('.searching').remove();
- $('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
+
+ /* run the actual search */
$.ajax({
contentType: "application/x-www-form-urlencoded",
url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
@@ -180,15 +239,14 @@ else
dataType:'xml',
type: 'post',
success: function (response, textStatus) {
-
- $('.liveResult').remove();
+ /* on success remove loading img */
$('.searching').remove();
$('#pageType').removeClass('loading');
- $('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
+
processNokiaData(response);
}
});
- }, 500);
+ }, 500); /* timer set to 500 ms */
});
- });
+ }); \ No newline at end of file
diff --git a/doc/src/template/scripts/narrow.js b/doc/src/template/scripts/narrow.js
index 35c81bf..a5e8b97 100644
--- a/doc/src/template/scripts/narrow.js
+++ b/doc/src/template/scripts/narrow.js
@@ -1,17 +1,15 @@
+/* This function generates menus and search box in narrow/slim fit mode */
var narrowInit = function() {
- /* TODO:
- Could probably be more efficient, not hardcoding each element to be created
- */
- // 1: Create search form
+ /* 1: Create search form */
var narrowSearch = $('<div id="narrowsearch"></div>');
var searchform = $("#qtdocsearch");
narrowSearch.append(searchform);
$("#qtdocheader .content .qtref").after(narrowSearch);
- // 2: Create dropdowns
+ /* 2: Create dropdowns */
var narrowmenu = $('<ul id="narrowmenu" class="sf-menu"></ul>');
- // Lookup
+ /* Lookup */
var lookuptext = $("#lookup h2").attr("title");
$("#lookup ul").removeAttr("id");
$("#lookup ul li").removeAttr("class");
@@ -24,7 +22,7 @@ var narrowInit = function() {
lookuplist.append(lookupul);
narrowmenu.append(lookuplist);
- // Topics
+ /* Topics */
var topicstext = $("#topics h2").attr("title");
$("#topics ul").removeAttr("id");
$("#topics ul li").removeAttr("class");
@@ -37,7 +35,7 @@ var narrowInit = function() {
topicslist.append(topicsul);
narrowmenu.append(topicslist);
- // Examples
+ /* Examples */
var examplestext = $("#examples h2").attr("title");
$("#examples ul").removeAttr("id");
$("#examples ul li").removeAttr("class");
@@ -58,32 +56,78 @@ var narrowInit = function() {
});
}
+/* Executes on doc ready */
$(document).ready(function(){
-/* if ($('body').hasClass('narrow')) {
- narrowInit();
- }
- */
- if($(window).width()<600) {
- $('body').addClass('narrow');
-
- if ($("#narrowsearch").length == 0) {
- narrowInit();
- }
- }
- else {
- $('body').removeClass('narrow');
+ /* check if body has the narrow class */
+ if ($('body').hasClass('narrow')) {
+ /* run narrowInit */
+ narrowInit();
+ }
+
+ /* messure window width and add class if it is smaller than 600 px */
+ if($(window).width()<600) {
+ $('body').addClass('narrow');
+ /* if the search box contains */
+ if ($("#narrowsearch").length == 0) {
+ /* run narrowInit */
+ narrowInit();
+ }
+ }
+ else { /* if the window is wider than 600 px, narrow is removed */
+ $('body').removeClass('narrow');
+ if ($("#narrowsearch").length == 0) {
+ }
+ }
+});
+/* binding resize event to this funciton */
+$(window).bind('resize', function () {
+ /* if the window is wider than 600 px, narrow class is added */
+ if($(window).width()<600) {
+ $('body').addClass('narrow');
+ if ($("#narrowsearch").length == 0) {
+ narrowInit();
+ }
+ }
+ else {
+ /* else we remove the narrow class */
+ $('body').removeClass('narrow');
}
});
-$(window).bind('resize', function () {
- if($(window).width()<600) {
- $('body').addClass('narrow');
+ $('#narrowsearch').keyup(function () {
+ /* extract the search box content */
+ var searchString = $('#narrowsearch').val();
+ /* if the string is less than three characters */
+ if ((searchString == null) || (searchString.length < 3)) {
+ /* remove classes and elements*/
+ $('#narrowsearch').removeClass('loading');
+ $('.searching').remove();
+ /* run CheckEmptyAndLoadList */
+ CheckEmptyAndLoadList();
+
+ $('.report').remove();
+ return;
+ }
+ /* if timer checks out */
+ if (this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(function () {
+ /* add loading image by adding loading class */
+ $('#narrowsearch').addClass('loading');
+ $('.searching').remove();
- if ($("#narrowsearch").length == 0) {
- narrowInit();
- }
- }
- else {
- $('body').removeClass('narrow');
- }
-}); \ No newline at end of file
+ /* run the actual search */
+ $.ajax({
+ contentType: "application/x-www-form-urlencoded",
+ url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
+ data: 'searchString='+searchString,
+ dataType:'xml',
+ type: 'post',
+ success: function (response, textStatus) {
+ /* on success remove loading img */
+ $('.searching').remove();
+ $('#narrowsearch').removeClass('loading');
+ processNokiaData(response);
+ }
+ });
+ }, 500); /* timer set to 500 ms */
+ }); \ No newline at end of file
diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css
index de5b0a0..8e42a0d 100644
--- a/doc/src/template/style/narrow.css
+++ b/doc/src/template/style/narrow.css
@@ -6,7 +6,7 @@
}
.narrow a {
- color: #44a51c;
+ color: #00732f;
}
.narrow .header, .narrow .header .content, .narrow .footer, .narrow .wrapper {
@@ -45,7 +45,7 @@
{
width: auto;
height: auto;
- color: #363534;
+ color: #00732f;
position: static;
float: left;
margin-left: 25px;
@@ -163,7 +163,7 @@
}
.narrow .wrap .breadcrumb ul li a {
- color: #44a51c;
+ color: #00732f;
}
.narrow .wrap .breadcrumb ul li.last a {
@@ -203,11 +203,7 @@
*border: 1px solid #fff;
*height: 17px;
_height: 18px;
- /* to be fixed */
- display: none;
- /* to be fixed */
}
-
.narrow .indexbox .indexIcon {
display: none;
}
@@ -268,3 +264,6 @@
}
/* end narrow mode */
+ .creator #narrowsearch, .creator #narrowmenu{
+ display:none;
+ }
diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css
index 51c4f7e..5833266 100755
--- a/doc/src/template/style/style.css
+++ b/doc/src/template/style/style.css
@@ -627,17 +627,94 @@
background:url("../images/spinner.gif") no-repeat scroll right center transparent;
}
-.floatingResult{
- z-index:1;
- position:relative;
- padding-top:0px;
- background-color:white;
- border:solid 1px black;
- height:250px;
- width:600px;
- overflow-x:hidden;
- overflow-y:auto;
-}
+ .sidebar .search form {
+ _height: 23px;
+ _width: 169px;
+ }
+
+ #resultdialog {
+ display: none;
+ position: absolute;
+ *left: 30px;
+ _left: 0;
+ *top: 35px;
+ _top: 30px;
+ _zoom: 1;
+ background-color: #fff;
+ border: 1px solid #666;
+ z-index: 4;
+ margin-top: 5px;
+ _margin: 0 0 0 -20px;
+ padding: 10px;
+ width: 220px;
+ _width: 196px;
+ height: 250px;
+ overflow: auto;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ border-radius: .5em;
+ -webkit-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ -moz-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ }
+
+ #resultdialog.active {
+ display: block;
+ }
+
+ #resultdialog #resultclose {
+ float: right;
+ }
+
+ #resultdialog p,
+ #resultdialog ul {
+ clear: both;
+ margin: 3px 0;
+ }
+
+ p#searchcount span {
+ display: none;
+ }
+
+ p#searchcount.all span#resultcount,
+ p#searchcount.api span#apicount,
+ p#searchcount.article span#articlecount,
+ p#searchcount.example span#examplecount {
+ display: inline;
+ }
+
+ #resultlist li {
+ display: none;
+ }
+
+ #resultlist.api li.api,
+ #resultlist.article li.article,
+ #resultlist.example li.example,
+ #resultlist.all li {
+ display: block;
+ }
+
+ #resultlinks.api a#showapiresults,
+ #resultlinks.api a#showapiresults:hover,
+ #resultlinks.article a#showarticleresults,
+ #resultlinks.article a#showarticleresults:hover,
+ #resultlinks.example a#showexampleresults,
+ #resultlinks.example a#showexampleresults:hover,
+ #resultlinks.all a#showallresults,
+ #resultlinks.all a#showallresults:hover {
+ color: #B0ADAB;
+ }
+ .floatingResult{
+ z-index:1;
+ position:relative;
+ padding-top:0px;
+ background-color:white;
+ border:solid 1px black;
+ height:250px;
+ width:600px;
+ overflow-x:hidden;
+ overflow-y:auto;
+ }
.floatingResult:hover{
display:block;
@@ -837,6 +914,9 @@
padding-left: 25px;
padding-top: 10px;
}
+ .wrap .content ul img {
+ vertical-align:middle;
+ }
a:hover
{
color: #4c0033;
diff --git a/examples/declarative/animation/easing/easing.qml b/examples/declarative/animation/easing/easing.qml
index ffb129d..9349a25 100644
--- a/examples/declarative/animation/easing/easing.qml
+++ b/examples/declarative/animation/easing/easing.qml
@@ -137,7 +137,7 @@ Rectangle {
Flickable {
anchors.fill: parent
- contentHeight: layout.height
+ contentHeight: layout.height+50
Rectangle {
id: titlePane
color: "#444444"
diff --git a/examples/declarative/text/fonts/hello.qml b/examples/declarative/text/fonts/hello.qml
index a396ff3..60bd919 100644
--- a/examples/declarative/text/fonts/hello.qml
+++ b/examples/declarative/text/fonts/hello.qml
@@ -56,10 +56,11 @@ Rectangle {
color: "white"
text: "Hello world!"
font.pixelSize: 60
+ smooth: true
SequentialAnimation on font.letterSpacing {
loops: Animation.Infinite;
- NumberAnimation { from: 100; to: 300; easing.type: Easing.InQuad; duration: 3000 }
+ NumberAnimation { from: 0; to: 150; easing.type: Easing.InQuad; duration: 3000 }
ScriptAction {
script: {
container.y = (screen.height / 4) + (Math.random() * screen.height / 2)
diff --git a/examples/declarative/toys/corkboards/Day.qml b/examples/declarative/toys/corkboards/Day.qml
index f406f7b..3525a5b 100644
--- a/examples/declarative/toys/corkboards/Day.qml
+++ b/examples/declarative/toys/corkboards/Day.qml
@@ -45,9 +45,16 @@ Component {
property variant stickies
id: page
- width: 840; height: 480
+ width: ListView.view.width+40; height: ListView.view.height
- Image { source: "cork.jpg" }
+
+ Image {
+ source: "cork.jpg"
+ width: page.ListView.view.width
+ height: page.ListView.view.height
+ fillMode: Image.PreserveAspectCrop
+ clip: true
+ }
MouseArea {
anchors.fill: parent
@@ -65,8 +72,8 @@ Component {
Item {
id: stickyPage
- property int randomX: Math.random() * 500 + 100
- property int randomY: Math.random() * 200 + 50
+ property int randomX: Math.random() * (page.ListView.view.width-0.5*stickyImage.width) +100
+ property int randomY: Math.random() * (page.ListView.view.height-0.5*stickyImage.height) +50
x: randomX; y: randomY
diff --git a/examples/declarative/ui-components/searchbox/SearchBox.qml b/examples/declarative/ui-components/searchbox/SearchBox.qml
index 60fa799..d000750 100644
--- a/examples/declarative/ui-components/searchbox/SearchBox.qml
+++ b/examples/declarative/ui-components/searchbox/SearchBox.qml
@@ -54,7 +54,7 @@ FocusScope {
source: "images/lineedit-bg-focus.png"
width: parent.width; height: parent.height
border { left: 4; top: 4; right: 4; bottom: 4 }
- visible: parent.wantsFocus ? true : false
+ visible: parent.activeFocus ? true : false
}
Text {
diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp
index bc2324e..451cc67 100644
--- a/examples/multimedia/audiooutput/audiooutput.cpp
+++ b/examples/multimedia/audiooutput/audiooutput.cpp
@@ -132,9 +132,9 @@ void Generator::generateData(const QAudioFormat &format, qint64 durationUs, int
qint64 Generator::readData(char *data, qint64 len)
{
qint64 total = 0;
- while (len - total) {
+ while (len - total > 0) {
const qint64 chunk = qMin((m_buffer.size() - m_pos), len - total);
- memcpy(data, m_buffer.constData() + m_pos, chunk);
+ memcpy(data + total, m_buffer.constData() + m_pos, chunk);
m_pos = (m_pos + chunk) % m_buffer.size();
total += chunk;
}
diff --git a/examples/opengl/pbuffers/glwidget.cpp b/examples/opengl/pbuffers/glwidget.cpp
index 6f4f060..c57a510 100644
--- a/examples/opengl/pbuffers/glwidget.cpp
+++ b/examples/opengl/pbuffers/glwidget.cpp
@@ -62,7 +62,9 @@ GLWidget::GLWidget(QWidget *parent)
, cube(0)
{
// create the pbuffer
- pbuffer = new QGLPixelBuffer(QSize(512, 512), format(), this);
+ QGLFormat pbufferFormat = format();
+ pbufferFormat.setSampleBuffers(false);
+ pbuffer = new QGLPixelBuffer(QSize(512, 512), pbufferFormat, this);
setWindowTitle(tr("OpenGL pbuffers"));
initializeGeometry();
}
diff --git a/examples/xml/rsslisting/main.cpp b/examples/xml/rsslisting/main.cpp
index 95c8a89..71ae0eb 100644
--- a/examples/xml/rsslisting/main.cpp
+++ b/examples/xml/rsslisting/main.cpp
@@ -57,7 +57,6 @@ Provides the main function for the RSS news reader example.
int main(int argc, char **argv)
{
QApplication app(argc, argv);
- qWarning("The usage of QHttp is not recommended anymore, please use QNetworkAccessManager.");
RSSListing *rsslisting = new RSSListing;
rsslisting->show();
return app.exec();
diff --git a/examples/xml/rsslisting/rsslisting.cpp b/examples/xml/rsslisting/rsslisting.cpp
index b7c9eb0..48c3062 100644
--- a/examples/xml/rsslisting/rsslisting.cpp
+++ b/examples/xml/rsslisting/rsslisting.cpp
@@ -65,21 +65,19 @@ its operation, and also allows very large data sources to be read.
Constructs an RSSListing widget with a simple user interface, and sets
up the XML reader to use a custom handler class.
- The user interface consists of a line edit, two push buttons, and a
+ The user interface consists of a line edit, a push button, and a
list view widget. The line edit is used for entering the URLs of news
- sources; the push buttons start and abort the process of reading the
+ sources; the push button starts the process of reading the
news.
*/
RSSListing::RSSListing(QWidget *parent)
- : QWidget(parent)
+ : QWidget(parent), currentReply(0)
{
lineEdit = new QLineEdit(this);
lineEdit->setText("http://labs.qt.nokia.com/blogs/feed");
fetchButton = new QPushButton(tr("Fetch"), this);
- abortButton = new QPushButton(tr("Abort"), this);
- abortButton->setEnabled(false);
treeWidget = new QTreeWidget(this);
connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
@@ -89,15 +87,11 @@ RSSListing::RSSListing(QWidget *parent)
treeWidget->setHeaderLabels(headerLabels);
treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents);
- connect(&http, SIGNAL(readyRead(QHttpResponseHeader)),
- this, SLOT(readData(QHttpResponseHeader)));
-
- connect(&http, SIGNAL(requestFinished(int,bool)),
- this, SLOT(finished(int,bool)));
+ connect(&manager, SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(finished(QNetworkReply*)));
connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(fetch()));
connect(fetchButton, SIGNAL(clicked()), this, SLOT(fetch()));
- connect(abortButton, SIGNAL(clicked()), &http, SLOT(abort()));
QVBoxLayout *layout = new QVBoxLayout(this);
@@ -105,7 +99,6 @@ RSSListing::RSSListing(QWidget *parent)
hboxLayout->addWidget(lineEdit);
hboxLayout->addWidget(fetchButton);
- hboxLayout->addWidget(abortButton);
layout->addLayout(hboxLayout);
layout->addWidget(treeWidget);
@@ -115,34 +108,53 @@ RSSListing::RSSListing(QWidget *parent)
}
/*
+ Starts the network request and connects the needed signals
+*/
+void RSSListing::get(const QUrl &url)
+{
+ QNetworkRequest request(url);
+ if (currentReply) {
+ currentReply->disconnect(this);
+ currentReply->deleteLater();
+ }
+ currentReply = manager.get(request);
+ connect(currentReply, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ connect(currentReply, SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged()));
+ connect(currentReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error(QNetworkReply::NetworkError)));
+}
+
+/*
Starts fetching data from a news source specified in the line
edit widget.
The line edit is made read only to prevent the user from modifying its
contents during the fetch; this is only for cosmetic purposes.
- The fetch button is disabled, and the abort button is enabled to allow
- the user to interrupt processing. The list view is cleared, and we
+ The fetch button is disabled, the list view is cleared, and we
define the last list view item to be 0, meaning that there are no
existing items in the list.
- The HTTP handler is supplied with the raw contents of the line edit and
- a fetch is initiated. We keep the ID value returned by the HTTP handler
- for future reference.
+ A URL is created with the raw contents of the line edit and
+ a get is initiated.
*/
void RSSListing::fetch()
{
lineEdit->setReadOnly(true);
fetchButton->setEnabled(false);
- abortButton->setEnabled(true);
treeWidget->clear();
xml.clear();
QUrl url(lineEdit->text());
+ get(url);
+}
- http.setHost(url.host());
- connectionId = http.get(url.path());
+void RSSListing::metaDataChanged()
+{
+ QUrl redirectionTarget = currentReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
+ if (redirectionTarget.isValid()) {
+ get(redirectionTarget);
+ }
}
/*
@@ -150,16 +162,14 @@ void RSSListing::fetch()
We read all the available data, and pass it to the XML
stream reader. Then we call the XML parsing function.
-
- If parsing fails for any reason, we abort the fetch.
*/
-void RSSListing::readData(const QHttpResponseHeader &resp)
+void RSSListing::readyRead()
{
- if (resp.statusCode() != 200)
- http.abort();
- else {
- xml.addData(http.readAll());
+ int statusCode = currentReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ if (statusCode >= 200 && statusCode < 300) {
+ QByteArray data = currentReply->readAll();
+ xml.addData(data);
parseXml();
}
}
@@ -177,19 +187,11 @@ void RSSListing::readData(const QHttpResponseHeader &resp)
user interface available to the user for further input.
*/
-void RSSListing::finished(int id, bool error)
+void RSSListing::finished(QNetworkReply *reply)
{
- if (error) {
- qWarning("Received error during HTTP fetch.");
- lineEdit->setReadOnly(false);
- abortButton->setEnabled(false);
- fetchButton->setEnabled(true);
- }
- else if (id == connectionId) {
- lineEdit->setReadOnly(false);
- abortButton->setEnabled(false);
- fetchButton->setEnabled(true);
- }
+ Q_UNUSED(reply);
+ lineEdit->setReadOnly(false);
+ fetchButton->setEnabled(true);
}
@@ -225,7 +227,6 @@ void RSSListing::parseXml()
}
if (xml.error() && xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString();
- http.abort();
}
}
@@ -236,3 +237,11 @@ void RSSListing::itemActivated(QTreeWidgetItem * item)
{
QDesktopServices::openUrl(QUrl(item->text(1)));
}
+
+void RSSListing::error(QNetworkReply::NetworkError)
+{
+ qWarning("error retrieving RSS feed");
+ currentReply->disconnect(this);
+ currentReply->deleteLater();
+ currentReply = 0;
+}
diff --git a/examples/xml/rsslisting/rsslisting.h b/examples/xml/rsslisting/rsslisting.h
index 8939dfd..9387222 100644
--- a/examples/xml/rsslisting/rsslisting.h
+++ b/examples/xml/rsslisting/rsslisting.h
@@ -41,10 +41,12 @@
#ifndef RSSLISTING_H
#define RSSLISTING_H
-#include <QHttp>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
#include <QWidget>
#include <QBuffer>
#include <QXmlStreamReader>
+#include <QUrl>
QT_BEGIN_NAMESPACE
class QLineEdit;
@@ -61,24 +63,26 @@ public:
public slots:
void fetch();
- void finished(int id, bool error);
- void readData(const QHttpResponseHeader &);
+ void finished(QNetworkReply *reply);
+ void readyRead();
+ void metaDataChanged();
void itemActivated(QTreeWidgetItem * item);
+ void error(QNetworkReply::NetworkError);
private:
void parseXml();
+ void get(const QUrl &url);
QXmlStreamReader xml;
QString currentTag;
QString linkString;
QString titleString;
- QHttp http;
- int connectionId;
+ QNetworkAccessManager manager;
+ QNetworkReply *currentReply;
QLineEdit *lineEdit;
QTreeWidget *treeWidget;
- QPushButton *abortButton;
QPushButton *fetchButton;
};
diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
index d3db24a..0d511fc 100644
--- a/mkspecs/common/g++.conf
+++ b/mkspecs/common/g++.conf
@@ -8,6 +8,7 @@ QMAKE_CFLAGS_DEPS += -M
QMAKE_CFLAGS_WARN_ON += -Wall -W
QMAKE_CFLAGS_WARN_OFF += -w
QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g
QMAKE_CFLAGS_DEBUG += -g
QMAKE_CFLAGS_SHLIB += -fPIC
QMAKE_CFLAGS_STATIC_LIB += -fPIC
@@ -22,6 +23,7 @@ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
diff --git a/mkspecs/common/mac-g++.conf b/mkspecs/common/mac-g++.conf
index 446547d..29b7408 100644
--- a/mkspecs/common/mac-g++.conf
+++ b/mkspecs/common/mac-g++.conf
@@ -10,6 +10,7 @@ QMAKE_CFLAGS_DEPS += -M
QMAKE_CFLAGS_WARN_ON += -Wall -W
QMAKE_CFLAGS_WARN_OFF += -w
QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g -gdwarf-2
QMAKE_CFLAGS_DEBUG += -g
QMAKE_CFLAGS_SHLIB += -fPIC
QMAKE_CFLAGS_STATIC_LIB += -fPIC
@@ -33,6 +34,7 @@ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
@@ -52,6 +54,7 @@ QMAKE_LINK_C = $$QMAKE_CC
QMAKE_LINK_C_SHLIB = $$QMAKE_CC
QMAKE_LFLAGS += -headerpad_max_install_names
QMAKE_LFLAGS_RELEASE +=
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g -gdwarf-2
QMAKE_LFLAGS_DEBUG +=
QMAKE_LFLAGS_APP +=
QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 679731f..cc5b788 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -132,39 +132,49 @@ exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
}
# Try to detect SDK version if it wasn't set by environment.prf
-isEmpty(S60_VERSION) {
- # The Symbian^3 PDK does not necessarily contain the required sis files.
- # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
- S60_VERSION = 5.2
+isEmpty(SYMBIAN_VERSION) {
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/Symbianv4.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/Symbianv4.sis) {
+ SYMBIAN_VERSION = Symbian4
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
- S60_VERSION = 5.1
+ # The Symbian^3 PDK does not necessarily contain the required sis files.
+ # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
+ SYMBIAN_VERSION = Symbian3
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
- S60_VERSION = 5.0
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
+ SYMBIAN_VERSION = Symbian2
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
- S60_VERSION = 3.2
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
+ SYMBIAN_VERSION = 9.4
} else {
- S60_VERSION = 3.1
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
+ SYMBIAN_VERSION = 9.3
+ } else {
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.1.sis) {
+ SYMBIAN_VERSION = 9.2
+ } else {
+ SYMBIAN_VERSION = Unknown
+ }
+ }
}
}
}
}
}
-isEmpty(SYMBIAN_VERSION) {
- contains(S60_VERSION, "3\\.1") {
- SYMBIAN_VERSION = 9.2
- } else:contains(S60_VERSION, "3\\.2") {
- SYMBIAN_VERSION = 9.3
- } else:contains(S60_VERSION, "5\\.0") {
- SYMBIAN_VERSION = 9.4
- } else:contains(S60_VERSION, "5\\.1") {
- SYMBIAN_VERSION = Symbian2
- } else:contains(S60_VERSION, "5\\.2") {
- SYMBIAN_VERSION = Symbian3
+isEmpty(S60_VERSION) {
+ contains(SYMBIAN_VERSION, "9\\.2") {
+ S60_VERSION = 3.1
+ } else:contains(SYMBIAN_VERSION, "9\\.3") {
+ S60_VERSION = 3.2
+ } else:contains(SYMBIAN_VERSION, "9\\.4") {
+ S60_VERSION = 5.0
+ } else:contains(SYMBIAN_VERSION, "Symbian2") {
+ S60_VERSION = 5.1
+ } else:contains(SYMBIAN_VERSION, "Symbian3") {
+ S60_VERSION = 5.2
+ } else {
+ S60_VERSION = Unknown
}
}
@@ -174,14 +184,14 @@ isEmpty(SYMBIAN_VERSION) {
default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
-# Supports S60 3.0, 3.1, 3.2, 5.0 and Symbian^3 by default
+# Supports S60 3.1, 3.2, 5.0, Symbian^3, and Symbian^4 by default
pkg_platform_dependencies = \
"; Default HW/platform dependencies" \
- "[0x101F7961],0,0,0,{\"S60ProductID\"}" \
"[0x102032BE],0,0,0,{\"S60ProductID\"}" \
"[0x102752AE],0,0,0,{\"S60ProductID\"}" \
"[0x1028315F],0,0,0,{\"S60ProductID\"}" \
- "[0x20022e6d],0,0,0,{\"S60ProductID\"}" \
+ "[0x20022E6D],0,0,0,{\"S60ProductID\"}" \
+ "[0x20032DE7],0,0,0,{\"S60ProductID\"}" \
" "
DEPLOYMENT += default_deployment
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index d844385..09c6587 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -1,3 +1,15 @@
+QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH)
+!isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ...
+ !staticlib:!static:CONFIG(release, debug|release):contains(TEMPLATE, .*(app|lib)): \ # is it applicable?
+ !contains(TARGET, .*phony_target.*): \ # monster hack, you don't really see this here, right? ;)
+ system($$QT_BREAKPAD_ROOT_PATH/qtbreakpadsymbols --breakpad-exists) { # do we really have it?
+ CONFIG += breakpad
+ CONFIG -= no_debug_info separate_debug_info
+ QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
+ QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
+ QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
+}
+
CONFIG(debug, debug|release):load(debug)
else:load(release)
debug_and_release:load(debug_and_release)
@@ -6,6 +18,81 @@ incredibuild_xge {
CONFIG = incredibuild_xge $$CONFIG
}
+breakpad {
+ !contains(DESTDIR, (/|.:[/\\\\]).*):TARGET_BASEPATH = $${OUT_PWD}/
+ !isEmpty(DESTDIR):TARGET_BASEPATH = $${TARGET_BASEPATH}$${DESTDIR}/
+
+ win32 {
+ TARGET_BASEPATH ~= s,/,\\,
+ contains(TEMPLATE, .*lib) {
+ isEmpty(TARGET_VERSION_EXT):!isEmpty(VERSION) {
+ TARGET_VERSION_EXT = $$section(VERSION, ., 0, 0)
+ isEqual(TARGET_VERSION_EXT, 0):unset(TARGET_VERSION_EXT)
+ }
+ TARGET_EXT = .dll
+ } else {
+ TARGET_EXT = .exe
+ }
+
+ DEBUGFILENAME = $${TARGET_BASEPATH}$${TARGET}$${TARGET_VERSION_EXT}$${TARGET_EXT}
+ PDBFILENAME = $${TARGET_BASEPATH}$${TARGET}$${TARGET_VERSION_EXT}.pdb
+ DEBUGFILENAME ~= s,/,\\,
+ PDBFILENAME ~= s,/,\\,
+ QMAKE_CLEAN += $$PDBFILENAME # for the debug case it is hardcoded in qmake
+ } else {
+ contains(TEMPLATE, .*lib):LIBPREFIX = lib
+
+ macx {
+ equals(TEMPLATE, lib) {
+ lib_bundle {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${TARGET}.framework/$${TARGET}
+ } else {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}
+ !plugin {
+ TEMP_VERSION = $$section(VERSION, ., 0, 0)
+ isEmpty(TEMP_VERSION):TEMP_VERSION = 1
+ TARGET_BASEPATH = $${TARGET_BASEPATH}.$${TEMP_VERSION}
+ }
+ TARGET_BASEPATH = $${TARGET_BASEPATH}.$${QMAKE_EXTENSION_SHLIB}
+ }
+ } else {
+ app_bundle {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${TARGET}.app/Contents/MacOS/$${TARGET}
+ } else {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${TARGET}
+ }
+ }
+ DEBUGFILENAME = $$TARGET_BASEPATH
+ } else {
+ equals(TEMPLATE, lib) {
+ plugin {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}.so
+ } else {
+ TEMP_VERSION = $$VERSION
+ isEmpty(TEMP_VERSION):TEMP_VERSION = 1.0.0
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${LIBPREFIX}$${TARGET}.so.$${TEMP_VERSION}
+ }
+ } else {
+ TARGET_BASEPATH = $${TARGET_BASEPATH}$${TARGET}
+ }
+ DEBUGFILENAME = $$TARGET_BASEPATH
+ }
+ }
+
+ PROJECTPATH = $$OUT_PWD
+ win32:PROJECTPATH ~= s,/,\\,
+
+ !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t)
+ QMAKE_POST_LINK += $$quote($${QT_BREAKPAD_ROOT_PATH}$${DIR_SEPARATOR}qtbreakpadsymbols \"$$DEBUGFILENAME\" \"$$PROJECTPATH\")
+ !isEmpty(QMAKE_STRIP):QMAKE_POST_LINK = $$quote($$QMAKE_POST_LINK$$escape_expand(\\n\\t)$$QMAKE_STRIP \"$$DEBUGFILENAME\")
+
+ unset(TARGET_BASEPATH)
+ unset(SYMBOLFILENAME)
+ unset(TARGET_EXT)
+ unset(TARGET_VERSION_EXT)
+ unset(TEMP_VERSION)
+}
+
QMAKE_INCDIR += $$QMAKE_INCDIR_POST
QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index abda78f..15e7fd9 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -45,10 +45,10 @@ defineReplace(mocCmd) {
if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
RET += $$mocinclude.commands
}
- RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2
+ RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) \"$$1\" -o $$2
return($$RET)
}
- return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2)
+ return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) \"$$1\" -o $$2)
}
#moc headers
diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf
index 3b26f7d..af56a9a 100644
--- a/mkspecs/linux-icc/qmake.conf
+++ b/mkspecs/linux-icc/qmake.conf
@@ -21,7 +21,7 @@ QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = yacc
QMAKE_YACCFLAGS = -d
-QMAKE_CFLAGS =
+QMAKE_CFLAGS = -falign-stack=maintain-16-byte
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125
QMAKE_CFLAGS_WARN_OFF = -w
diff --git a/mkspecs/win32-msvc2003/qmake.conf b/mkspecs/win32-msvc2003/qmake.conf
index 0230b30..63d1ffd 100644
--- a/mkspecs/win32-msvc2003/qmake.conf
+++ b/mkspecs/win32-msvc2003/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm300
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
@@ -28,6 +29,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_STL_ON = -EHsc
@@ -51,6 +53,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS
diff --git a/mkspecs/win32-msvc2005/qmake.conf b/mkspecs/win32-msvc2005/qmake.conf
index 0406fd0..265d028 100644
--- a/mkspecs/win32-msvc2005/qmake.conf
+++ b/mkspecs/win32-msvc2005/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -29,6 +30,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -53,6 +55,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2008/qmake.conf b/mkspecs/win32-msvc2008/qmake.conf
index 9a69aaa..1432645 100644
--- a/mkspecs/win32-msvc2008/qmake.conf
+++ b/mkspecs/win32-msvc2008/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -55,6 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/mkspecs/win32-msvc2010/qmake.conf b/mkspecs/win32-msvc2010/qmake.conf
index 8331c14..84086e2 100644
--- a/mkspecs/win32-msvc2010/qmake.conf
+++ b/mkspecs/win32-msvc2010/qmake.conf
@@ -20,6 +20,7 @@ QMAKE_CFLAGS = -nologo -Zm200 -Zc:wchar_t-
QMAKE_CFLAGS_WARN_ON = -W3
QMAKE_CFLAGS_WARN_OFF = -W0
QMAKE_CFLAGS_RELEASE = -O2 -MD
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
QMAKE_CFLAGS_YACC =
QMAKE_CFLAGS_LTCG = -GL
@@ -30,6 +31,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG
@@ -55,6 +57,7 @@ QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_LINK = link
QMAKE_LFLAGS = /NOLOGO
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG
QMAKE_LFLAGS_DEBUG = /DEBUG
QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index db5b957..da4bbb7 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -622,31 +622,42 @@ UnixMakefileGenerator::processPrlFiles()
//merge them into a logical order
if(!project->isActiveConfig("no_smart_library_merge") && !project->isActiveConfig("no_lflags_merge")) {
- QStringList lflags;
+ QHash<QString, QStringList> lflags;
for(int lit = 0; lit < l.size(); ++lit) {
+ QString arch("default");
QString opt = l.at(lit).trimmed();
if(opt.startsWith("-")) {
+ if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch")) {
+ if (opt.length() > 7) {
+ arch = opt.mid(7);
+ opt = l.at(++lit);
+ }
+ }
+
if(opt.startsWith("-L") ||
(Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-F"))) {
- if(lit == 0 || l.lastIndexOf(opt, lit-1) == -1)
- lflags.append(opt);
+ if(lit == 0 || !lflags[arch].contains(opt))
+ lflags[arch].append(opt);
} else if(opt.startsWith("-l")) {
- if(lit == l.size()-1 || l.indexOf(opt, lit+1) == -1)
- lflags.append(opt);
+ if(lit == l.size()-1 || !lflags[arch].contains(opt))
+ lflags[arch].append(opt);
} else if(Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-framework")) {
if(opt.length() > 11)
opt = opt.mid(11);
- else
+ else {
opt = l.at(++lit);
+ if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch"))
+ opt = l.at(++lit); // The user has done the right thing and prefixed each part
+ }
bool found = false;
- for(int x = lit+1; x < l.size(); ++x) {
- QString xf = l.at(x);
+ for(int x = 0; x < lflags[arch].size(); ++x) {
+ QString xf = lflags[arch].at(x);
if(xf.startsWith("-framework")) {
QString framework;
if(xf.length() > 11)
framework = xf.mid(11);
else
- framework = l.at(++x);
+ framework = lflags[arch].at(++x);
if(framework == opt) {
found = true;
break;
@@ -654,18 +665,30 @@ UnixMakefileGenerator::processPrlFiles()
}
}
if(!found) {
- lflags.append("-framework");
- lflags.append(opt);
+ lflags[arch].append("-framework");
+ lflags[arch].append(opt);
}
} else {
- lflags.append(opt);
+ lflags[arch].append(opt);
}
} else if(!opt.isNull()) {
if(lit == 0 || l.lastIndexOf(opt, lit-1) == -1)
- lflags.append(opt);
+ lflags[arch].append(opt);
+ }
+ }
+
+ l = lflags.take("default");
+
+ // Process architecture specific options (Xarch)
+ QHash<QString, QStringList>::const_iterator archIterator = lflags.constBegin();
+ while (archIterator != lflags.constEnd()) {
+ const QStringList archOptions = archIterator.value();
+ for (int i = 0; i < archOptions.size(); ++i) {
+ l.append(QLatin1String("-Xarch_") + archIterator.key());
+ l.append(archOptions.at(i));
}
+ ++archIterator;
}
- l = lflags;
}
}
}
diff --git a/src/3rdparty/libconninet.pri b/src/3rdparty/libconninet.pri
deleted file mode 100644
index e041e2b..0000000
--- a/src/3rdparty/libconninet.pri
+++ /dev/null
@@ -1,18 +0,0 @@
-INCLUDEPATH += $$PWD/libconninet/src
-
-QMAKE_CXXFLAGS += $$QT_CFLAGS_GLIB
-
-HEADERS += \
- $$PWD/libconninet/src/dbusdispatcher.h \
- $$PWD/libconninet/src/iapconf.h \
- $$PWD/libconninet/src/iapmonitor.h \
- $$PWD/libconninet/src/maemo_icd.h \
- $$PWD/libconninet/src/proxyconf.h
-
-SOURCES += \
- $$PWD/libconninet/src/dbusdispatcher.cpp \
- $$PWD/libconninet/src/iapconf.cpp \
- $$PWD/libconninet/src/iapmonitor.cpp \
- $$PWD/libconninet/src/maemo_icd.cpp \
- $$PWD/libconninet/src/proxyconf.cpp
-
diff --git a/src/3rdparty/libconninet/AUTHORS b/src/3rdparty/libconninet/AUTHORS
deleted file mode 100644
index e69de29..0000000
--- a/src/3rdparty/libconninet/AUTHORS
+++ /dev/null
diff --git a/src/3rdparty/libconninet/COPYING b/src/3rdparty/libconninet/COPYING
deleted file mode 100644
index b124cf5..0000000
--- a/src/3rdparty/libconninet/COPYING
+++ /dev/null
@@ -1,510 +0,0 @@
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard. To achieve this, non-free programs must
-be allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at least
- three years, to give the same user the materials specified in
- Subsection 6a, above, for a charge no more than the cost of
- performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
- To apply these terms, attach the following notices to the library.
-It is safest to attach them to the start of each source file to most
-effectively convey the exclusion of warranty; and each file should
-have at least the "copyright" line and a pointer to where the full
-notice is found.
-
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the library,
-if necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James
- Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/src/3rdparty/libconninet/ChangeLog b/src/3rdparty/libconninet/ChangeLog
deleted file mode 100644
index e69de29..0000000
--- a/src/3rdparty/libconninet/ChangeLog
+++ /dev/null
diff --git a/src/3rdparty/libconninet/INSTALL b/src/3rdparty/libconninet/INSTALL
deleted file mode 100644
index 54caf7c..0000000
--- a/src/3rdparty/libconninet/INSTALL
+++ /dev/null
@@ -1,229 +0,0 @@
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
-Foundation, Inc.
-
- This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
- It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring. (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'. You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. Run `./configure --help'
-for details on some of the pertinent environment variables.
-
- You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here
-is an example:
-
- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not support the `VPATH'
-variable, you have to compile the package for one architecture at a
-time in the source code directory. After you have installed the
-package for one architecture, use `make distclean' before reconfiguring
-for another architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on. Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS KERNEL-OS
-
- See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
- Variables not defined in a site shell script can be set in the
-environment passed to `configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
- Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally `config.cache'. FILE defaults to `/dev/null' to
- disable caching.
-
-`--config-cache'
-`-C'
- Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to `/dev/null' (any error
- messages will still be shown).
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options. Run
-`configure --help' for more details.
-
diff --git a/src/3rdparty/libconninet/NEWS b/src/3rdparty/libconninet/NEWS
deleted file mode 100644
index e69de29..0000000
--- a/src/3rdparty/libconninet/NEWS
+++ /dev/null
diff --git a/src/3rdparty/libconninet/README b/src/3rdparty/libconninet/README
deleted file mode 100644
index e69de29..0000000
--- a/src/3rdparty/libconninet/README
+++ /dev/null
diff --git a/src/3rdparty/libconninet/autogen.sh b/src/3rdparty/libconninet/autogen.sh
deleted file mode 100755
index a8fd885..0000000
--- a/src/3rdparty/libconninet/autogen.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-autoreconf --verbose --install --force
diff --git a/src/3rdparty/libconninet/configure.ac b/src/3rdparty/libconninet/configure.ac
deleted file mode 100644
index 72fa98b..0000000
--- a/src/3rdparty/libconninet/configure.ac
+++ /dev/null
@@ -1,86 +0,0 @@
-AC_INIT([libconninet], patsubst(esyscmd([dpkg-parsechangelog | sed -n '/^Version: \(.*\)$/ {s//\1/;p}']), [
-]), [jukka.rissanen@nokia.com])
-AM_INIT_AUTOMAKE([foreign])
-
-AC_PROG_CXX
-AC_PROG_LIBTOOL
-
-AC_ARG_ENABLE(docs, [ --enable-docs Build DOXYGEN documentation (requires Doxygen)],enable_docs=$enableval,enable_docs=auto)
-
-AC_PATH_PROG(DOXYGEN, doxygen, no)
-AC_MSG_CHECKING([whether to build Doxygen documentation])
-
-if test x$DOXYGEN = xno ; then
- have_doxygen=no
-else
- have_doxygen=yes
-fi
-if test x$enable_docs = xauto ; then
- if test x$have_doxygen = xno ; then
- enable_docs=no
- else
- enable_docs=yes
- fi
-fi
-if test x$enable_docs = xyes; then
- if test x$have_doxygen = xno; then
- AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
- else
- AC_MSG_RESULT(yes)
- fi
-else
- AC_MSG_RESULT(no)
-fi
-
-AM_CONDITIONAL(DOXYGEN_DOCS_ENABLED, test x$enable_docs = xyes)
-AC_SUBST(DOXYGEN)
-
-PKG_CHECK_MODULES(GLIB, glib-2.0)
-AC_SUBST(GLIB_CFLAGS)
-AC_SUBST(GLIB_LIBS)
-
-PKG_CHECK_MODULES(QTCORE, QtCore)
-AC_SUBST(QTCORE_CFLAGS)
-AC_SUBST(QTCORE_LIBS)
-
-PKG_CHECK_MODULES(QTNETWORK, QtNetwork)
-AC_SUBST(QTNETWORK_CFLAGS)
-AC_SUBST(QTNETWORK_LIBS)
-
-PKG_CHECK_MODULES(QTDBUS, QtDBus)
-AC_SUBST(QTDBUS_CFLAGS)
-AC_SUBST(QTDBUS_LIBS)
-
-PKG_CHECK_MODULES(QTTEST, QtTest)
-AC_SUBST(QTTEST_CFLAGS)
-AC_SUBST(QTTEST_LIBS)
-
-PKG_CHECK_MODULES(DBUS, dbus-glib-1)
-AC_SUBST(DBUS_CFLAGS)
-AC_SUBST(DBUS_LIBS)
-
-PKG_CHECK_MODULES(CONNSETTINGS, connsettings)
-AC_SUBST(CONNSETTINGS_CFLAGS)
-AC_SUBST(CONNSETTINGS_LIBS)
-
-PKG_CHECK_MODULES(OSSO_IC, osso-ic)
-AC_SUBST(OSSO_IC_CFLAGS)
-AC_SUBST(OSSO_IC_LIBS)
-
-PKG_CHECK_MODULES(ICD_DEV, icd2)
-AC_SUBST(ICD_DEV_CFLAGS)
-AC_SUBST(ICD_DEV_LIBS)
-
-PKG_CHECK_MODULES(GCONF, gconf-2.0)
-AC_SUBST(GCONF_CFLAGS)
-AC_SUBST(GCONF_LIBS)
-
-CONCFLAGS="-Wall -Werror -Wmissing-prototypes"
-AC_SUBST(CONCFLAGS)
-
-AC_CONFIG_FILES([Makefile \
- src/Makefile \
- tests/Makefile \
- conninet.pc \
- doxygen.cfg])
-AC_OUTPUT
diff --git a/src/3rdparty/libconninet/conninet.pc.in b/src/3rdparty/libconninet/conninet.pc.in
deleted file mode 100644
index 68cdee0..0000000
--- a/src/3rdparty/libconninet/conninet.pc.in
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: libconninet
-Description: Internet Connectivity support library
-Version: @VERSION@
-Requires: dbus-1 >= 0.60 glib-2.0 QtCore QtDBus QtGui
-Libs: -lconninet
-Cflags: -I${includedir}/conninet
diff --git a/src/3rdparty/libconninet/debian/changelog b/src/3rdparty/libconninet/debian/changelog
deleted file mode 100644
index 10e9dec..0000000
--- a/src/3rdparty/libconninet/debian/changelog
+++ /dev/null
@@ -1,305 +0,0 @@
-libconninet (0.45) unstable; urgency=low
-
- * Fixes: NB#187470 - libconninet: add automake to build-deps
-
- -- Markus Silvan <ext-markus.p.silvan@nokia.com> Wed, 25 Aug 2010 09:02:55 +0300
-
-libconninet (0.44) unstable; urgency=low
-
- * Added autoconf to build dependencies
-
- -- Markus Silvan <ext-markus.p.silvan@nokia.com> Wed, 25 Aug 2010 09:02:55 +0300
-
-libconninet (0.43) unstable; urgency=low
-
- * Fixes: NB#184824 - Getting all proxy variables from gconf in one go
- which will speedup the HTTP requests done by Qt4.7 webkit
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 12 Aug 2010 10:15:20 +0300
-
-libconninet (0.42) unstable; urgency=low
-
- * Fixes: NB#180536 - Uploads to online services are not working.
- This is a regression caused by fix to bug 175098, the timeout was never
- expiring when waiting reply from icd.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 19 Jul 2010 12:23:30 +0300
-
-libconninet (0.41) unstable; urgency=low
-
- * Fixes: NB#175098 - Qt4.7 Webkit crashes when bearer API QNetworkSession
- constructor calls QNetworkSession::syncStateWithInterface() which in turn
- calls Maemo::state() and Maemo::addrinfo() and webkit expects that event
- loop is not run but those function process main loop events.
- Now Maemo::state() and Maemo::addrinfo() are changed to be synchronous
- and fully blocking functions. The old non-blocking versions are called
- Maemo::state_non_blocking() and Maemo::addrinfo_non_blocking().
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 14 Jul 2010 10:12:47 +0300
-
-libconninet (0.40) unstable; urgency=low
-
- * Fixes: NB#167465 - Unable to open network connection using libbearer
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 11 May 2010 10:47:10 +0300
-
-libconninet (0.39) unstable; urgency=low
-
- * Fixes: NB#167982 - initialize DBus vtable in DBusDispatcher.
-
- -- Aapo Makela <aapo.makela@nokia.com> Mon, 10 May 2010 14:42:39 +0300
-
-libconninet (0.38) unstable; urgency=low
-
- * Changing icd2 connect_req to be synchronous as the check for
- returned connect signal did not work correctly, this caused a
- long timeout when connect() was called.
- * Scan sometimes missed results and did not return them to caller.
- * HTTP proxy settings were not set correctly.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 15 Apr 2010 11:25:06 +0300
-
-libconninet (0.37) unstable; urgency=low
-
- * Make proxy config reference counting atomic.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 3 Mar 2010 13:23:08 +0200
-
-libconninet (0.36) unstable; urgency=low
-
- * Fixes: NB#157586 - Cleanup dbus listener when WLAN scanning object is
- deleted.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Fri, 26 Feb 2010 13:30:41 +0200
-
-libconninet (0.35) unstable; urgency=low
-
- * Fixes: NB#156883 - libconninet fails to build under the Platform SDK (SB2)
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 18 Feb 2010 12:14:40 +0200
-
-libconninet (0.34) unstable; urgency=low
-
- * Coverity fix
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 16 Feb 2010 16:38:00 +0200
-
-libconninet (0.33) unstable; urgency=low
-
- * Added API to update Qt proxy config.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 26 Jan 2010 15:48:36 +0200
-
-libconninet (0.32) unstable; urgency=low
-
- * Fixed IAPConf to unset value when set value is invalid.
- * Updated IAPMonitor to use libconnsettings.
-
- -- Aapo Makela <aapo.makela@nokia.com> Wed, 03 Feb 2010 07:32:45 +0200
-
-libconninet (0.31) unstable; urgency=low
-
- * Fixes: NB#154892 - Check nulls in IAPConf.
-
- -- Aapo Makela <aapo.makela@nokia.com> Mon, 01 Feb 2010 09:32:06 +0200
-
-libconninet (0.30) unstable; urgency=low
-
- * Updated IAPConf to use libconnsettings.
-
- -- Aapo Makela <aapo.makela@nokia.com> Fri, 29 Jan 2010 12:58:03 +0200
-
-libconninet (0.29) unstable; urgency=low
-
- * Fixed dependencies
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Fri, 15 Jan 2010 10:16:07 +0200
-
-libconninet (0.28) unstable; urgency=low
-
- * Get rid of libdui dependency
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 13 Jan 2010 09:56:26 +0200
-
-libconninet (0.27) unstable; urgency=low
-
- * Insert new pending calls to the list in DBusDispatcher.
-
- -- Aapo Makela <aapo.makela@nokia.com> Tue, 22 Dec 2009 14:27:32 +0200
-
-libconninet (0.26) unstable; urgency=low
-
- * Added possibility to specify different signal path for DBusDispatcher.
-
- -- Aapo Makela <aapo.makela@nokia.com> Wed, 25 Nov 2009 14:27:34 +0200
-
-libconninet (0.25) unstable; urgency=low
-
- * Fixes: NB#146450 - All scan results were not returned to the caller.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 16 Nov 2009 17:23:15 +0200
-
-libconninet (0.24) unstable; urgency=low
-
- * Wait all scan results for all network types in Maemo::Icd::scan()
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Fri, 6 Nov 2009 14:45:23 +0200
-
-libconninet (0.23) unstable; urgency=low
-
- * Fixes: NB#143361 - Assert failure in session class for GPRS IAP.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 19 Oct 2009 16:00:14 +0300
-
-libconninet (0.22) unstable; urgency=low
-
- * Fixed the error checking if scan returns 0 results.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 7 Oct 2009 13:50:27 +0300
-
-libconninet (0.21) unstable; urgency=low
-
- * Support multiple DBusDispatcher classes at the same time. This is
- required by Maemo::Icd class so that multiple instances of it can
- be used the same time.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 5 Oct 2009 16:33:43 +0300
-
-libconninet (0.20) unstable; urgency=low
-
- * Fixed memory leak in IAPConf::setValue()
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Fri, 2 Oct 2009 13:02:21 +0300
-
-libconninet (0.19) unstable; urgency=low
-
- * Fixed connect_req to one specific IAP in Icd class.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 29 Sep 2009 17:02:46 +0300
-
-libconninet (0.18) unstable; urgency=low
-
- * Make sure the library will not abort in Icd class if scan does
- not return any results.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 22 Sep 2009 17:00:12 +0300
-
-libconninet (0.17) unstable; urgency=low
-
- * Added IAP monitoring support.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 21 Sep 2009 16:29:31 +0300
-
-libconninet (0.16) unstable; urgency=low
-
- * Disabled the old osso-ic dbus interface as it is currently not used.
- * Fixed the addrinfo request, now addresses are returned correctly to
- the caller.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 17 Sep 2009 15:56:13 +0300
-
-libconninet (0.15) unstable; urgency=low
-
- * Enabling state_req, statistics_req and addrinfo_req support
- functions in Maemo::Icd as the corresponding DBUS API functions are
- fixed in icd2 v0.89
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Fri, 24 Jul 2009 15:23:02 +0300
-
-libconninet (0.14) unstable; urgency=low
-
- * Icd statistics support added.
- * Icd address information support added.
- * Icd scan method does not return the final (and empty) result any more.
- * Added initial unit test implementation for Icd class.
- * Some of the status functions in Icd class disabled because of issues
- in icd2 and the dbus api.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 23 Jul 2009 11:03:05 +0300
-
-libconninet (0.13) unstable; urgency=low
-
- * Added API to get all the configured IAPs.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 21 Jul 2009 09:47:18 +0300
-
-libconninet (0.12) unstable; urgency=low
-
- * Replaced duivaluespace by Dui in pkg-config file because the
- duivaluespace is deprecated.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 20 Jul 2009 16:00:10 +0300
-
-libconninet (0.11) unstable; urgency=low
-
- * Using libdui instead of libduivaluespace because it is deprecated.
- * The IAPConf::clear() uses native gconf API instead of launching gconftool
- * Check that state_req call returned list and the list contains entries
- before trying to access it.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 20 Jul 2009 14:55:15 +0300
-
-libconninet (0.10) unstable; urgency=low
-
- * connect() did not return ok when connection succeeded.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 25 Jun 2009 09:31:21 +0300
-
-libconninet (0.9) unstable; urgency=low
-
- * Connection timeout set to 2.5min, same as in fremantle.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 17 Jun 2009 13:36:40 +0300
-
-libconninet (0.8) unstable; urgency=low
-
- * Fix state_req signal received from Icd
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 11 Jun 2009 17:19:33 +0300
-
-libconninet (0.7) unstable; urgency=low
-
- * Icd disconnect and select reqs are made synchronous as we do not
- wait the return status. The previous async version was causing core
- dumps if Icd class was destroyed too early.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 11 Jun 2009 11:52:36 +0300
-
-libconninet (0.6) unstable; urgency=low
-
- * Fixed the libconninet0-dev dependencies.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 8 Jun 2009 10:47:56 +0300
-
-libconninet (0.5) unstable; urgency=low
-
- * Fixed missing QObject connect functions.
- * Fixed IAPConf to return invalid QVariant if the value does not exist.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Mon, 01 Jun 2009 13:58:53 +0300
-
-libconninet (0.4) unstable; urgency=low
-
- * Fixed QObject signal setting for Maemo::Icd
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 20 May 2009 13:51:11 +0300
-
-libconninet (0.3) unstable; urgency=low
-
- * Refactoring classes
- * Added IAPConf class.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Thu, 14 May 2009 13:24:11 +0300
-
-libconninet (0.2) unstable; urgency=low
-
- * Fixed pkgconfig file which had wrong dependency
- * Added DBus array and struct support to DBusDispatcher.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Wed, 13 May 2009 12:11:00 +0300
-
-libconninet (0.1) unstable; urgency=low
-
- * Initial Release.
-
- -- Jukka Rissanen <jukka.rissanen@nokia.com> Tue, 12 May 2009 16:10:27 +0200
diff --git a/src/3rdparty/libconninet/debian/compat b/src/3rdparty/libconninet/debian/compat
deleted file mode 100644
index b8626c4..0000000
--- a/src/3rdparty/libconninet/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-4
diff --git a/src/3rdparty/libconninet/debian/control b/src/3rdparty/libconninet/debian/control
deleted file mode 100644
index a2343a0..0000000
--- a/src/3rdparty/libconninet/debian/control
+++ /dev/null
@@ -1,39 +0,0 @@
-Source: libconninet
-Priority: optional
-Maintainer: Jukka Rissanen <jukka.rissanen@nokia.com>
-Build-Depends: debhelper (>= 4.0.0), autotools-dev, libglib2.0-dev (>= 2.8),
- libdbus-1-dev (>= 0.60), libconnsettings0-dev (>= 0.4), icd2-osso-ic-dev,
- icd2-dev, libqt4-dev, libgconf2-dev (>> 2.6.4), autoconf, automake
-Standards-Version: 3.6.2
-Section: libs
-
-Package: libconninet0-dev
-Section: libdevel
-Architecture: any
-Depends: libconninet0 (= ${Source-Version}), libdbus-1-dev (>= 0.60),
- libglib2.0-dev (>= 2.8), libconnsettings0-dev (>= 0.4), libqt4-dev,
- icd2-osso-ic-dev, icd2-dev, libgconf2-dev (>> 2.6.4)
-Description: Internet Connectivity support library development files
- Internet Connectivity support library (libconninet) provides common
- support functions for connecting to icd2 and accessing configuration
- data.
- .
- This package contains the header files.
-
-Package: libconninet0
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: Internet Connectivity support library
- Internet Connectivity support library (libconninet) provides common
- support functions for connecting to icd2 and accessing configuration
- data.
- .
- This package contains the shared libraries.
-
-Package: libconninet0-dbg
-Section: libs
-Architecture: any
-Depends: libconninet0 (= ${Source-Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: Debug symbols for the Internet Connectivity support library
- Internet Connectivity support library (libconninet) debug symbols.
diff --git a/src/3rdparty/libconninet/debian/copyright b/src/3rdparty/libconninet/debian/copyright
deleted file mode 100644
index 97e8e68..0000000
--- a/src/3rdparty/libconninet/debian/copyright
+++ /dev/null
@@ -1,19 +0,0 @@
-libconninet - Internet Connectivity support library
-
-Copyright (C) 2009 Nokia Corporation. All rights reserved.
-
-Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
-This library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License version 2.1
-as published by the Free Software Foundation.
-
-This library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-02110-1301 USA
diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.dirs b/src/3rdparty/libconninet/debian/libconninet0-dev.dirs
deleted file mode 100644
index 4418816..0000000
--- a/src/3rdparty/libconninet/debian/libconninet0-dev.dirs
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/lib
-usr/include
diff --git a/src/3rdparty/libconninet/debian/libconninet0-dev.files b/src/3rdparty/libconninet/debian/libconninet0-dev.files
deleted file mode 100644
index 78bbac8..0000000
--- a/src/3rdparty/libconninet/debian/libconninet0-dev.files
+++ /dev/null
@@ -1,4 +0,0 @@
-usr/include/*
-usr/lib/lib*.so
-usr/lib/pkgconfig/*
-usr/share/pkgconfig/*
diff --git a/src/3rdparty/libconninet/debian/libconninet0.dirs b/src/3rdparty/libconninet/debian/libconninet0.dirs
deleted file mode 100644
index 6845771..0000000
--- a/src/3rdparty/libconninet/debian/libconninet0.dirs
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib
diff --git a/src/3rdparty/libconninet/debian/libconninet0.files b/src/3rdparty/libconninet/debian/libconninet0.files
deleted file mode 100644
index d0dbfd1..0000000
--- a/src/3rdparty/libconninet/debian/libconninet0.files
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/lib*.so.*
diff --git a/src/3rdparty/libconninet/debian/rules b/src/3rdparty/libconninet/debian/rules
deleted file mode 100755
index 2a3d395..0000000
--- a/src/3rdparty/libconninet/debian/rules
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-
-# These are used for cross-compiling and for saving the configure script
-# from having to guess our platform (since we know it already)
-DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
-DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
-
-
-CFLAGS = -Wall -g
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
- CFLAGS += -O0
-else
- CFLAGS += -O2
-endif
-
-# shared library versions, option 1
-#version=2.0.5
-#major=2
-# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so
-version=`ls src/.libs/lib*.so.* | \
- awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'`
-major=`ls src/.libs/lib*.so.* | \
- awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'`
-
-configure: configure.ac debian/changelog
- -./autogen.sh
-
-config.status: configure
- dh_testdir
- # Add here commands to configure the package.
- CFLAGS="$(CFLAGS)" ./configure \
- --host=$(DEB_HOST_GNU_TYPE) \
- --build=$(DEB_BUILD_GNU_TYPE) \
- --prefix=/usr \
- --mandir=\$${prefix}/share/man \
- --infodir=\$${prefix}/share/info
-
-
-build: build-stamp
-build-stamp: config.status
- dh_testdir
-
- # Add here commands to compile the package.
- $(MAKE)
-
- touch build-stamp
-
-clean:
- dh_testdir
- dh_testroot
- rm -f build-stamp
-
- # Add here commands to clean up after the build process.
- -$(MAKE) distclean
-ifneq "$(wildcard /usr/share/misc/config.sub)" ""
- cp -f /usr/share/misc/config.sub config.sub
-endif
-ifneq "$(wildcard /usr/share/misc/config.guess)" ""
- cp -f /usr/share/misc/config.guess config.guess
-endif
-
-
- dh_clean
-
-install: build
- dh_testdir
- dh_testroot
- dh_clean -k
- dh_installdirs
-
- # Add here commands to install the package into debian/tmp
- $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
- dh_testdir
- dh_testroot
- dh_movefiles
- dh_installchangelogs ChangeLog
- dh_installdocs
- dh_installexamples
-# dh_install
-# dh_installmenu
-# dh_installdebconf
-# dh_installlogrotate
-# dh_installemacsen
-# dh_installpam
-# dh_installmime
-# dh_installinit
-# dh_installcron
-# dh_installinfo
- dh_installman
- dh_link
- dh_strip --dbg-package=libconninet0
- dh_compress
- dh_fixperms
-# dh_perl
-# dh_python
- dh_makeshlibs
- dh_installdeb
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install
diff --git a/src/3rdparty/libconninet/doxygen.cfg.in b/src/3rdparty/libconninet/doxygen.cfg.in
deleted file mode 100644
index 80a4c8d..0000000
--- a/src/3rdparty/libconninet/doxygen.cfg.in
+++ /dev/null
@@ -1,1147 +0,0 @@
-# Doxyfile 1.3.7
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME = "Internet Connectivity Support Library"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER = @VERSION@
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY = doc
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 2 levels of 10 sub-directories under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of source
-# files, where putting all generated files in the same directory would otherwise
-# cause performance problems for the file system.
-
-CREATE_SUBDIRS = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
-# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE = English
-
-# This tag can be used to specify the encoding used in the generated output.
-# The encoding is not always determined by the language that is chosen,
-# but also whether or not the output is meant for Windows or non-Windows users.
-# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
-# forces the Windows encoding (this is the default for the Windows binary),
-# whereas setting the tag to NO uses a Unix-style encoding (the default for
-# all platforms other than Windows).
-
-USE_WINDOWS_ENCODING = NO
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is used
-# as the annotated text. Otherwise, the brief description is used as-is. If left
-# blank, the following values are used ("$name" is automatically replaced with the
-# name of the entity): "The $name class" "The $name widget" "The $name file"
-# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
-# members of a class in the documentation of that class as if those members were
-# ordinary class members. Constructors, destructors and assignment operators of
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = YES
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance, namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS = YES
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# users are advised to set this option to NO.
-
-CASE_SENSE_NAMES = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR = YES
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text.
-
-WARN_FORMAT = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT = conic/conic.h \
- conic/conicconnection.h \
- conic/conicconnectionevent.h \
- conic/conicevent.h \
- conic/coniciap.h \
- conic/conicstatisticsevent.h
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
-# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm
-
-FILE_PATTERNS =
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
-
-EXCLUDE_SYMLINKS = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-
-EXCLUDE_PATTERNS =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-
-INPUT_FILTER =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION = YES
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX = YES
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_PREDEFINED tags.
-
-EXPAND_ONLY_PREDEF = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed.
-
-PREDEFINED =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse the
-# parser if not removed.
-
-SKIP_FUNCTION_MACROS = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
-# super classes. Setting the tag to NO turns the diagrams off. Note that this
-# option is superseded by the HAVE_DOT option below. This is only a fallback. It is
-# recommended to install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS = YES
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
-CALL_GRAPH = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found on the path.
-
-DOT_PATH =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS =
-
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_WIDTH = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than
-# this value, doxygen will try to truncate the graph, so that it fits within
-# the specified constraint. Beware that most browsers cannot cope with very
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT = 1024
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes that
-# lay further from the root node will be omitted. Note that setting this option to
-# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that a graph may be further truncated if the graph's image dimensions are
-# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
-# If 0 is used for the depth value (the default), the graph is not depth-constrained.
-
-MAX_DOT_GRAPH_DEPTH = 0
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE = NO
diff --git a/src/3rdparty/libconninet/src/iapconf.h b/src/3rdparty/libconninet/src/iapconf.h
deleted file mode 100644
index 57c0856..0000000
--- a/src/3rdparty/libconninet/src/iapconf.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009 Nokia Corporation. All rights reserved.
-
- Contact: Aapo Makela <aapo.makela@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-#ifndef IAPCONF_H
-#define IAPCONF_H
-
-#include <QString>
-#include <QVariant>
-
-namespace Maemo {
-
-class IAPConfPrivate;
-class IAPConf {
-public:
- IAPConf(const QString &iap_id);
- virtual ~IAPConf();
-
- /**
- Convenience method for setting multiple IAP values with one call.
- */
- void set(const QString& key1, const QVariant& value1,
- const QString& key2 = "", const QVariant& value2 = QVariant(),
- const QString& key3 = "", const QVariant& value3 = QVariant(),
- const QString& key4 = "", const QVariant& value4 = QVariant(),
- const QString& key5 = "", const QVariant& value5 = QVariant(),
- const QString& key6 = "", const QVariant& value6 = QVariant(),
- const QString& key7 = "", const QVariant& value7 = QVariant(),
- const QString& key8 = "", const QVariant& value8 = QVariant(),
- const QString& key9 = "", const QVariant& value9 = QVariant(),
- const QString& key10 = "", const QVariant& value10 = QVariant());
-
- /**
- Set one IAP value.
- */
- void setValue(const QString& key, const QVariant& value);
-
- /**
- Get one IAP value.
- */
- QVariant value(const QString& key) const;
-
- /**
- Clear this IAP from GConf
- */
- void clear(const char *default_path=0);
-
- /**
- Clear all IAP specific information from GConf (including all IAPs).
- DO NOT USE THIS FUNCTION IN ANYWHERE ELSE EXCEPT IN TEST CODE!
- */
- void clearAll();
-
- /**
- Return all the IAPs found in the system. If return_path is true,
- then do not strip the IAP path away.
- */
- static void getAll(QList<QString> &all_iaps, bool return_path=false);
-
-private:
- IAPConfPrivate *d_ptr;
-};
-
-} // namespace Maemo
-
-#endif
diff --git a/src/3rdparty/libconninet/src/iapmonitor.h b/src/3rdparty/libconninet/src/iapmonitor.h
deleted file mode 100644
index 558f23e..0000000
--- a/src/3rdparty/libconninet/src/iapmonitor.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009-2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-#ifndef IAPMONITOR_H
-#define IAPMONITOR_H
-
-#include <QString>
-
-namespace Maemo {
-
-class IAPMonitorPrivate;
-class IAPMonitor {
-public:
- IAPMonitor();
- ~IAPMonitor();
-
-protected:
- virtual void iapAdded(const QString &id);
- virtual void iapRemoved(const QString &id);
-
-private:
- IAPMonitorPrivate *d_ptr;
- Q_DECLARE_PRIVATE(IAPMonitor);
-};
-
-} // namespace Maemo
-
-#endif // IAPMONITOR_H
-
diff --git a/src/3rdparty/libconninet/src/proxyconf.h b/src/3rdparty/libconninet/src/proxyconf.h
deleted file mode 100644
index 7711c49..0000000
--- a/src/3rdparty/libconninet/src/proxyconf.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-#ifndef PROXYCONF_H
-#define PROXYCONF_H
-
-#include <QString>
-#include <QNetworkProxy>
-
-namespace Maemo {
-
-class ProxyConfPrivate;
-class ProxyConf {
-private:
- ProxyConfPrivate *d_ptr;
-
-public:
- ProxyConf();
- virtual ~ProxyConf();
-
- QList<QNetworkProxy> flush(const QNetworkProxyQuery &query = QNetworkProxyQuery()); // read the proxies from db
-
- /* Note that for each update() call there should be corresponding
- * clear() call because the ProxyConf class implements a reference
- * counting mechanism. The factory is removed only when there is
- * no one using the factory any more.
- */
- static void update(void); // this builds QNetworkProxy factory
- static void clear(void); // this removes QNetworkProxy factory
-};
-
-} // namespace Maemo
-
-#endif
diff --git a/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp b/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp
deleted file mode 100644
index 70deb3f..0000000
--- a/src/3rdparty/libconninet/tests/ut_dbusdispatcher.cpp
+++ /dev/null
@@ -1,191 +0,0 @@
-/* * This file is part of conn-dui-settings-inet *
- *
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- *
- * Contact: Aapo Makela <aapo.makela@nokia.com>
- *
- * This software, including documentation, is protected by copyright
- * controlled by Nokia Corporation. All rights are reserved. Copying,
- * including reproducing, storing, adapting or translating, any or all of
- * this material requires the prior written consent of Nokia Corporation.
- * This material also contains confidential information which may not be
- * disclosed to others without the prior written consent of Nokia.
- */
-
-#include <QtTest/QtTest>
-#include <QCoreApplication>
-#include <QEventLoop>
-#include <QDebug>
-#include <icd/dbus_api.h>
-
-#include <dbusdispatcher.h>
-
-class Ut_DBusDispatcher : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void init();
- void cleanup();
- void initTestCase();
- void cleanupTestCase();
-
- void simpleSignalReceived(const QString& interface,
- const QString& signal,
- const QList<QVariant>& args);
- void simpleCallReply(const QString& method,
- const QList<QVariant>& args,
- const QString& error);
- void simpleCall();
-
- void complexCallReply(const QString& method,
- const QList<QVariant>& args,
- const QString& error);
- void complexCall();
-
-private:
- Maemo::DBusDispatcher *mSubject;
- QProcess *icd_stub;
-
- QString mMethod;
- QString mInterface;
- QString mSignal;
- QList<QVariant> mArgs;
-};
-
-void Ut_DBusDispatcher::init()
-{
- mSubject = new Maemo::DBusDispatcher("com.nokia.icd2", "/com/nokia/icd2",
- "com.nokia.icd2");
-
- // Start icd2 stub
- icd_stub = new QProcess(this);
- icd_stub->start("/usr/bin/icd2_stub.py");
- QTest::qWait(1000);
-}
-
-void Ut_DBusDispatcher::cleanup()
-{
- // Terminate icd2 stub
- icd_stub->terminate();
- icd_stub->waitForFinished();
-
- delete mSubject;
- mSubject = 0;
-}
-
-void Ut_DBusDispatcher::initTestCase()
-{
-}
-
-void Ut_DBusDispatcher::cleanupTestCase()
-{
-}
-
-void Ut_DBusDispatcher::simpleSignalReceived(const QString& interface,
- const QString& signal,
- const QList<QVariant>& args)
-{
- // Signal handler, which simply records what has been signalled
- mInterface = interface;
- mSignal = signal;
- mArgs = args;
-}
-
-void Ut_DBusDispatcher::simpleCallReply(const QString& method,
- const QList<QVariant>& args,
- const QString& error)
-{
- mMethod = method;
-
- // Check that method matches and at least WLAN_INFRA is returned
- QVERIFY(error.isEmpty());
- QVERIFY(args[0].toStringList().contains("WLAN_INFRA"));
-}
-
-void Ut_DBusDispatcher::simpleCall()
-{
- uint flags = 0;
- QList<QVariant> reply;
- int idx = 0;
- QTimer timer;
-
- // Connect signals
- connect(mSubject, SIGNAL(signalReceived(const QString&,
- const QString&,
- const QList<QVariant>&)),
- this, SLOT(simpleSignalReceived(const QString&,
- const QString&,
- const QList<QVariant>&)));
- connect(mSubject, SIGNAL(callReply(const QString&,
- const QList<QVariant>&,
- const QString&)),
- this, SLOT(simpleCallReply(const QString&,
- const QList<QVariant>&,
- const QString&)));
-
- // Request scan and verify the call starts succesfully
- QVERIFY(mSubject->callAsynchronous("scan_req", flags));
-
- // Wait 1st scan signal for 10 secs
- timer.setSingleShot(true);
- timer.start(10000);
- while (timer.isActive() && mInterface.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- idx++;
- }
- timer.stop();
-
- // Sanity checks for the scan result
- QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2
- QVERIFY(mMethod == "scan_req"); // method is scan_req
- QVERIFY(mSignal == "scan_result_sig"); // signal is scan result
- QVERIFY(mArgs[0] == QVariant(0) ||
- mArgs[0] == QVariant(4)); // First argument is status
- // (0 == NEW, 4 == COMPLETED)
- //QVERIFY(mArgs.contains(QVariant("WLAN_INFRA"))); // WLAN scan result
-}
-
-void Ut_DBusDispatcher::complexCallReply(const QString& method,
- const QList<QVariant>& args,
- const QString& error)
-{
- mMethod = method;
-
- // Check that method has not return arguments and error is not set
- QVERIFY(error.isEmpty());
- QVERIFY(args.isEmpty());
-}
-
-void Ut_DBusDispatcher::complexCall()
-{
- uint flags = ICD_CONNECTION_FLAG_UI_EVENT;
- QList<QVariant> reply;
- QVariantList networks;
- QVariantList network1;
-
- network1 << "" << (uint)0 << "" << "WLAN_INFRA" << (uint)0x05000011 << QByteArray("osso@46@net");
- networks << QVariant(network1);
-
- // Connect signal
- connect(mSubject, SIGNAL(callReply(const QString&,
- const QList<QVariant>&,
- const QString&)),
- this, SLOT(complexCallReply(const QString&,
- const QList<QVariant>&,
- const QString&)));
-
- // Request connect and verify the call starts succesfully
- QVERIFY(mSubject->callAsynchronous("connect_req", flags, networks));
-
- QTest::qWait(1000);
-
- // Sanity checks for the scan result
- QVERIFY(mInterface == "com.nokia.icd2"); // interface is icd2
- QVERIFY(mMethod == "connect_req"); // method connect_req
-}
-
-QTEST_MAIN(Ut_DBusDispatcher)
-
-#include "ut_dbusdispatcher.moc"
diff --git a/src/3rdparty/libconninet/tests/ut_iapconf.cpp b/src/3rdparty/libconninet/tests/ut_iapconf.cpp
deleted file mode 100644
index 6a91d61..0000000
--- a/src/3rdparty/libconninet/tests/ut_iapconf.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009 Nokia Corporation. All rights reserved.
-
- Contact: Aapo Makela <aapo.makela@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-
-#include <QtTest/QtTest>
-#include <QDebug>
-
-#include <iapconf.h>
-
-class Ut_IAPConf : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void init();
- void cleanup();
- void initTestCase();
- void cleanupTestCase();
-
- void setupIAP();
- void setupIAPContainingDot();
- void unsetIAPValueIsNotValid();
- void verifyAllIAPs();
- void allForEmptyConfReturnsEmptyList();
- void settingInvalidValueUnsetsKey();
-
-private:
- Maemo::IAPConf *mSubject;
-};
-
-void Ut_IAPConf::init()
-{
- mSubject = new Maemo::IAPConf("test_iap");
-}
-
-void Ut_IAPConf::cleanup()
-{
- // Clear made settings
- mSubject->clear();
-
- delete mSubject;
- mSubject = 0;
-}
-
-void Ut_IAPConf::initTestCase()
-{
-}
-
-void Ut_IAPConf::cleanupTestCase()
-{
-}
-
-void Ut_IAPConf::setupIAP()
-{
- // Set bunch of values
- mSubject->set("ipv4_type", "AUTO",
- "wlan_wepkey1", "connt",
- "wlan_wepdefkey", 1,
- "wlan_ssid", QByteArray("CONNTEST-1"));
-
- // Set one value
- mSubject->setValue("type", "WLAN_INFRA");
-
- // Check all values that they were set correctly
- QVERIFY(mSubject->value("ipv4_type").toString() == "AUTO");
- QVERIFY(mSubject->value("wlan_wepkey1").toString() == "connt");
- QVERIFY(mSubject->value("wlan_wepdefkey").toInt() == 1);
- QVERIFY(mSubject->value("wlan_ssid").toByteArray() == QByteArray("CONNTEST-1"));
- QVERIFY(mSubject->value("type").toString() == "WLAN_INFRA");
-}
-
-void Ut_IAPConf::setupIAPContainingDot()
-{
- delete mSubject;
- mSubject = new Maemo::IAPConf("test.iap");
-
- // Set and check one value
- mSubject->setValue("type", "DUMMY");
- QVERIFY(mSubject->value("type").toString() == "DUMMY");
-}
-
-void Ut_IAPConf::unsetIAPValueIsNotValid()
-{
- QVariant invalidValue = mSubject->value("this_value_does_not_exist");
- QVERIFY(invalidValue.isValid() == false);
-}
-
-void Ut_IAPConf::verifyAllIAPs()
-{
- int count = 0, extras = 0;
- QRegExp regexp("iap[1-3]");
- Maemo::IAPConf iap1("iap1");
- Maemo::IAPConf iap2("iap2");
- Maemo::IAPConf iap3("iap3");
-
- iap1.clear();
- iap2.clear();
- iap3.clear();
-
- iap1.setValue("name", "iap1");
- iap2.setValue("name", "iap2");
- iap3.setValue("name", "iap3");
-
- count = extras = 0;
- QList<QString> iaps;
- Maemo::IAPConf::getAll(iaps, true);
- foreach (QString iap_path, iaps) {
- QString iap_id = iap_path.section('/', 5); /* This is the IAP id */
- if (!iap_id.contains(regexp)) {
- extras++;
- continue;
- }
- Maemo::IAPConf iap(iap_id);
- QString name = iap.value("name").toString();
- QVERIFY(name == iap_id);
- count++;
- }
- QCOMPARE(count, iaps.size()-extras);
-
- iap1.clear();
- iap2.clear();
- iap3.clear();
-
- iap1.setValue("name", "iap1");
- iap2.setValue("name", "iap2");
- iap3.setValue("name", "iap3");
-
- count = extras = 0;
- Maemo::IAPConf::getAll(iaps);
- foreach (QString iap_id, iaps) {
- if (!iap_id.contains(regexp)) {
- extras++;
- continue;
- }
- Maemo::IAPConf iap(iap_id);
- QString name = iap.value("name").toString();
- QVERIFY(name == iap_id);
- count++;
- }
- QCOMPARE(count, iaps.size()-extras);
-}
-
-void Ut_IAPConf::allForEmptyConfReturnsEmptyList()
-{
- // Clear everything in configuration
- mSubject->clearAll();
-
- // Get all for a list and check that it is empty
- QStringList iaps;
- mSubject->getAll(iaps);
- QVERIFY(iaps.isEmpty());
-}
-
-void Ut_IAPConf::settingInvalidValueUnsetsKey()
-{
- // Setup some IAP
- setupIAP();
-
- // Set invalid value to unset "wlan_wepdefkey" key and verify that the
- // value is unset
- mSubject->setValue("wlan_wepdefkey", QVariant());
- QVERIFY(!mSubject->value("wlan_wepdefkey").isValid());
-}
-
-QTEST_MAIN(Ut_IAPConf)
-
-#include "ut_iapconf.moc"
diff --git a/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp b/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp
deleted file mode 100644
index f14f623..0000000
--- a/src/3rdparty/libconninet/tests/ut_iapmonitor.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009-2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-
-#include <QtTest/QtTest>
-#include <QDebug>
-
-#include <iapmonitor.h>
-#include <iapconf.h>
-
-static const char *iap_id = "test_monitor_1";
-
-class TestIAPMonitor : public Maemo::IAPMonitor
-{
-public:
- QString addedIap;
- QString removedIap;
-
-protected:
- virtual void iapAdded(const QString &id)
- {
- addedIap = id;
- }
-
- virtual void iapRemoved(const QString &id)
- {
- removedIap = id;
- }
-};
-
-class Ut_IAPMonitor : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void init();
- void cleanup();
- void initTestCase();
- void cleanupTestCase();
-
- void check();
-
-private:
- TestIAPMonitor *mon;
- Maemo::IAPConf *iap;
-};
-
-void Ut_IAPMonitor::init()
-{
- mon = new TestIAPMonitor;
-}
-
-void Ut_IAPMonitor::cleanup()
-{
- delete mon;
- mon = 0;
-}
-
-void Ut_IAPMonitor::initTestCase()
-{
-}
-
-void Ut_IAPMonitor::cleanupTestCase()
-{
-}
-
-void Ut_IAPMonitor::check()
-{
- QVERIFY(mon->addedIap.isEmpty());
-
- iap = new Maemo::IAPConf(iap_id);
- iap->set("ipv4_type", "AUTO",
- "wlan_wepkey1", "connt",
- "wlan_wepdefkey", 1,
- "wlan_ssid", QByteArray(iap_id));
-
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- QVERIFY(mon->addedIap == iap_id);
- mon->addedIap.clear();
-
- QVERIFY(mon->removedIap.isEmpty());
-
- // Unset only one value and verify that IAP is not removed
- iap->set("ipv4_type", QVariant());
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- QVERIFY(mon->removedIap.isEmpty());
-
- // Clear the whole IAP and check that it is removed
- iap->clear();
- delete iap;
-
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
-
- QVERIFY(mon->removedIap == iap_id);
-}
-
-QTEST_MAIN(Ut_IAPMonitor)
-
-#include "ut_iapmonitor.moc"
diff --git a/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp b/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp
deleted file mode 100644
index 494829d..0000000
--- a/src/3rdparty/libconninet/tests/ut_maemo_icd.cpp
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- *
- * Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-
-
-// !!!!
-// !!!! NOTE: THESE TEST DO NOT REALLY WORK YET BECAUSE OF MISSING
-// !!!! FUNCTIONALITY IN ICD2 STUB. YOU HAVE BEEN WARNED.
-// !!!!
-
-
-#include <QtTest/QtTest>
-#include <QCoreApplication>
-#include <QEventLoop>
-#include <QDebug>
-#include <icd/dbus_api.h>
-
-#include "maemo_icd.h"
-
-class Ut_MaemoIcd : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void init();
- void cleanup();
- void initTestCase();
- void cleanupTestCase();
-
- void scan_req();
- void scan_cancel_req();
- void connect_req_default();
- void state_req_all();
- void state_req();
- void statistics_req_all();
- void statistics_req();
- void addrinfo_req_all();
- void addrinfo_req();
-
-private:
- void disconnect_req_default(); // this is currently not run
- void connect_req_specific(); // this is currently not run
- QProcess *icd_stub;
- bool connect_iap(Maemo::IcdConnectResult &connect_result,
- QString &result,
- QString &error,
- QString iap=QString());
-};
-
-
-QString create_error_str(Maemo::Icd &icd)
-{
- return icd.error();
-}
-
-
-void Ut_MaemoIcd::init()
-{
- icd_stub = new QProcess(this);
- icd_stub->setStandardOutputFile("/tmp/ut_maemo_icd.log");
- icd_stub->start("/usr/bin/icd2_stub.py");
- QTest::qWait(1000);
-
- // Set the statistics
- QProcess dbus_send;
- dbus_send.start("dbus-send --type=method_call --system "
- "--dest=com.nokia.icd2 /com/nokia/icd2 "
- "com.nokia.icd2.testing.set_statistics "
- "uint32:1024 uint32:256");
- dbus_send.waitForFinished();
-
-}
-
-void Ut_MaemoIcd::cleanup()
-{
- icd_stub->terminate();
- icd_stub->waitForFinished();
-}
-
-void Ut_MaemoIcd::initTestCase()
-{
-}
-
-void Ut_MaemoIcd::cleanupTestCase()
-{
-}
-
-void Ut_MaemoIcd::scan_req()
-{
- QList<Maemo::IcdScanResult> scanned;
- QStringList scannedNetworkTypes;
- QStringList networkTypesToScan;
- QString error;
- Maemo::Icd icd(ICD_SHORT_SCAN_TIMEOUT);
-
- scannedNetworkTypes = icd.scan(ICD_SCAN_REQUEST_ACTIVE,
- networkTypesToScan,
- scanned,
- error);
- QVERIFY(error.isEmpty());
- QCOMPARE(scanned.size(), 3);
- QVERIFY(scannedNetworkTypes[0] == "WLAN_INFRA");
- QVERIFY(scannedNetworkTypes[1] == "DUN_GSM_PS");
-}
-
-void Ut_MaemoIcd::scan_cancel_req()
-{
- Maemo::Icd icd;
- icd.scanCancel();
- // Not much to verify here
-}
-
-bool Ut_MaemoIcd::connect_iap(Maemo::IcdConnectResult &connect_result,
- QString &result,
- QString &error,
- QString iap)
-{
- icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT;
- bool st;
- Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT);
-
- if (iap.isEmpty()) {
- qDebug() << "connecting to default IAP";
- st = icd.connect(flags, connect_result);
- } else {
- qDebug() << "connecting to" << iap;
- st = icd.connect(flags, iap, result);
- }
-
- error = create_error_str(icd);
- return st;
-}
-
-void Ut_MaemoIcd::connect_req_default()
-{
- Maemo::IcdConnectResult connect_result;
- QString result, error;
- bool st;
- st = connect_iap(connect_result, result, error);
- QVERIFY2(st, error.toAscii().data());
- result = connect_result.connect.network_id.data();
- qDebug() << result;
-}
-
-
-void Ut_MaemoIcd::disconnect_req_default()
-{
- icd_connection_flags flags = ICD_CONNECTION_FLAG_USER_EVENT;
- bool st;
- Maemo::Icd icd(ICD_SHORT_CONNECT_TIMEOUT);
- icd.disconnect(flags);
-}
-
-
-void Ut_MaemoIcd::connect_req_specific()
-{
- Maemo::IcdConnectResult connect_result;
- QString result;
- QString error;
- bool st;
- st = connect_iap(connect_result, result, error, "wpa2gx2.osso.net");
- QVERIFY2(st, error.toAscii().data());
- qDebug() << result;
-}
-
-
-void Ut_MaemoIcd::state_req_all()
-{
- QList<Maemo::IcdStateResult> state_results;
- Maemo::Icd icd;
- int sig;
- sig = icd.state(state_results);
- QVERIFY2(sig==1, create_error_str(icd).toAscii().data());
-}
-
-
-void Ut_MaemoIcd::state_req()
-{
- Maemo::IcdStateResult state_result;
- Maemo::Icd icd;
- int sig;
- QString service_type, service_id;
- QString network_type("WLAN_INFRA");
- QByteArray network_id("wpa2gx2.osso.net");
- sig = icd.state(service_type, 0, service_id,
- network_type, (uint)0x17a1, network_id,
- state_result);
- QVERIFY2(sig==1, create_error_str(icd).toAscii().data());
-}
-
-
-void Ut_MaemoIcd::statistics_req_all()
-{
- QList<Maemo::IcdStatisticsResult> stats_results;
- Maemo::Icd icd;
- int sig;
- QString err;
- sig = icd.statistics(stats_results);
- err = create_error_str(icd);
- if (!err.isEmpty())
- QVERIFY2(sig==1, err.toAscii().data());
- else
- QCOMPARE(sig, 1);
-
- for(int i=0; i<sig; i++) {
- QVERIFY(stats_results[i].bytes_received == 1024);
- QVERIFY(stats_results[i].bytes_sent == 256);
- }
-}
-
-
-// Can be uncommented when needed function is enabled in Icd class
-void Ut_MaemoIcd::statistics_req()
-{
- Maemo::IcdStatisticsResult stats_result;
- Maemo::Icd icd;
- int sig;
- QString service_type, service_id;
- QString network_type("WLAN_INFRA");
- QByteArray network_id("wpa2gx2.osso.net");
- sig = icd.statistics(service_type, 0, service_id,
- network_type, (uint)0x17a1, network_id,
- stats_result);
- QVERIFY2(sig==1, create_error_str(icd).toAscii().data());
- QVERIFY(stats_result.bytes_received == 1024);
- QVERIFY(stats_result.bytes_sent == 256);
-}
-
-
-void Ut_MaemoIcd::addrinfo_req_all()
-{
- QList<Maemo::IcdAddressInfoResult> addr_results;
- Maemo::Icd icd;
- int sig;
- sig = icd.addrinfo(addr_results);
- QVERIFY2(sig==1, create_error_str(icd).toAscii().data());
-}
-
-
-void Ut_MaemoIcd::addrinfo_req()
-{
- Maemo::IcdAddressInfoResult addr_result;
- Maemo::Icd icd;
- int sig;
- QString service_type, service_id;
- QString network_type("WLAN_INFRA");
- QByteArray network_id("wpa2gx2.osso.net");
- sig = icd.addrinfo(service_type, 0, service_id,
- network_type, (uint)0x17a1, network_id,
- addr_result);
- QVERIFY2(sig==1, create_error_str(icd).toAscii().data());
-}
-
-
-QTEST_MAIN(Ut_MaemoIcd)
-
-#include "ut_maemo_icd.moc"
diff --git a/src/3rdparty/libconninet/tests/ut_proxyconf.cpp b/src/3rdparty/libconninet/tests/ut_proxyconf.cpp
deleted file mode 100644
index 1f407f0..0000000
--- a/src/3rdparty/libconninet/tests/ut_proxyconf.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-
-#include <QtTest/QtTest>
-#include <QDebug>
-#include <QNetworkProxy>
-#include <conn_settings.h>
-
-#include "../src/proxyconf.h"
-
-class Ut_ProxyConf : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void init();
- void cleanup();
- void initTestCase();
- void cleanupTestCase();
-
- // tests without the factory
- void proxy_ftp_no_factory_ok_auto();
- void proxy_ftp_no_factory_ok_manual();
- void proxy_http_no_factory_ok_manual();
- void proxy_https_no_factory_ok_manual();
- void proxy_socks_no_factory_ok_manual();
- void proxy_default_no_factory_ok_manual();
-
- // tests using the factory
- void proxy_ftp_factory_ok_auto();
- void proxy_ftp_factory_ok_manual();
- void proxy_http_factory_ok_manual();
- void proxy_https_factory_ok_manual();
- void proxy_socks_factory_ok_manual();
- void proxy_http_factory_ok_manual_clear();
- void proxy_default_factory_ok_manual();
- void proxy_http_factory_ok_manual_ignore_list();
- void proxy_default_factory_ok_manual_system();
-
-private:
- Maemo::ProxyConf *pc;
-};
-
-
-void put(QString var, QString type, QString value)
-{
- QProcess gconf;
- if (value.isEmpty())
- gconf.start(QString("gconftool-2 -u /system/proxy/"+var));
- else
- gconf.start(QString("gconftool-2 -s /system/proxy/"+var+" -t "+type+" "+value));
- gconf.waitForFinished();
-}
-
-void put_http(QString var, QString type, QString value)
-{
- QProcess gconf;
- if (value.isEmpty())
- gconf.start(QString("gconftool-2 -u /system/http_proxy/"+var));
- else
- gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t "+type+" "+value));
- gconf.waitForFinished();
-}
-
-void put_list(QString var, QString type, QList<QString> value)
-{
- QProcess gconf;
- QString values = "[";
- foreach (QString str, value)
- values = values + str + ",";
- values.chop(1);
- values = values + "]";
-
- gconf.start(QString("gconftool-2 -s /system/http_proxy/"+var+" -t list --list-type="+type+" "+values));
- gconf.waitForFinished();
-}
-
-
-void Ut_ProxyConf::init()
-{
- put_http("host", "string", "my.proxy.com");
- put_http("port", "int", "8080");
-
- QList<QString> list;
- list.append("foo.bar.com");
- list.append("192.168.19.69");
- list.append("192.168.20.0/24");
- list.append("bar.foo.com");
- put_list("ignore_hosts", "string", list);
- put_http("use_http_host", "boolean", "true");
-
- put("mode", "string", "auto");
- put("autoconfig_url", "string", "http://foo.bar.com/autoconf");
- put("secure_host", "string", "secure_host.com");
- put("secure_port", "int", "112");
-
- put("ftp_host", "string", "ftp.nuukia.com");
- put("ftp_port", "int", "2000");
- put("socks_host", "string", "socks.host.com");
- put("socks_port", "int", "10080");
- put("rtsp_host", "string", "rtsp.voice.com");
- put("rtsp_port", "int", "1554");
-
- pc = new Maemo::ProxyConf();
-}
-
-void Ut_ProxyConf::cleanup()
-{
- delete pc;
- pc = 0;
-}
-
-void Ut_ProxyConf::initTestCase()
-{
-}
-
-void Ut_ProxyConf::cleanupTestCase()
-{
-}
-
-
-void Ut_ProxyConf::proxy_ftp_no_factory_ok_auto()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/"));
-
- nplist = pc->flush(query);
- QVERIFY(nplist.length()==0);
-}
-
-
-void Ut_ProxyConf::proxy_ftp_no_factory_ok_manual()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/"));
-
- put("mode", "string", "manual");
-
- nplist = pc->flush(query);
- foreach (QNetworkProxy proxy, nplist) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(nplist.length()==3);
- QVERIFY(nplist.first().type() == QNetworkProxy::FtpCachingProxy);
-}
-
-
-void Ut_ProxyConf::proxy_http_no_factory_ok_manual()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
-
- put("mode", "string", "manual");
-
- nplist = pc->flush(query);
- foreach (QNetworkProxy proxy, nplist) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(nplist.length()==3);
- QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy);
-}
-
-
-void Ut_ProxyConf::proxy_https_no_factory_ok_manual()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/"));
-
- put("mode", "string", "manual");
-
- nplist = pc->flush(query);
- foreach (QNetworkProxy proxy, nplist) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(nplist.length()==2);
- QVERIFY(nplist.first().type() == QNetworkProxy::HttpProxy);
-}
-
-
-void Ut_ProxyConf::proxy_socks_no_factory_ok_manual()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
-
- put("mode", "string", "manual");
- put_http("host", "string", "");
-
- nplist = pc->flush(query);
- foreach (QNetworkProxy proxy, nplist) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(nplist.length()==2);
- QVERIFY(nplist.first().type() == QNetworkProxy::Socks5Proxy);
-}
-
-
-void Ut_ProxyConf::proxy_default_no_factory_ok_manual()
-{
- QList<QNetworkProxy> nplist;
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/"));
-
- put("mode", "string", "manual");
- put("socks_host", "string", "");
- put("secure_host", "string", "");
-
- nplist = pc->flush(query);
- foreach (QNetworkProxy proxy, nplist) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(nplist.length()==0);
-}
-
-
-void Ut_ProxyConf::proxy_ftp_factory_ok_auto()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/"));
- Maemo::ProxyConf::update();
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
- QVERIFY(listOfProxies.length()==1);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_ftp_factory_ok_manual()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("ftp://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==3);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::FtpCachingProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_http_factory_ok_manual()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==3);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_https_factory_ok_manual()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("https://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==2);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_socks_factory_ok_manual()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
- put_http("host", "string", "");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==2);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::Socks5Proxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_http_factory_ok_manual_clear()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
- put_http("host", "string", "192.168.1.1");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==3);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy);
-
- Maemo::ProxyConf::clear();
- listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
- QVERIFY(listOfProxies.length()==1);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy);
-}
-
-
-void Ut_ProxyConf::proxy_default_factory_ok_manual()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("foobar://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
- put("socks_host", "string", "");
- put("secure_host", "string", "");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- QVERIFY(listOfProxies.length()==1);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_http_factory_ok_manual_ignore_list()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://192.168.19.70/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
-
- foreach (QNetworkProxy proxy, listOfProxies) {
- qDebug() << "proxy: " << proxy.hostName() << "port" << proxy.port();
- }
- QVERIFY(listOfProxies.length()==3);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::HttpProxy);
-
- query = QNetworkProxyQuery(QUrl("http://192.168.20.10/"));
- listOfProxies = QNetworkProxyFactory::proxyForQuery(query);
- QVERIFY(listOfProxies.length()==1);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-void Ut_ProxyConf::proxy_default_factory_ok_manual_system()
-{
- QNetworkProxyQuery query = QNetworkProxyQuery(QUrl("http://maps.google.com/"));
- Maemo::ProxyConf::update();
-
- put("mode", "string", "manual");
-
- QList<QNetworkProxy> listOfProxies = QNetworkProxyFactory::systemProxyForQuery(query);
-
- QVERIFY(listOfProxies.length()==1);
- QVERIFY(listOfProxies.first().type() == QNetworkProxy::NoProxy);
- Maemo::ProxyConf::clear();
-}
-
-
-
-
-QTEST_MAIN(Ut_ProxyConf)
-
-#include "ut_proxyconf.moc"
diff --git a/src/3rdparty/libjpeg.pri b/src/3rdparty/libjpeg.pri
index 4551d7b..63f2aca 100644
--- a/src/3rdparty/libjpeg.pri
+++ b/src/3rdparty/libjpeg.pri
@@ -1,3 +1,18 @@
+wince*: {
+ DEFINES += NO_GETENV
+ contains(CE_ARCH,x86):CONFIG -= stl exceptions
+ contains(CE_ARCH,x86):CONFIG += exceptions_off
+}
+
+#Disable warnings in 3rdparty code due to unused arguments
+symbian: {
+ QMAKE_CXXFLAGS.CW += -W nounusedarg
+ TARGET.UID3=0x2001E61B
+} else:contains(QMAKE_CC, gcc): {
+ QMAKE_CFLAGS_WARN_ON += -Wno-unused-parameter -Wno-main
+}
+
+
INCLUDEPATH += $$PWD/libjpeg
SOURCES += \
$$PWD/libjpeg/jaricom.c \
diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag
index ae33228..fff71f4 100644
--- a/src/3rdparty/webkit/.tag
+++ b/src/3rdparty/webkit/.tag
@@ -1 +1 @@
-715b53069911a31a559aa0b3d94ffc6a5ac20988
+6e15c3404d15a8ab72242152ec966e5e388161a2
diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog
index 14d6da3..f438655 100644
--- a/src/3rdparty/webkit/ChangeLog
+++ b/src/3rdparty/webkit/ChangeLog
@@ -1,3 +1,11 @@
+2010-09-24 Romain Pokrzywka <romain@kdab.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the Wince build.
+
+ * WebKit.pri: Apply msvc flags to wince, too.
+
2010-07-01 Simon Hausmann <simon.hausmann@nokia.com>
Rubber-stamped by Laszlo Gombos.
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
index 9922da6..c7e0fc2 100644
--- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
@@ -1,3 +1,39 @@
+2010-06-18 Tucker Jay <jay.tucker@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ [Symbian] Lazy commit of memory required in JSC register file
+ https://bugs.webkit.org/show_bug.cgi?id=34349
+
+ * JavaScriptCore.pro: Added 1 new Symbian source file
+ * interpreter/RegisterFile.cpp:
+ (JSC::RegisterFile::~RegisterFile):
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::):
+ (JSC::RegisterFile::start):
+ (JSC::RegisterFile::end):
+ (JSC::RegisterFile::size):
+ (JSC::RegisterFile::setNumGlobals):
+ (JSC::RegisterFile::numGlobals):
+ (JSC::RegisterFile::maxGlobals):
+ (JSC::RegisterFile::lastGlobal):
+ (JSC::RegisterFile::markGlobals):
+ (JSC::RegisterFile::markCallFrames):
+ (JSC::isPageAligned):
+ (JSC::RegisterFile::RegisterFile):
+ (JSC::RegisterFile::shrink):
+ (JSC::RegisterFile::grow):
+ * wtf/symbian/RegisterFileAllocatorSymbian.cpp: Added.
+ (WTF::RegisterFileAllocator::RegisterFileAllocator):
+ Helper class to allocate memory required by RegisterFile
+ more efficiently.
+ (WTF::RegisterFileAllocator::~RegisterFileAllocator):
+ (WTF::RegisterFileAllocator::buffer):
+ (WTF::RegisterFileAllocator::grow):
+ (WTF::RegisterFileAllocator::shrink):
+ * wtf/symbian/RegisterFileAllocatorSymbian.h: Added.
+ * wtf/symbian/SymbianDefines.h: Added.
+
2010-06-16 Thiago Macieira <thiago.macieira@nokia.com>
Reviewed by NOBODY (OOPS!).
diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
index 3f1ac86..a805170 100644
--- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
+++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
@@ -208,6 +208,7 @@ SOURCES += \
wtf/qt/ThreadingQt.cpp \
wtf/RandomNumber.cpp \
wtf/RefCountedLeakCounter.cpp \
+ wtf/symbian/RegisterFileAllocatorSymbian.cpp \
wtf/symbian/BlockAllocatorSymbian.cpp \
wtf/ThreadingNone.cpp \
wtf/Threading.cpp \
diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp
index 510effe..4a33c62 100644
--- a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.cpp
@@ -40,6 +40,8 @@ RegisterFile::~RegisterFile()
VirtualFree(m_buffer, DWORD(m_commitEnd) - DWORD(m_buffer), MEM_DECOMMIT);
#endif
VirtualFree(m_buffer, 0, MEM_RELEASE);
+#elif OS(SYMBIAN)
+ delete m_registerFileAllocator;
#else
fastFree(m_buffer);
#endif
diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h
index 1fc4f82..80cf991 100644
--- a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h
+++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h
@@ -41,6 +41,10 @@
#include <sys/mman.h>
#endif
+#if OS(SYMBIAN)
+#include <wtf/symbian/RegisterFileAllocatorSymbian.h>
+#endif
+
namespace JSC {
/*
@@ -152,12 +156,21 @@ namespace JSC {
#if HAVE(VIRTUALALLOC)
Register* m_commitEnd;
#endif
+#if OS(SYMBIAN)
+ // Commits and frees a continguous chunk of memory as required
+ WTF::RegisterFileAllocator* m_registerFileAllocator;
+#endif
JSGlobalObject* m_globalObject; // The global object whose vars are currently stored in the register file.
};
// FIXME: Add a generic getpagesize() to WTF, then move this function to WTF as well.
- inline bool isPageAligned(size_t size) { return size != 0 && size % (8 * 1024) == 0; }
+ // This is still a hack that should be fixed later. We know that a Symbian page size is 4K.
+ #if OS(SYMBIAN)
+ inline bool isPageAligned(size_t size) { return size && !(size % (4 * 1024)); }
+ #else
+ inline bool isPageAligned(size_t size) { return size && !(size % (8 * 1024)); }
+ #endif
inline RegisterFile::RegisterFile(size_t capacity, size_t maxGlobals)
: m_numGlobals(0)
@@ -204,7 +217,13 @@ namespace JSC {
CRASH();
}
m_commitEnd = reinterpret_cast<Register*>(reinterpret_cast<char*>(m_buffer) + committedSize);
- #else
+ #elif OS(SYMBIAN)
+ m_registerFileAllocator = new WTF::RegisterFileAllocator(bufferLength);
+ m_buffer = (Register*)(m_registerFileAllocator->buffer());
+ // start by committing enough space to hold maxGlobals
+ void* newEnd = (void*)((int)m_buffer + (maxGlobals * sizeof(Register)));
+ m_registerFileAllocator->grow(newEnd);
+ #else
/*
* If neither MMAP nor VIRTUALALLOC are available - use fastMalloc instead.
*
@@ -226,8 +245,13 @@ namespace JSC {
if (newEnd >= m_end)
return;
m_end = newEnd;
- if (m_end == m_start && (m_maxUsed - m_start) > maxExcessCapacity)
+ if (m_end == m_start && (m_maxUsed - m_start) > maxExcessCapacity) {
+#if OS(SYMBIAN)
+ m_registerFileAllocator->shrink(newEnd);
+#endif
+
releaseExcessCapacity();
+ }
}
inline bool RegisterFile::grow(Register* newEnd)
@@ -252,6 +276,9 @@ namespace JSC {
m_commitEnd = reinterpret_cast<Register*>(reinterpret_cast<char*>(m_commitEnd) + size);
}
#endif
+#if OS(SYMBIAN)
+ m_registerFileAllocator->grow((void*)newEnd);
+#endif
if (newEnd > m_maxUsed)
m_maxUsed = newEnd;
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.cpp
new file mode 100644
index 0000000..baa7841
--- /dev/null
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.cpp
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#if OS(SYMBIAN)
+
+#include "RegisterFileAllocatorSymbian.h"
+
+namespace WTF {
+
+/** Efficiently allocates memory pools of size poolSize.
+ * Primarily designed for JSC RegisterFile's needs.
+ * Not thread-safe.
+ */
+RegisterFileAllocator::RegisterFileAllocator(TUint32 reservationSize, TUint32 poolSize) :
+ m_reserved(reservationSize), m_poolSize(poolSize)
+{
+ // Get system's page size value.
+ SYMBIAN_PAGESIZE(m_pageSize);
+
+ // We only accept multiples of system page size for both initial reservation
+ // and the alignment/pool size
+ m_reserved = SYMBIAN_ROUNDUPTOMULTIPLE(m_reserved, m_pageSize);
+ __ASSERT_ALWAYS(SYMBIAN_ROUNDUPTOMULTIPLE(m_poolSize, m_pageSize),
+ User::Panic(_L("RegisterFileAllocator1"), KErrArgument));
+
+ // Open a Symbian RChunk, and reserve requested virtual address range
+ // Any thread in this process can operate this RChunk due to EOwnerProcess access rights.
+ TInt ret = m_chunk.CreateDisconnectedLocal(0 , 0, (TInt)m_reserved , EOwnerProcess);
+ if (ret != KErrNone)
+ User::Panic(_L("RegisterFileAllocator2"), ret);
+
+ m_buffer = (void*)m_chunk.Base();
+ m_resEnd = (void*)(m_chunk.Base() + m_chunk.MaxSize());
+ m_comEnd = m_buffer;
+}
+
+RegisterFileAllocator::~RegisterFileAllocator()
+{
+ // release everything!
+ m_chunk.Decommit(0, m_chunk.MaxSize());
+ m_chunk.Close();
+}
+
+void* RegisterFileAllocator::buffer() const
+{
+ return m_buffer;
+}
+
+void RegisterFileAllocator::grow(void* newEnd)
+{
+ // trying to commit more memory than reserved!
+ if (newEnd > m_resEnd)
+ return;
+
+ if (newEnd > m_comEnd) {
+ TInt nBytes = (TInt)(newEnd) - (TInt)(m_comEnd);
+ nBytes = SYMBIAN_ROUNDUPTOMULTIPLE(nBytes, m_poolSize);
+ TInt offset = (TInt)m_comEnd - (TInt)m_buffer;
+
+ TInt ret = m_chunk.Commit(offset, nBytes);
+ if (ret == KErrNone)
+ m_comEnd = (void*)(m_chunk.Base() + m_chunk.Size());
+ }
+}
+
+void RegisterFileAllocator::shrink(void* newEnd)
+{
+ if (newEnd < m_comEnd) {
+ TInt nBytes = (TInt)newEnd - (TInt)m_comEnd;
+ if (nBytes >= m_poolSize) {
+ TInt offset = SYMBIAN_ROUNDUPTOMULTIPLE((TUint)newEnd, m_poolSize) - (TInt)m_buffer;
+ nBytes = (TInt)m_comEnd - offset - (TInt)m_buffer;
+ if (nBytes > 0) {
+ TInt ret = m_chunk.Decommit(offset, nBytes);
+ if (ret == KErrNone)
+ m_comEnd = (void*)(m_chunk.Base() + m_chunk.Size());
+ }
+ }
+ }
+}
+
+} // end of namespace
+
+#endif // SYMBIAN
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.h b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.h
new file mode 100644
index 0000000..4cfc8c5
--- /dev/null
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/RegisterFileAllocatorSymbian.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RegisterFileAllocatorSymbian_h
+#define RegisterFileAllocatorSymbian_h
+
+#include "SymbianDefines.h"
+
+namespace WTF {
+
+/**
+ * Allocates contiguous regions of size poolSize.
+ * poolSize must be a multiple of system page size (typically 4K on Symbian/ARM)
+ *
+ * @param reservationSize Virtual address range to be reserved upon creation of chunk (bytes).
+ * @param poolSize Size of a single allocation.
+ */
+class RegisterFileAllocator {
+
+public:
+ RegisterFileAllocator(
+ TUint32 reservationSize, TUint32 poolSize = SYMBIAN_REGFILEALLOC_DEFAULTPOOLSIZE);
+ ~RegisterFileAllocator();
+ void* buffer() const;
+ void grow(void* newEnd);
+ void shrink(void* newEnd);
+
+private:
+ RChunk m_chunk; // Symbian chunk that lets us reserve/commit/decommit
+
+ // all following values are in numbers of bytes
+ TInt m_pageSize; // cached value of system page size, typically 4K on Symbian
+ TUint32 m_reserved; // total number of reserved bytes in virtual memory
+ TUint32 m_poolSize; // size of one memory pool, set by default to 64K in wtf/symbian/SymbianDefines.h
+
+ void* m_buffer; // pointer to base of the chunk
+ void* m_comEnd; // pointer to end of currently committed memory
+ void* m_resEnd; // pointer to end of reserved memory
+
+};
+
+} // end of namespace
+
+#endif // RegisterFileAllocatorSymbian_h
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/SymbianDefines.h b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/SymbianDefines.h
new file mode 100644
index 0000000..43e22b3
--- /dev/null
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/symbian/SymbianDefines.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SymbianDefines_h
+#define SymbianDefines_h
+
+#include <e32cmn.h>
+#include <e32std.h>
+#include <hal.h>
+
+#define SYMBIAN_PAGESIZE(x) (HAL::Get(HALData::EMemoryPageSize, x));
+#define SYMBIAN_FREERAM(x) (HAL::Get(HALData::EMemoryRAMFree, x));
+#define SYMBIAN_ROUNDUPTOMULTIPLE(x, multipleof) ( (x + multipleof - 1) & ~(multipleof - 1) )
+
+#define SYMBIAN_REGFILEALLOC_DEFAULTPOOLSIZE 65536 // 64K
+
+#endif // SymbianDefines_h
diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
index f919bdf..a270d56 100644
--- a/src/3rdparty/webkit/VERSION
+++ b/src/3rdparty/webkit/VERSION
@@ -4,4 +4,4 @@ This is a snapshot of the Qt port of WebKit from
and has the sha1 checksum
- 715b53069911a31a559aa0b3d94ffc6a5ac20988
+ 6e15c3404d15a8ab72242152ec966e5e388161a2
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index 2d20cbd..ac698e3 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,34 @@
+2010-09-24 Romain Pokrzywka <romain@kdab.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the Wince build.
+
+ * WebCore.pro: Apply msvc flags to wince, too.
+
+2010-09-24 Anders Bakken <agbakken@gmail.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Enable building Qt/Webkit with debug symbols
+
+ With this patch one can configure with -webkit-debug to build Webkit
+ with debug symbols without having to manually edit WebCore.pro.
+
+ * WebCore.pro:
+
+2010-09-16 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Andreas Kling.
+
+ https://bugs.webkit.org/show_bug.cgi?id=45878
+
+ [Qt] Fixed incorrect Symbian scoping.
+
+ The missing install functionality is only true for mmp based systems.
+
+ * WebCore.pro: limit functionality to mmp systems.
+
2010-09-09 Kristian Amlie <kristian.amlie@nokia.com>
Reviewed by Andreas Kling.
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 5f688f3..981dba2 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -104,7 +104,7 @@ freebsd-*: DEFINES += HAVE_PTHREAD_NP_H
DEFINES += BUILD_WEBKIT
# Remove whole program optimizations due to miscompilations
-win32-msvc2005|win32-msvc2008:{
+win32-msvc2005|win32-msvc2008|wince*:{
QMAKE_CFLAGS_RELEASE -= -GL
QMAKE_CXXFLAGS_RELEASE -= -GL
}
@@ -2952,7 +2952,7 @@ HEADERS += $$WEBKIT_API_HEADERS
}
}
-CONFIG(QTDIR_build) {
+!CONFIG(webkit-debug):CONFIG(QTDIR_build) {
# Remove the following 2 lines if you want debug information in WebCore
CONFIG -= separate_debug_info
CONFIG += no_debug_info
diff --git a/src/3rdparty/webkit/WebKit.pri b/src/3rdparty/webkit/WebKit.pri
index a080c43..bb3fd71 100644
--- a/src/3rdparty/webkit/WebKit.pri
+++ b/src/3rdparty/webkit/WebKit.pri
@@ -79,5 +79,5 @@ contains(DEFINES, QT_NO_UITOOLS): CONFIG -= uitools
# Disable a few warnings on Windows. The warnings are also
# disabled in WebKitLibraries/win/tools/vsprops/common.vsprops
-win32-msvc*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996
+win32-msvc*|wince*: QMAKE_CXXFLAGS += -wd4291 -wd4344 -wd4396 -wd4503 -wd4800 -wd4819 -wd4996
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
index d0c047d..9b97c8b 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
@@ -1890,9 +1890,10 @@ InspectorController* QWebPagePrivate::inspectorController()
The loadStarted() signal is emitted when the page begins to load.The
loadProgress() signal, on the other hand, is emitted whenever an element
of the web page completes loading, such as an embedded image, a script,
- etc. Finally, the loadFinished() signal is emitted when the page has
- loaded completely. Its argument, either true or false, indicates whether
- or not the load operation succeeded.
+ etc. Finally, the loadFinished() signal is emitted when the page contents
+ are loaded completely, independent of script execution or page rendering.
+ Its argument, either true or false, indicates whether or not the load
+ operation succeeded.
\section1 Using QWebPage in a Widget-less Environment
@@ -3729,7 +3730,7 @@ quint64 QWebPage::bytesReceived() const
/*!
\fn void QWebPage::loadStarted()
- This signal is emitted when a new load of the page is started.
+ This signal is emitted when a page starts loading content.
\sa loadFinished()
*/
@@ -3748,7 +3749,8 @@ quint64 QWebPage::bytesReceived() const
/*!
\fn void QWebPage::loadFinished(bool ok)
- This signal is emitted when a load of the page is finished.
+ This signal is emitted when the page finishes loading content. This signal
+ is independant of script execution or page rendering.
\a ok will indicate whether the load was successful or any error occurred.
\sa loadStarted(), ErrorPageExtension
diff --git a/src/corelib/codecs/qtextcodec_symbian.cpp b/src/corelib/codecs/qtextcodec_symbian.cpp
index d59998f..9d7e856 100644
--- a/src/corelib/codecs/qtextcodec_symbian.cpp
+++ b/src/corelib/codecs/qtextcodec_symbian.cpp
@@ -122,8 +122,8 @@ static const QSymbianCodecInitData codecsData[] = {
{ /*271085624*/ 271085624, 114, "GB18030\0" },
{ /*536929574*/ 536929574, 38, "EUC-KR\0" },
{ /*536936703*/ 536936703, 0, "CP949\0" },
- { /*536936705*/ 536936705, 37, "ISO-2022-KR\0" },
- { /*536941517*/ 536941517, 36, "KS_C_5601-1987\0" }
+ { /*536936705*/ 536936705, 37, "ISO-2022-KR\0csISO2022KR\0" },
+ { /*536941517*/ 536941517, 36, "KS_C_5601-1987\0iso-ir-149\0KS_C_5601-1989\0KSC_5601\0Korean\0csKSC56011987\0" }
};
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index 728bdf9..b7d6034 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -36,21 +36,6 @@ symbian: {
# Workaroud for problems with paging this dll
MMP_RULES -= PAGED
MMP_RULES *= UNPAGED
-
- # Partial upgrade SIS file
- vendorinfo = \
- "; Localised Vendor name" \
- "%{\"Nokia, Qt\"}" \
- " " \
- "; Unique Vendor name" \
- ":\"Nokia, Qt\"" \
- " "
- pu_header = "; Partial upgrade package for testing QtCore changes without reinstalling everything" \
- "$${LITERAL_HASH}{\"Qt corelib\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
- partial_upgrade.pkg_prerules = pu_header vendorinfo
- partial_upgrade.sources = $$QMAKE_LIBDIR_QT/QtCore$${QT_LIBINFIX}.dll
- partial_upgrade.path = c:/sys/bin
- DEPLOYMENT = partial_upgrade $$DEPLOYMENT
}
neon {
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 260ed59..4800716 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -24,3 +24,6 @@ linux*:!static:!linux-armcc:!linux-gcce {
prog=$$quote(if (/program interpreter: (.*)]/) { print $1; })
DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\"
}
+
+# Compensate for lack of platform defines in Symbian3 and Symbian4
+symbian: DEFINES += SYMBIAN_VERSION_$$upper($$replace(SYMBIAN_VERSION,\\.,_))
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 401af85..3291fe7 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -86,7 +86,8 @@
# include "private/qcore_symbian_p.h"
_LIT(qt_S60Filter, "Series60v?.*.sis");
-_LIT(qt_S60SystemInstallDir, "z:\\system\\install\\");
+_LIT(qt_symbianFilter, "Symbianv*.sis");
+_LIT(qt_symbianSystemInstallDir, "z:\\system\\install\\");
#endif
QT_BEGIN_NAMESPACE
@@ -1813,12 +1814,12 @@ const QSysInfo::WinVersion QSysInfo::WindowsVersion = QSysInfo::windowsVersion()
#endif
#ifdef Q_OS_SYMBIAN
-static QSysInfo::S60Version cachedS60Version = QSysInfo::S60Version(-1);
+static QSysInfo::SymbianVersion cachedSymbianVersion = QSysInfo::SymbianVersion(-1);
-QSysInfo::S60Version QSysInfo::s60Version()
+QSysInfo::SymbianVersion QSysInfo::symbianVersion()
{
- if (cachedS60Version != -1)
- return cachedS60Version;
+ if (cachedSymbianVersion != -1)
+ return cachedSymbianVersion;
// Use pure Symbian code, because if done using QDir, there will be a call back
// to this method, resulting doing this expensive operation twice before the cache kicks in.
@@ -1826,7 +1827,22 @@ QSysInfo::S60Version QSysInfo::s60Version()
RFs rfs = qt_s60GetRFs();
TFindFile fileFinder(rfs);
CDir* contents;
- TInt err = fileFinder.FindWildByDir(qt_S60Filter, qt_S60SystemInstallDir, contents);
+
+ // Check for Symbian4
+ TInt err = fileFinder.FindWildByDir(qt_symbianFilter, qt_symbianSystemInstallDir, contents);
+ if (err == KErrNone) {
+ QScopedPointer<CDir> contentsDeleter(contents);
+ err = contents->Sort(EDescending|ESortByName);
+ if (err == KErrNone && contents->Count() > 0 && (*contents)[0].iName.Length() >= 9) {
+ TInt major = (*contents)[0].iName[8] - '0';
+ if (major == 4) {
+ return cachedSymbianVersion = SV_SF_4;
+ }
+ }
+ }
+
+ // Check for S60 and Symbian3 platforms, which use older .sis naming scheme
+ err = fileFinder.FindWildByDir(qt_S60Filter, qt_symbianSystemInstallDir, contents);
if (err == KErrNone) {
QScopedPointer<CDir> contentsDeleter(contents);
err = contents->Sort(EDescending|ESortByName);
@@ -1835,19 +1851,19 @@ QSysInfo::S60Version QSysInfo::s60Version()
TInt minor = (*contents)[0].iName[11] - '0';
if (major == 3) {
if (minor == 1) {
- return cachedS60Version = SV_S60_3_1;
+ return cachedSymbianVersion = SV_9_2;
} else if (minor == 2) {
- return cachedS60Version = SV_S60_3_2;
+ return cachedSymbianVersion = SV_9_3;
}
} else if (major == 5) {
if (minor == 0) {
- return cachedS60Version = SV_S60_5_0;
+ return cachedSymbianVersion = SV_9_4;
}
else if (minor == 1) {
- return cachedS60Version = SV_S60_5_1;
+ return cachedSymbianVersion = SV_SF_2;
}
else if (minor == 2) {
- return cachedS60Version = SV_S60_5_2;
+ return cachedSymbianVersion = SV_SF_3;
}
}
}
@@ -1855,33 +1871,40 @@ QSysInfo::S60Version QSysInfo::s60Version()
# ifdef Q_CC_NOKIAX86
// Some emulator environments may not contain the version specific .sis files, so
- // simply hardcode the version on those environments.
+ // simply hardcode the version on those environments. Note that can't use
+ // SYMBIAN_VERSION_* defines for S60 3.x/5.0 platforms, as they do not define them
+ // right anyway in case .sis files are not found.
# if defined(__SERIES60_31__)
- return cachedS60Version = SV_S60_3_1;
+ return cachedSymbianVersion = SV_9_2;
# elif defined(__S60_32__)
- return cachedS60Version = SV_S60_3_2;
+ return cachedSymbianVersion = SV_9_3;
# elif defined(__S60_50__)
- return cachedS60Version = SV_S60_5_0;
+ return cachedSymbianVersion = SV_9_4;
+# elif defined(SYMBIAN_VERSION_SYMBIAN3)
+ return cachedSymbianVersion = SV_SF_3;
+# elif defined(SYMBIAN_VERSION_SYMBIAN4)
+ return cachedSymbianVersion = SV_SF_4;
# endif
# endif
//If reaching here, it was not possible to determine the version
- return cachedS60Version = SV_S60_Unknown;
+ return cachedSymbianVersion = SV_Unknown;
}
-QSysInfo::SymbianVersion QSysInfo::symbianVersion()
+
+QSysInfo::S60Version QSysInfo::s60Version()
{
- switch (s60Version()) {
- case SV_S60_3_1:
- return SV_9_2;
- case SV_S60_3_2:
- return SV_9_3;
- case SV_S60_5_0:
- return SV_9_4;
- case SV_S60_5_1:
- return SV_SF_2;
- case SV_S60_5_2:
- return SV_SF_3;
+ switch (symbianVersion()) {
+ case SV_9_2:
+ return SV_S60_3_1;
+ case SV_9_3:
+ return SV_S60_3_2;
+ case SV_9_4:
+ return SV_S60_5_0;
+ case SV_SF_2:
+ return SV_S60_5_1;
+ case SV_SF_3:
+ return SV_S60_5_2;
default:
- return SV_Unknown;
+ return SV_S60_Unknown;
}
}
#endif // ifdef Q_OS_SYMBIAN
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 8f27b03..6ef15d4 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -44,11 +44,11 @@
#include <stddef.h>
-#define QT_VERSION_STR "4.7.0"
+#define QT_VERSION_STR "4.7.1"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x040700
+#define QT_VERSION 0x040701
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
@@ -1050,7 +1050,7 @@ redefine to built-in booleans to make autotests work properly */
#if defined(__i386__) || defined(_WIN32) || defined(_WIN32_WCE)
# if defined(Q_CC_GNU)
-#if !defined(Q_CC_INTEL) && ((100*(__GNUC__ - 0) + 10*(__GNUC_MINOR__ - 0) + __GNUC_PATCHLEVEL__) >= 332)
+#if ((100*(__GNUC__ - 0) + 10*(__GNUC_MINOR__ - 0) + __GNUC_PATCHLEVEL__) >= 332)
# define QT_FASTCALL __attribute__((regparm(3)))
#else
# define QT_FASTCALL
@@ -1515,7 +1515,7 @@ public:
#endif
#ifdef Q_OS_SYMBIAN
enum SymbianVersion {
- SV_Unknown = 0x0000,
+ SV_Unknown = 1000000, // Assume unknown is something newer than what is supported
//These are the Symbian Ltd versions 9.2-9.4
SV_9_2 = 10,
SV_9_3 = 20,
@@ -1529,7 +1529,7 @@ public:
static SymbianVersion symbianVersion();
enum S60Version {
SV_S60_None = 0,
- SV_S60_Unknown = 1,
+ SV_S60_Unknown = SV_Unknown,
SV_S60_3_1 = SV_9_2,
SV_S60_3_2 = SV_9_3,
SV_S60_5_0 = SV_9_4,
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index d1fab2d..6a3037d 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -176,7 +176,6 @@
*/
#include "qplatformdefs.h"
#include "qurl.h"
-#include "private/qunicodetables_p.h"
#include "qatomic.h"
#include "qbytearray.h"
#include "qdir.h"
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 512e193..d3f399b 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -2091,7 +2091,8 @@ QStringList QCoreApplication::arguments()
l1arg == "-stylesheet" ||
l1arg == "-widgetcount")
;
- else if (l1arg.startsWith("-style="))
+ else if (l1arg.startsWith("-style=") ||
+ l1arg.startsWith("-qmljsdebugger="))
;
else if (l1arg == "-style" ||
l1arg == "-session" ||
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 5cc6ae3..d8cc344 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -127,9 +127,9 @@ private:
* cannot change active objects that we do not own, but the active objects that Qt owns will use
* this as a base class with convenience functions.
*
- * Here is how it works: On every RunL, the deriving class should call okToRun(). This will allow
- * exactly one run of the active object, and mark it as such. If it is called again, it will return
- * false, and add the object to a queue so it can be run later.
+ * Here is how it works: On every RunL, the deriving class should call maybeQueueForLater().
+ * This will return whether the active object has been queued, or whether it should run immediately.
+ * Queued objects will run again after other events have been processed.
*
* The QCompleteDeferredAOs class is a special object that runs after all others, which will
* reactivate the objects that were previously not run.
@@ -149,7 +149,7 @@ QActiveObject::~QActiveObject()
m_dispatcher->removeDeferredActiveObject(this);
}
-bool QActiveObject::okToRun()
+bool QActiveObject::maybeQueueForLater()
{
Q_ASSERT(!m_hasRunAgain);
@@ -157,12 +157,12 @@ bool QActiveObject::okToRun()
// First occurrence of this event in this iteration.
m_hasAlreadyRun = true;
m_iterationCount = m_dispatcher->iterationCount();
- return true;
+ return false;
} else {
// The event has already occurred.
m_dispatcher->addDeferredActiveObject(this);
m_hasRunAgain = true;
- return false;
+ return true;
}
}
@@ -178,8 +178,7 @@ void QActiveObject::reactivateAndComplete()
}
QWakeUpActiveObject::QWakeUpActiveObject(QEventDispatcherSymbian *dispatcher)
- : CActive(WAKE_UP_PRIORITY),
- m_dispatcher(dispatcher)
+ : QActiveObject(WAKE_UP_PRIORITY, dispatcher)
{
CActiveScheduler::Add(this);
iStatus = KRequestPending;
@@ -201,6 +200,9 @@ void QWakeUpActiveObject::DoCancel()
void QWakeUpActiveObject::RunL()
{
+ if (maybeQueueForLater())
+ return;
+
iStatus = KRequestPending;
SetActive();
QT_TRYCATCH_LEAVING(m_dispatcher->wakeUpWasCalled());
@@ -270,7 +272,7 @@ void QTimerActiveObject::Run()
return;
}
- if (!okToRun())
+ if (maybeQueueForLater())
return;
if (m_timerInfo->interval > 0) {
@@ -630,7 +632,7 @@ void QSocketActiveObject::DoCancel()
void QSocketActiveObject::RunL()
{
- if (!okToRun())
+ if (maybeQueueForLater())
return;
QT_TRYCATCH_LEAVING(m_dispatcher->socketFired(this));
@@ -722,6 +724,7 @@ QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent)
m_interrupt(false),
m_wakeUpDone(0),
m_iterationCount(0),
+ m_insideTimerEvent(false),
m_noSocketEvents(false)
{
#ifdef QT_SYMBIAN_PRIORITY_DROP
@@ -772,6 +775,9 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
{
bool handledAnyEvent = false;
bool oldNoSocketEventsValue = m_noSocketEvents;
+ bool oldInsideTimerEventValue = m_insideTimerEvent;
+
+ m_insideTimerEvent = false;
QT_TRY {
Q_D(QAbstractEventDispatcher);
@@ -862,6 +868,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
}
m_noSocketEvents = oldNoSocketEventsValue;
+ m_insideTimerEvent = oldInsideTimerEventValue;
return handledAnyEvent;
}
@@ -882,10 +889,13 @@ void QEventDispatcherSymbian::timerFired(int timerId)
}
timerInfo->inTimerEvent = true;
+ bool oldInsideTimerEventValue = m_insideTimerEvent;
+ m_insideTimerEvent = true;
QTimerEvent event(timerInfo->timerId);
QCoreApplication::sendEvent(timerInfo->receiver, &event);
+ m_insideTimerEvent = oldInsideTimerEventValue;
timerInfo->inTimerEvent = false;
return;
@@ -1052,6 +1062,14 @@ void QEventDispatcherSymbian::registerTimer ( int timerId, int interval, QObject
m_timerList.insert(timerId, timer);
timer->timerAO->Start();
+
+ if (m_insideTimerEvent)
+ // If we are inside a timer event, we need to prevent event starvation
+ // by preventing newly created timers from running in the same event processing
+ // iteration. Do this by calling the maybeQueueForLater() function to "fake" that we have
+ // already run once. This will cause the next run to be added to the deferred
+ // queue instead.
+ timer->timerAO->maybeQueueForLater();
}
bool QEventDispatcherSymbian::unregisterTimer ( int timerId )
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index bc42753..1486db5 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -82,7 +82,7 @@ public:
QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher);
~QActiveObject();
- bool okToRun();
+ bool maybeQueueForLater();
void reactivateAndComplete();
@@ -95,7 +95,7 @@ private:
int m_iterationCount;
};
-class QWakeUpActiveObject : public CActive
+class QWakeUpActiveObject : public QActiveObject
{
public:
QWakeUpActiveObject(QEventDispatcherSymbian *dispatcher);
@@ -106,9 +106,6 @@ public:
protected:
void DoCancel();
void RunL();
-
-private:
- QEventDispatcherSymbian *m_dispatcher;
};
struct SymbianTimerInfo : public QSharedData
@@ -277,6 +274,7 @@ private:
QAtomicInt m_wakeUpDone;
unsigned char m_iterationCount;
+ bool m_insideTimerEvent;
bool m_noSocketEvents;
QList<QSocketActiveObject *> m_deferredSocketEvents;
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 2824e15..a7601b6 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -514,6 +514,8 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
d->terminated = false;
+ d->returnCode = 0;
+ d->exited = false;
pthread_attr_t attr;
pthread_attr_init(&attr);
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index 37d5b87..f0cbe8d 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -405,6 +405,8 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
d->terminated = false;
+ d->exited = false;
+ d->returnCode = 0;
/*
NOTE: we create the thread in the suspended state, set the
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 033da90..b0c784e 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -46,7 +46,6 @@
#include "qlist.h"
#include "qlocale.h"
#include "qlocale_p.h"
-#include "qunicodetables_p.h"
#include "qscopedpointer.h"
#include <qdatastream.h>
diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index ed0af4e..bb777cd 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -1630,21 +1630,4 @@ static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, in
}
}
-int QT_FASTCALL QUnicodeTables::script(unsigned int uc)
-{
- if (uc > 0xffff)
- return Common;
- int script = uc_scripts[uc >> 7];
- if (script < ScriptSentinel)
- return script;
- script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);
- script = uc_scripts[script + (uc & 0x7f)];
- return script;
-}
-
-Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)
-{
- return (QUnicodeTables::LineBreakClass) qGetProp(ucs4)->line_break_class;
-}
-
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 3521b31..5be885b 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -6941,6 +6941,27 @@ QString QString::multiArg(int numArgs, const QString **args) const
return result;
}
+static bool isStringRightToLeft(const ushort *p, const ushort *end)
+{
+ bool righttoleft = false;
+ while (p < end) {
+ switch(QChar::direction(*p))
+ {
+ case QChar::DirL:
+ goto end;
+ case QChar::DirR:
+ case QChar::DirAL:
+ righttoleft = true;
+ goto end;
+ default:
+ break;
+ }
+ ++p;
+ }
+ end:
+ return righttoleft;
+}
+
/*! \internal
*/
void QString::updateProperties() const
@@ -6957,31 +6978,13 @@ void QString::updateProperties() const
p++;
}
- d->righttoleft = isRightToLeft();
+ d->righttoleft = isStringRightToLeft(d->data, d->data + d->size);
d->clean = true;
}
bool QString::isRightToLeft() const
{
- ushort *p = d->data;
- const ushort * const end = p + d->size;
- bool righttoleft = false;
- while (p < end) {
- switch(QChar::direction(*p))
- {
- case QChar::DirL:
- goto end;
- case QChar::DirR:
- case QChar::DirAL:
- righttoleft = true;
- goto end;
- default:
- break;
- }
- ++p;
- }
- end:
- return righttoleft;
+ return isStringRightToLeft(d->data, d->data + d->size);
}
/*! \fn bool QString::isSimpleText() const
diff --git a/src/corelib/tools/qstringmatcher.cpp b/src/corelib/tools/qstringmatcher.cpp
index 80a8457..d445ed4 100644
--- a/src/corelib/tools/qstringmatcher.cpp
+++ b/src/corelib/tools/qstringmatcher.cpp
@@ -40,7 +40,6 @@
****************************************************************************/
#include "qstringmatcher.h"
-#include "qunicodetables_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp
index 9df31e5..68e72cc 100644
--- a/src/corelib/tools/qunicodetables.cpp
+++ b/src/corelib/tools/qunicodetables.cpp
@@ -4345,6 +4345,11 @@ Q_CORE_EXPORT const QUnicodeTables::Properties * QT_FASTCALL QUnicodeTables::pro
return uc_properties + index;
}
+Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)
+{
+ return (QUnicodeTables::LineBreakClass)qGetProp(ucs4)->line_break_class;
+}
+
static const ushort specialCaseMap[] = {
0x53, 0x73, 0x0,
0x53, 0x53, 0x0,
@@ -8561,7 +8566,7 @@ static const unsigned char uc_scripts[] = {
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Common, Common, Common, Common, Greek, Greek, Common, Common,
- Common, Common, Greek, Greek, Greek, Greek, Common, Common,
+ Common, Common, Greek, Greek, Greek, Greek, Common, Common,
/* U+0380-03ff at offset 640 */
Common, Common, Common, Common, Greek, Greek, Greek, Common,
@@ -8579,7 +8584,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic,
Coptic, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic, Coptic,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
+ Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
/* U+0480-04ff at offset 768 */
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Common,
@@ -8597,7 +8602,7 @@ static const unsigned char uc_scripts[] = {
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
- Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
+ Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
/* U+0500-057f at offset 896 */
Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic, Cyrillic,
@@ -8615,7 +8620,7 @@ static const unsigned char uc_scripts[] = {
Common, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
- Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
+ Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
/* U+0580-05ff at offset 1024 */
Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian, Armenian,
@@ -8633,7 +8638,7 @@ static const unsigned char uc_scripts[] = {
Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Hebrew,
Hebrew, Hebrew, Hebrew, Common, Common, Common, Common, Common,
Hebrew, Hebrew, Hebrew, Hebrew, Hebrew, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0600-067f at offset 1152 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -8651,7 +8656,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Inherited, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+0680-06ff at offset 1280 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -8669,7 +8674,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+0700-077f at offset 1408 */
Syriac, Syriac, Syriac, Syriac, Syriac, Syriac, Syriac, Syriac,
@@ -8687,7 +8692,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0780-07ff at offset 1536 */
Thaana, Thaana, Thaana, Thaana, Thaana, Thaana, Thaana, Thaana,
@@ -8705,7 +8710,7 @@ static const unsigned char uc_scripts[] = {
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
Nko, Nko, Nko, Nko, Nko, Nko, Nko, Nko,
- Nko, Nko, Nko, Common, Common, Common, Common, Common,
+ Nko, Nko, Nko, Common, Common, Common, Common, Common,
/* U+0900-097f at offset 1664 */
Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
@@ -8723,7 +8728,7 @@ static const unsigned char uc_scripts[] = {
Devanagari, Devanagari, Devanagari, Devanagari, Common, Common, Devanagari, Devanagari,
Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
+ Common, Common, Common, Devanagari, Devanagari, Devanagari, Devanagari, Devanagari,
/* U+0980-09ff at offset 1792 */
Common, Bengali, Bengali, Bengali, Common, Bengali, Bengali, Bengali,
@@ -8741,7 +8746,7 @@ static const unsigned char uc_scripts[] = {
Bengali, Bengali, Bengali, Bengali, Common, Common, Bengali, Bengali,
Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali,
Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali, Bengali,
- Bengali, Bengali, Bengali, Common, Common, Common, Common, Common,
+ Bengali, Bengali, Bengali, Common, Common, Common, Common, Common,
/* U+0a00-0a7f at offset 1920 */
Common, Gurmukhi, Gurmukhi, Gurmukhi, Common, Gurmukhi, Gurmukhi, Gurmukhi,
@@ -8759,7 +8764,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Gurmukhi, Gurmukhi,
Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi,
Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Gurmukhi, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0a80-0aff at offset 2048 */
Common, Gujarati, Gujarati, Gujarati, Common, Gujarati, Gujarati, Gujarati,
@@ -8777,7 +8782,7 @@ static const unsigned char uc_scripts[] = {
Gujarati, Gujarati, Gujarati, Gujarati, Common, Common, Gujarati, Gujarati,
Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati, Gujarati,
Common, Gujarati, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0b00-0b7f at offset 2176 */
Common, Oriya, Oriya, Oriya, Common, Oriya, Oriya, Oriya,
@@ -8795,7 +8800,7 @@ static const unsigned char uc_scripts[] = {
Oriya, Oriya, Common, Common, Common, Common, Oriya, Oriya,
Oriya, Oriya, Oriya, Oriya, Oriya, Oriya, Oriya, Oriya,
Oriya, Oriya, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0b80-0bff at offset 2304 */
Common, Common, Tamil, Tamil, Common, Tamil, Tamil, Tamil,
@@ -8813,7 +8818,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Tamil, Tamil,
Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil,
Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil, Tamil,
- Tamil, Tamil, Tamil, Common, Common, Common, Common, Common,
+ Tamil, Tamil, Tamil, Common, Common, Common, Common, Common,
/* U+0c00-0c7f at offset 2432 */
Common, Telugu, Telugu, Telugu, Common, Telugu, Telugu, Telugu,
@@ -8831,7 +8836,7 @@ static const unsigned char uc_scripts[] = {
Telugu, Telugu, Common, Common, Common, Common, Telugu, Telugu,
Telugu, Telugu, Telugu, Telugu, Telugu, Telugu, Telugu, Telugu,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0c80-0cff at offset 2560 */
Common, Common, Kannada, Kannada, Common, Kannada, Kannada, Kannada,
@@ -8849,7 +8854,7 @@ static const unsigned char uc_scripts[] = {
Kannada, Kannada, Kannada, Kannada, Common, Common, Kannada, Kannada,
Kannada, Kannada, Kannada, Kannada, Kannada, Kannada, Kannada, Kannada,
Common, Kannada, Kannada, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0d00-0d7f at offset 2688 */
Common, Common, Malayalam, Malayalam, Common, Malayalam, Malayalam, Malayalam,
@@ -8867,7 +8872,7 @@ static const unsigned char uc_scripts[] = {
Malayalam, Malayalam, Common, Common, Common, Common, Malayalam, Malayalam,
Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam, Malayalam,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0d80-0dff at offset 2816 */
Common, Common, Sinhala, Sinhala, Common, Sinhala, Sinhala, Sinhala,
@@ -8885,7 +8890,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Sinhala, Sinhala, Sinhala, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0e00-0e7f at offset 2944 */
Common, Thai, Thai, Thai, Thai, Thai, Thai, Thai,
@@ -8903,7 +8908,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0e80-0eff at offset 3072 */
Common, Lao, Lao, Common, Lao, Common, Common, Lao,
@@ -8921,7 +8926,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+0f00-0f7f at offset 3200 */
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
@@ -8939,7 +8944,7 @@ static const unsigned char uc_scripts[] = {
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
Tibetan, Tibetan, Tibetan, Common, Common, Common, Common, Common,
Common, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
- Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
+ Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
/* U+0f80-0fff at offset 3328 */
Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan, Tibetan,
@@ -8957,7 +8962,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1000-107f at offset 3456 */
Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar, Myanmar,
@@ -8975,7 +8980,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1080-10ff at offset 3584 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -8993,7 +8998,7 @@ static const unsigned char uc_scripts[] = {
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
- Georgian, Georgian, Georgian, Common, Georgian, Common, Common, Common,
+ Georgian, Georgian, Georgian, Common, Georgian, Common, Common, Common,
/* U+1100-117f at offset 3712 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9011,7 +9016,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
/* U+1180-11ff at offset 3840 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9029,7 +9034,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Common, Common, Common, Common, Common, Common,
+ Hangul, Hangul, Common, Common, Common, Common, Common, Common,
/* U+1680-16ff at offset 3968 */
Ogham, Ogham, Ogham, Ogham, Ogham, Ogham, Ogham, Ogham,
@@ -9047,7 +9052,7 @@ static const unsigned char uc_scripts[] = {
Runic, Runic, Runic, Runic, Runic, Runic, Runic, Runic,
Runic, Runic, Runic, Common, Common, Common, Runic, Runic,
Runic, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+1780-17ff at offset 4096 */
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
@@ -9065,7 +9070,7 @@ static const unsigned char uc_scripts[] = {
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Common, Common, Common, Common, Common, Common,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
- Khmer, Khmer, Common, Common, Common, Common, Common, Common,
+ Khmer, Khmer, Common, Common, Common, Common, Common, Common,
/* U+1980-19ff at offset 4224 */
NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue, NewTaiLue,
@@ -9083,7 +9088,7 @@ static const unsigned char uc_scripts[] = {
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
- Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
+ Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer, Khmer,
/* U+1d00-1d7f at offset 4352 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
@@ -9101,7 +9106,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Latin, Latin, Latin, Latin, Greek, Greek,
Greek, Greek, Greek, Latin, Latin, Latin, Latin, Latin,
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
- Cyrillic, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
+ Cyrillic, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
/* U+1d80-1dff at offset 4480 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Latin,
@@ -9119,7 +9124,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Inherited, Inherited,
+ Common, Common, Common, Common, Common, Common, Inherited, Inherited,
/* U+1f00-1f7f at offset 4608 */
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
@@ -9137,7 +9142,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Common, Common,
+ Greek, Greek, Greek, Greek, Greek, Greek, Common, Common,
/* U+1f80-1fff at offset 4736 */
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
@@ -9155,7 +9160,7 @@ static const unsigned char uc_scripts[] = {
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Greek, Greek, Greek, Greek, Greek, Greek, Greek, Greek,
Common, Common, Greek, Greek, Greek, Common, Greek, Greek,
- Greek, Greek, Greek, Greek, Greek, Greek, Greek, Common,
+ Greek, Greek, Greek, Greek, Greek, Greek, Greek, Common,
/* U+2000-207f at offset 4864 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9173,7 +9178,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Latin, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Latin,
+ Common, Common, Common, Common, Common, Common, Common, Latin,
/* U+2080-20ff at offset 4992 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9191,7 +9196,7 @@ static const unsigned char uc_scripts[] = {
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+2100-217f at offset 5120 */
Common, Common, Common, Common, Common, Common, Common, Common,
@@ -9209,7 +9214,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+2d00-2d7f at offset 5248 */
Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian, Georgian,
@@ -9227,7 +9232,7 @@ static const unsigned char uc_scripts[] = {
Tifinagh, Tifinagh, Tifinagh, Tifinagh, Tifinagh, Tifinagh, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Tifinagh,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+3000-307f at offset 5376 */
Common, Common, Common, Common, Common, Han, Common, Han,
@@ -9245,7 +9250,7 @@ static const unsigned char uc_scripts[] = {
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
- Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
+ Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
/* U+3080-30ff at offset 5504 */
Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana, Hiragana,
@@ -9263,7 +9268,7 @@ static const unsigned char uc_scripts[] = {
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
- Katakana, Katakana, Katakana, Common, Common, Katakana, Katakana, Katakana,
+ Katakana, Katakana, Katakana, Common, Common, Katakana, Katakana, Katakana,
/* U+3100-317f at offset 5632 */
Common, Common, Common, Common, Common, Bopomofo, Bopomofo, Bopomofo,
@@ -9281,7 +9286,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
/* U+3180-31ff at offset 5760 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9299,7 +9304,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
- Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
+ Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
/* U+3200-327f at offset 5888 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9317,7 +9322,7 @@ static const unsigned char uc_scripts[] = {
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
- Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Common, Common,
+ Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Common, Common,
/* U+d780-d7ff at offset 6016 */
Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul, Hangul,
@@ -9335,7 +9340,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common,
+ Common, Common, Common, Common, Common, Common, Common, Common,
/* U+fb00-fb7f at offset 6144 */
Latin, Latin, Latin, Latin, Latin, Latin, Latin, Common,
@@ -9353,7 +9358,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fb80-fbff at offset 6272 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9371,7 +9376,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fd00-fd7f at offset 6400 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9389,7 +9394,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fd80-fdff at offset 6528 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9407,7 +9412,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
/* U+fe00-fe7f at offset 6656 */
Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited, Inherited,
@@ -9425,7 +9430,7 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Arabic, Arabic, Arabic, Arabic, Arabic, Common, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
/* U+fe80-feff at offset 6784 */
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
@@ -9443,7 +9448,7 @@ static const unsigned char uc_scripts[] = {
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic, Arabic,
- Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
+ Arabic, Arabic, Arabic, Arabic, Arabic, Common, Common, Common,
/* U+ff80-ffff at offset 6912 */
Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana, Katakana,
@@ -9461,9 +9466,21 @@ static const unsigned char uc_scripts[] = {
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
Common, Common, Common, Common, Common, Common, Common, Common,
- Common, Common, Common, Common, Common, Common, Common, Common
+ Common, Common, Common, Common, Common, Common, Common, Common
};
} // namespace QUnicodeTables
+Q_CORE_EXPORT int QT_FASTCALL QUnicodeTables::script(uint ucs4)
+{
+ if (ucs4 > 0xffff)
+ return Common;
+ int script = uc_scripts[ucs4 >> 7];
+ if (script < ScriptSentinel)
+ return script;
+ script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);
+ script = uc_scripts[script + (ucs4 & 0x7f)];
+ return script;
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h
index 5c7cc08..be52bf9 100644
--- a/src/corelib/tools/qunicodetables_p.h
+++ b/src/corelib/tools/qunicodetables_p.h
@@ -162,20 +162,6 @@ namespace QUnicodeTables {
enum { ScriptSentinel = 32 };
- // see http://www.unicode.org/reports/tr14/tr14-19.html
- // we don't use the XX, AI and CB properties and map them to AL instead.
- // as we don't support any EBDIC based OS'es, NL is ignored and mapped to AL as well.
- enum LineBreakClass {
- LineBreak_OP, LineBreak_CL, LineBreak_QU, LineBreak_GL, LineBreak_NS,
- LineBreak_EX, LineBreak_SY, LineBreak_IS, LineBreak_PR, LineBreak_PO,
- LineBreak_NU, LineBreak_AL, LineBreak_ID, LineBreak_IN, LineBreak_HY,
- LineBreak_BA, LineBreak_BB, LineBreak_B2, LineBreak_ZW, LineBreak_CM,
- LineBreak_WJ, LineBreak_H2, LineBreak_H3, LineBreak_JL, LineBreak_JV,
- LineBreak_JT, LineBreak_SA, LineBreak_SG,
- LineBreak_SP, LineBreak_CR, LineBreak_LF, LineBreak_BK
- };
-
-
enum GraphemeBreak {
GraphemeBreakOther,
GraphemeBreakCR,
@@ -217,6 +203,20 @@ namespace QUnicodeTables {
};
+ // see http://www.unicode.org/reports/tr14/tr14-19.html
+ // we don't use the XX, AI and CB properties and map them to AL instead.
+ // as we don't support any EBDIC based OS'es, NL is ignored and mapped to AL as well.
+ enum LineBreakClass {
+ LineBreak_OP, LineBreak_CL, LineBreak_QU, LineBreak_GL, LineBreak_NS,
+ LineBreak_EX, LineBreak_SY, LineBreak_IS, LineBreak_PR, LineBreak_PO,
+ LineBreak_NU, LineBreak_AL, LineBreak_ID, LineBreak_IN, LineBreak_HY,
+ LineBreak_BA, LineBreak_BB, LineBreak_B2, LineBreak_ZW, LineBreak_CM,
+ LineBreak_WJ, LineBreak_H2, LineBreak_H3, LineBreak_JL, LineBreak_JV,
+ LineBreak_JT, LineBreak_SA, LineBreak_SG,
+ LineBreak_SP, LineBreak_CR, LineBreak_LF, LineBreak_BK
+ };
+
+
Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4);
inline int lineBreakClass(const QChar &ch)
{ return lineBreakClass(ch.unicode()); }
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index 81af2c7..1bd00da 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -160,6 +160,9 @@ public:
struct WatchedServiceData {
WatchedServiceData() : refcount(0) {}
+ WatchedServiceData(const QString &owner, int refcount = 0)
+ : owner(owner), refcount(refcount)
+ {}
QString owner;
int refcount;
};
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 3833874..31588e7 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -71,6 +71,17 @@ QT_BEGIN_NAMESPACE
static bool isDebugging;
#define qDBusDebug if (!::isDebugging); else qDebug
+Q_GLOBAL_STATIC_WITH_ARGS(const QString, orgFreedesktopDBusString, (QLatin1String(DBUS_SERVICE_DBUS)))
+
+static inline QString dbusServiceString()
+{ return *orgFreedesktopDBusString(); }
+static inline QString dbusInterfaceString()
+{
+ // it's the same string, but just be sure
+ Q_ASSERT(*orgFreedesktopDBusString() == QLatin1String(DBUS_INTERFACE_DBUS));
+ return *orgFreedesktopDBusString();
+}
+
static inline QDebug operator<<(QDebug dbg, const QThread *th)
{
dbg.nospace() << "QThread(ptr=" << (void*)th;
@@ -962,6 +973,14 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
QDBusMetaTypeId::init();
rootNode.flags = 0;
+
+ // prepopulate watchedServices:
+ // we know that the owner of org.freedesktop.DBus is itself
+ watchedServices.insert(dbusServiceString(), WatchedServiceData(dbusServiceString(), 1));
+
+ // prepopulate matchRefCounts:
+ // we know that org.freedesktop.DBus will never change owners
+ matchRefCounts.insert("type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.DBus'", 1);
}
QDBusConnectionPrivate::~QDBusConnectionPrivate()
@@ -1646,43 +1665,34 @@ void QDBusConnectionPrivate::setConnection(DBusConnection *dbc, const QDBusError
connection = dbc;
mode = ClientMode;
+ const char *service = q_dbus_bus_get_unique_name(connection);
+ Q_ASSERT(service);
+ baseService = QString::fromUtf8(service);
+
q_dbus_connection_set_exit_on_disconnect(connection, false);
q_dbus_connection_set_watch_functions(connection, qDBusAddWatch, qDBusRemoveWatch,
qDBusToggleWatch, this, 0);
q_dbus_connection_set_timeout_functions(connection, qDBusAddTimeout, qDBusRemoveTimeout,
qDBusToggleTimeout, this, 0);
q_dbus_connection_set_dispatch_status_function(connection, qDBusUpdateDispatchStatus, this, 0);
+ q_dbus_connection_add_filter(connection, qDBusSignalFilter, this, 0);
- // Initialize the match rules
- // We want all messages that have us as destination
- // signals don't have destinations, but connectSignal() takes care of them
- const char *service = q_dbus_bus_get_unique_name(connection);
- if (service) {
- QVarLengthArray<char, 56> filter;
- filter.append("destination='", 13);
- filter.append(service, qstrlen(service));
- filter.append("\'\0", 2);
-
- QDBusErrorInternal error;
- q_dbus_bus_add_match(connection, filter.constData(), error);
- if (handleError(error)) {
- closeConnection();
- return;
- }
-
- baseService = QString::fromUtf8(service);
- } else {
- qWarning("QDBusConnectionPrivate::setConnection: Unable to get base service");
- }
-
- QString busService = QLatin1String(DBUS_SERVICE_DBUS);
- connectSignal(busService, QString(), QString(), QLatin1String("NameAcquired"), QStringList(), QString(),
- this, SLOT(registerService(QString)));
- connectSignal(busService, QString(), QString(), QLatin1String("NameLost"), QStringList(), QString(),
- this, SLOT(unregisterService(QString)));
+ // Initialize the hooks for the NameAcquired and NameLost signals
+ // we don't use connectSignal here because we don't need the rules to be sent to the bus
+ // the bus will always send us these two signals
+ SignalHook hook;
+ hook.service = dbusServiceString();
+ hook.path.clear(); // no matching
+ hook.obj = this;
+ hook.params << QMetaType::Void << QVariant::String; // both functions take a QString as parameter and return void
+ hook.midx = staticMetaObject.indexOfSlot("registerService(QString)");
+ Q_ASSERT(hook.midx != -1);
+ signalHooks.insert(QLatin1String("NameAcquired:" DBUS_INTERFACE_DBUS), hook);
- q_dbus_connection_add_filter(connection, qDBusSignalFilter, this, 0);
+ hook.midx = staticMetaObject.indexOfSlot("unregisterService(QString)");
+ Q_ASSERT(hook.midx != -1);
+ signalHooks.insert(QLatin1String("NameLost:" DBUS_INTERFACE_DBUS), hook);
qDBusDebug() << this << ": connected successfully";
@@ -2069,8 +2079,7 @@ void QDBusConnectionPrivate::connectSignal(const QString &key, const SignalHook
WatchedServicesHash::mapped_type &data = watchedServices[hook.service];
if (++data.refcount == 1) {
// we need to watch for this service changing
- QString dbusServerService = QLatin1String(DBUS_SERVICE_DBUS);
- connectSignal(dbusServerService, QString(), QLatin1String(DBUS_INTERFACE_DBUS),
+ connectSignal(dbusServiceString(), QString(), dbusInterfaceString(),
QLatin1String("NameOwnerChanged"), QStringList() << hook.service, QString(),
this, SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
data.owner = getNameOwnerNoCache(hook.service);
@@ -2149,8 +2158,7 @@ QDBusConnectionPrivate::disconnectSignal(SignalHookHash::Iterator &it)
if (sit != watchedServices.end()) {
if (--sit.value().refcount == 0) {
watchedServices.erase(sit);
- QString dbusServerService = QLatin1String(DBUS_SERVICE_DBUS);
- disconnectSignal(dbusServerService, QString(), QLatin1String(DBUS_INTERFACE_DBUS),
+ disconnectSignal(dbusServiceString(), QString(), dbusInterfaceString(),
QLatin1String("NameOwnerChanged"), QStringList() << hook.service, QString(),
this, SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
}
@@ -2272,8 +2280,8 @@ QString QDBusConnectionPrivate::getNameOwner(const QString& serviceName)
QString QDBusConnectionPrivate::getNameOwnerNoCache(const QString &serviceName)
{
- QDBusMessage msg = QDBusMessage::createMethodCall(QLatin1String(DBUS_SERVICE_DBUS),
- QLatin1String(DBUS_PATH_DBUS), QLatin1String(DBUS_INTERFACE_DBUS),
+ QDBusMessage msg = QDBusMessage::createMethodCall(dbusServiceString(),
+ QLatin1String(DBUS_PATH_DBUS), dbusInterfaceString(),
QLatin1String("GetNameOwner"));
QDBusMessagePrivate::setParametersValidated(msg, true);
msg << serviceName;
diff --git a/src/declarative/debugger/debugger.pri b/src/declarative/debugger/debugger.pri
index 33d0843..25f7687 100644
--- a/src/declarative/debugger/debugger.pri
+++ b/src/declarative/debugger/debugger.pri
@@ -6,7 +6,8 @@ SOURCES += \
$$PWD/qdeclarativedebugservice.cpp \
$$PWD/qdeclarativedebugclient.cpp \
$$PWD/qdeclarativedebug.cpp \
- $$PWD/qdeclarativedebugtrace.cpp
+ $$PWD/qdeclarativedebugtrace.cpp \
+ $$PWD/qdeclarativedebughelper.cpp
HEADERS += \
$$PWD/qdeclarativedebuggerstatus_p.h \
@@ -14,4 +15,5 @@ HEADERS += \
$$PWD/qdeclarativedebugservice_p.h \
$$PWD/qdeclarativedebugclient_p.h \
$$PWD/qdeclarativedebug_p.h \
- $$PWD/qdeclarativedebugtrace_p.h
+ $$PWD/qdeclarativedebugtrace_p.h \
+ $$PWD/qdeclarativedebughelper_p.h
diff --git a/src/declarative/debugger/qdeclarativedebug_p.h b/src/declarative/debugger/qdeclarativedebug_p.h
index f0fc488..2b1a115 100644
--- a/src/declarative/debugger/qdeclarativedebug_p.h
+++ b/src/declarative/debugger/qdeclarativedebug_p.h
@@ -365,7 +365,6 @@ private:
int m_queryId;
QVariant m_expr;
QVariant m_result;
-
};
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebughelper.cpp b/src/declarative/debugger/qdeclarativedebughelper.cpp
new file mode 100644
index 0000000..207ad2b
--- /dev/null
+++ b/src/declarative/debugger/qdeclarativedebughelper.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** 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 <QtScript/QScriptEngine>
+
+#include "private/qdeclarativedebughelper_p.h"
+
+#include <QtCore/QAbstractAnimation>
+#include <QtScript/QScriptEngine>
+
+#include <private/qdeclarativeengine_p.h>
+#include <private/qabstractanimation_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QScriptEngine *QDeclarativeDebugHelper::getScriptEngine(QDeclarativeEngine *engine)
+{
+ return QDeclarativeEnginePrivate::getScriptEngine(engine);
+}
+
+void QDeclarativeDebugHelper::setAnimationSlowDownFactor(qreal factor)
+{
+ QUnifiedTimer *timer = QUnifiedTimer::instance();
+ timer->setSlowModeEnabled(factor != 1.0);
+ timer->setSlowdownFactor(factor);
+}
+
+QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeclassfactory_p.h b/src/declarative/debugger/qdeclarativedebughelper_p.h
index 9f4a3de..c9cb839 100644
--- a/src/declarative/qml/qdeclarativeclassfactory_p.h
+++ b/src/declarative/debugger/qdeclarativedebughelper_p.h
@@ -39,36 +39,29 @@
**
****************************************************************************/
-#ifndef QDECLARATIVECLASSFACTORY_P_H
-#define QDECLARATIVECLASSFACTORY_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
+#ifndef QDECLARATIVEDEBUGHELPER_P_H
+#define QDECLARATIVEDEBUGHELPER_P_H
#include <QtCore/qglobal.h>
+QT_BEGIN_HEADER
+
QT_BEGIN_NAMESPACE
+class QScriptEngine;
class QDeclarativeEngine;
-class QByteArray;
-class QUrl;
-class QDeclarativeComponent;
-class QDeclarativeClassFactory
+// Helper methods to access private API through a stable interface
+// This is used in the qmljsdebugger library of QtCreator.
+class Q_DECLARATIVE_EXPORT QDeclarativeDebugHelper
{
public:
- virtual ~QDeclarativeClassFactory();
- virtual QDeclarativeComponent *create(const QByteArray &, const QUrl& baseUrl, QDeclarativeEngine*) = 0;
+ static QScriptEngine *getScriptEngine(QDeclarativeEngine *engine);
+ static void setAnimationSlowDownFactor(qreal factor);
};
QT_END_NAMESPACE
-#endif // QDECLARATIVECLASSFACTORY_P_H
+QT_END_HEADER
+
+#endif // QDECLARATIVEDEBUGHELPER_P_H
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index 1bbfcf4..1f2bf4f 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -49,6 +49,8 @@
#include <QtCore/qstringlist.h>
#include <private/qobject_p.h>
+#include <private/qapplication_p.h>
+#include <QtGui/qapplication.h>
QT_BEGIN_NAMESPACE
@@ -147,24 +149,41 @@ bool QDeclarativeDebugServer::hasDebuggingClient() const
QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
{
- static bool envTested = false;
+ static bool commandLineTested = false;
static QDeclarativeDebugServer *server = 0;
- if (!envTested) {
- envTested = true;
- QByteArray env = qgetenv("QML_DEBUG_SERVER_PORT");
- QByteArray block = qgetenv("QML_DEBUG_SERVER_BLOCK");
+ if (!commandLineTested) {
+ commandLineTested = true;
+#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL
+ QApplicationPrivate *appD = static_cast<QApplicationPrivate*>(QObjectPrivate::get(qApp));
+ // ### remove port definition when protocol is changed
+ int port = 0;
+ bool block = false;
bool ok = false;
- int port = env.toInt(&ok);
- if (ok && port > 1024) {
- server = new QDeclarativeDebugServer(port);
- server->listen();
- if (!block.isEmpty()) {
- server->waitForConnection();
+ // format: qmljsdebugger=port:3768[,block]
+ if (!appD->qmljsDebugArguments.isEmpty()) {
+
+ if (appD->qmljsDebugArguments.indexOf(QLatin1String("port:")) == 0) {
+ int separatorIndex = appD->qmljsDebugArguments.indexOf(QLatin1Char(','));
+ port = appD->qmljsDebugArguments.mid(5, separatorIndex - 5).toInt(&ok);
+ }
+ block = appD->qmljsDebugArguments.contains(QLatin1String("block"));
+
+ if (ok) {
+ server = new QDeclarativeDebugServer(port);
+ server->listen();
+ if (block) {
+ server->waitForConnection();
+ }
+ } else {
+ qWarning(QString("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
+ "Format is -qmljsdebugger=port:<port>[,block]").arg(
+ appD->qmljsDebugArguments).toAscii().constData());
}
}
+#endif
}
return server;
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index dad547f..d134929 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -141,11 +141,13 @@ void QDeclarativePathViewPrivate::releaseItem(QDeclarativeItem *item)
{
if (!item || !model)
return;
- if (QDeclarativePathViewAttached *att = attached(item))
- att->setOnPath(false);
QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
itemPrivate->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- model->release(item);
+ if (model->release(item) == 0) {
+ // item was not destroyed, and we no longer reference it.
+ if (QDeclarativePathViewAttached *att = attached(item))
+ att->setOnPath(false);
+ }
}
QDeclarativePathViewAttached *QDeclarativePathViewPrivate::attached(QDeclarativeItem *item)
@@ -1033,103 +1035,138 @@ QPointF QDeclarativePathViewPrivate::pointNear(const QPointF &point, qreal *near
return nearPoint;
}
-
void QDeclarativePathView::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- if (!d->interactive || !d->items.count())
+ if (d->interactive) {
+ d->handleMousePressEvent(event);
+ event->accept();
+ } else {
+ QDeclarativeItem::mousePressEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_Q(QDeclarativePathView);
+ if (!interactive || !items.count())
return;
- QPointF scenePoint = mapToScene(event->pos());
+ QPointF scenePoint = q->mapToScene(event->pos());
int idx = 0;
- for (; idx < d->items.count(); ++idx) {
- QRectF rect = d->items.at(idx)->boundingRect();
- rect = d->items.at(idx)->mapToScene(rect).boundingRect();
+ for (; idx < items.count(); ++idx) {
+ QRectF rect = items.at(idx)->boundingRect();
+ rect = items.at(idx)->mapToScene(rect).boundingRect();
if (rect.contains(scenePoint))
break;
}
- if (idx == d->items.count() && d->dragMargin == 0.) // didn't click on an item
+ if (idx == items.count() && dragMargin == 0.) // didn't click on an item
return;
- d->startPoint = d->pointNear(event->pos(), &d->startPc);
- if (idx == d->items.count()) {
- qreal distance = qAbs(event->pos().x() - d->startPoint.x()) + qAbs(event->pos().y() - d->startPoint.y());
- if (distance > d->dragMargin)
+ startPoint = pointNear(event->pos(), &startPc);
+ if (idx == items.count()) {
+ qreal distance = qAbs(event->pos().x() - startPoint.x()) + qAbs(event->pos().y() - startPoint.y());
+ if (distance > dragMargin)
return;
}
- if (d->tl.isActive() && d->flicking)
- d->stealMouse = true; // If we've been flicked then steal the click.
+ if (tl.isActive() && flicking)
+ stealMouse = true; // If we've been flicked then steal the click.
else
- d->stealMouse = false;
+ stealMouse = false;
- d->lastElapsed = 0;
- d->lastDist = 0;
- QDeclarativeItemPrivate::start(d->lastPosTime);
- d->tl.clear();
+ lastElapsed = 0;
+ lastDist = 0;
+ QDeclarativeItemPrivate::start(lastPosTime);
+ tl.clear();
}
void QDeclarativePathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- if (!d->interactive || !d->lastPosTime.isValid())
+ if (d->interactive) {
+ d->handleMouseMoveEvent(event);
+ if (d->stealMouse)
+ setKeepMouseGrab(true);
+ event->accept();
+ } else {
+ QDeclarativeItem::mouseMoveEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+ Q_Q(QDeclarativePathView);
+ if (!interactive || !lastPosTime.isValid())
return;
- if (!d->stealMouse) {
- QPointF delta = event->pos() - d->startPoint;
+ if (!stealMouse) {
+ QPointF delta = event->pos() - startPoint;
if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance())
- d->stealMouse = true;
+ stealMouse = true;
}
- if (d->stealMouse) {
- d->moveReason = QDeclarativePathViewPrivate::Mouse;
+ if (stealMouse) {
+ moveReason = QDeclarativePathViewPrivate::Mouse;
qreal newPc;
- d->pointNear(event->pos(), &newPc);
- qreal diff = (newPc - d->startPc)*d->modelCount*d->mappedRange;
+ pointNear(event->pos(), &newPc);
+ qreal diff = (newPc - startPc)*modelCount*mappedRange;
if (diff) {
- setOffset(d->offset + diff);
+ setOffset(offset + diff);
- if (diff > d->modelCount/2)
- diff -= d->modelCount;
- else if (diff < -d->modelCount/2)
- diff += d->modelCount;
+ if (diff > modelCount/2)
+ diff -= modelCount;
+ else if (diff < -modelCount/2)
+ diff += modelCount;
- d->lastElapsed = QDeclarativeItemPrivate::restart(d->lastPosTime);
- d->lastDist = diff;
- d->startPc = newPc;
+ lastElapsed = QDeclarativeItemPrivate::restart(lastPosTime);
+ lastDist = diff;
+ startPc = newPc;
}
- if (!d->moving) {
- d->moving = true;
- emit movingChanged();
- emit movementStarted();
+ if (!moving) {
+ moving = true;
+ emit q->movingChanged();
+ emit q->movementStarted();
}
}
}
-void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *)
+void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativePathView);
- d->stealMouse = false;
- setKeepMouseGrab(false);
- if (!d->interactive || !d->lastPosTime.isValid())
+ if (d->interactive) {
+ d->handleMouseReleaseEvent(event);
+ event->accept();
+ ungrabMouse();
+ } else {
+ QDeclarativeItem::mouseReleaseEvent(event);
+ }
+}
+
+void QDeclarativePathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *)
+{
+ Q_Q(QDeclarativePathView);
+ stealMouse = false;
+ q->setKeepMouseGrab(false);
+ if (!interactive || !lastPosTime.isValid())
return;
- qreal elapsed = qreal(d->lastElapsed + QDeclarativeItemPrivate::elapsed(d->lastPosTime)) / 1000.;
- qreal velocity = elapsed > 0. ? d->lastDist / elapsed : 0;
- if (d->model && d->modelCount && qAbs(velocity) > 1.) {
- qreal count = d->pathItems == -1 ? d->modelCount : d->pathItems;
+ qreal elapsed = qreal(lastElapsed + QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.;
+ qreal velocity = elapsed > 0. ? lastDist / elapsed : 0;
+ if (model && modelCount && qAbs(velocity) > 1.) {
+ qreal count = pathItems == -1 ? modelCount : pathItems;
if (qAbs(velocity) > count * 2) // limit velocity
velocity = (velocity > 0 ? count : -count) * 2;
// Calculate the distance to be travelled
qreal v2 = velocity*velocity;
- qreal accel = d->deceleration/10;
+ qreal accel = deceleration/10;
// + 0.25 to encourage moving at least one item in the flick direction
- qreal dist = qMin(qreal(d->modelCount-1), qreal(v2 / (accel * 2.0) + 0.25));
- if (d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) {
+ qreal dist = qMin(qreal(modelCount-1), qreal(v2 / (accel * 2.0) + 0.25));
+ if (haveHighlightRange && highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange) {
// round to nearest item.
if (velocity > 0.)
- dist = qRound(dist + d->offset) - d->offset;
+ dist = qRound(dist + offset) - offset;
else
- dist = qRound(dist - d->offset) + d->offset;
+ dist = qRound(dist - offset) + offset;
// Calculate accel required to stop on item boundary
if (dist <= 0.) {
dist = 0.;
@@ -1138,23 +1175,22 @@ void QDeclarativePathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *)
accel = v2 / (2.0f * qAbs(dist));
}
}
- d->offsetAdj = 0.0;
- d->moveOffset.setValue(d->offset);
- d->tl.accel(d->moveOffset, velocity, accel, dist);
- d->tl.callback(QDeclarativeTimeLineCallback(&d->moveOffset, d->fixOffsetCallback, d));
- if (!d->flicking) {
- d->flicking = true;
- emit flickingChanged();
- emit flickStarted();
+ offsetAdj = 0.0;
+ moveOffset.setValue(offset);
+ tl.accel(moveOffset, velocity, accel, dist);
+ tl.callback(QDeclarativeTimeLineCallback(&moveOffset, fixOffsetCallback, this));
+ if (!flicking) {
+ flicking = true;
+ emit q->flickingChanged();
+ emit q->flickStarted();
}
} else {
- d->fixOffset();
+ fixOffset();
}
- d->lastPosTime.invalidate();
- ungrabMouse();
- if (!d->tl.isActive())
- movementEnding();
+ lastPosTime.invalidate();
+ if (!tl.isActive())
+ q->movementEnding();
}
bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
@@ -1164,7 +1200,8 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
QGraphicsScene *s = scene();
QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- if ((d->stealMouse || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
+ bool stealThisEvent = d->stealMouse;
+ if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
mouseEvent.setAccepted(false);
for (int i = 0x1; i <= 0x10; i <<= 1) {
if (event->buttons() & i) {
@@ -1179,25 +1216,28 @@ bool QDeclarativePathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
switch(mouseEvent.type()) {
case QEvent::GraphicsSceneMouseMove:
- mouseMoveEvent(&mouseEvent);
+ d->handleMouseMoveEvent(&mouseEvent);
break;
case QEvent::GraphicsSceneMousePress:
- mousePressEvent(&mouseEvent);
+ d->handleMousePressEvent(&mouseEvent);
+ stealThisEvent = d->stealMouse; // Update stealThisEvent in case changed by function call above
break;
case QEvent::GraphicsSceneMouseRelease:
- mouseReleaseEvent(&mouseEvent);
+ d->handleMouseReleaseEvent(&mouseEvent);
break;
default:
break;
}
grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if (grabber && d->stealMouse && !grabber->keepMouseGrab() && grabber != this)
+ if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
grabMouse();
return d->stealMouse;
} else if (d->lastPosTime.isValid()) {
d->lastPosTime.invalidate();
}
+ if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease)
+ d->stealMouse = false;
return false;
}
@@ -1211,12 +1251,7 @@ bool QDeclarativePathView::sceneEventFilter(QGraphicsItem *i, QEvent *e)
case QEvent::GraphicsSceneMousePress:
case QEvent::GraphicsSceneMouseMove:
case QEvent::GraphicsSceneMouseRelease:
- {
- bool ret = sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- if (e->type() == QEvent::GraphicsSceneMouseRelease)
- return ret;
- break;
- }
+ return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
default:
break;
}
diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
index dfebe35..b217216 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepathview_p_p.h
@@ -123,6 +123,10 @@ public:
return model && model->count() > 0 && model->isValid() && path;
}
+ void handleMousePressEvent(QGraphicsSceneMouseEvent *event);
+ void handleMouseMoveEvent(QGraphicsSceneMouseEvent *event);
+ void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
+
int calcCurrentIndex();
void updateCurrent();
static void fixOffsetCallback(void*);
diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
index f9ecc0a..15b91e5 100644
--- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
@@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeBasePositionerPrivate;
-class Q_AUTOTEST_EXPORT QDeclarativeBasePositioner : public QDeclarativeItem
+class Q_DECLARATIVE_EXPORT QDeclarativeBasePositioner : public QDeclarativeItem
{
Q_OBJECT
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index a70886e..21d1ea7 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -621,7 +621,7 @@ QDeclarativeVisualDataModelParts::QDeclarativeVisualDataModelParts(QDeclarativeV
QDeclarativeVisualDataModelPrivate::QDeclarativeVisualDataModelPrivate(QDeclarativeContext *ctxt)
: m_listModelInterface(0), m_abstractItemModel(0), m_visualItemModel(0), m_delegate(0)
-, m_context(ctxt), m_parts(0), m_delegateDataType(0), m_metaDataCreated(false)
+, m_context(ctxt), m_modelDataPropId(-1), m_parts(0), m_delegateDataType(0), m_metaDataCreated(false)
, m_metaDataCacheable(false), m_delegateValidated(false), m_completePending(false), m_listAccessor(0)
{
}
@@ -1187,7 +1187,7 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
if (propId != -1) {
if (data->hasValue(propId)) {
if (d->m_listModelInterface) {
- data->setValue(propId, d->m_listModelInterface->data(idx, QList<int>() << role).value(role));
+ data->setValue(propId, d->m_listModelInterface->data(idx, role));
} else if (d->m_abstractItemModel) {
QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root);
data->setValue(propId, d->m_abstractItemModel->data(index, role));
@@ -1202,13 +1202,13 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count,
qmlInfo(this) << "Changing role not present in item: " << roleName;
}
}
- if (roles.count() == 1) {
+ if (d->m_roles.count() == 1) {
// Handle the modelData role we add if there is just one role.
int propId = data->modelDataPropertyId();
if (data->hasValue(propId)) {
- int role = roles.at(0);
+ int role = d->m_roles.at(0);
if (d->m_listModelInterface) {
- data->setValue(propId, d->m_listModelInterface->data(idx, QList<int>() << role).value(role));
+ data->setValue(propId, d->m_listModelInterface->data(idx, role));
} else if (d->m_abstractItemModel) {
QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root);
data->setValue(propId, d->m_abstractItemModel->data(index, role));
diff --git a/src/declarative/qml/qdeclarative.h b/src/declarative/qml/qdeclarative.h
index 985ab72..f0c62f4 100644
--- a/src/declarative/qml/qdeclarative.h
+++ b/src/declarative/qml/qdeclarative.h
@@ -119,7 +119,7 @@ int qmlRegisterType()
return QDeclarativePrivate::qmlregister(QDeclarativePrivate::TypeRegistration, &type);
}
-int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message);
+int Q_AUTOTEST_EXPORT qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message);
template<typename T>
int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& reason)
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 80db230..26b3629 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -1783,7 +1783,9 @@ void QDeclarativeEnginePrivate::warning(QDeclarativeEnginePrivate *engine, const
/*!
\qmlmethod Qt::quit()
This function causes the QDeclarativeEngine::quit() signal to be emitted.
-Within the \l {QML Viewer}, this causes the launcher application to exit.
+Within the \l {QML Viewer}, this causes the launcher application to exit;
+to quit a C++ application when this method is called, connect the
+QDeclarativeEngine::quit() signal to the QCoreApplication::quit() slot.
*/
QScriptValue QDeclarativeEnginePrivate::quit(QScriptContext * /*ctxt*/, QScriptEngine *e)
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index dc7315d..8539fbf 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -55,7 +55,6 @@
#include "qdeclarativeengine.h"
-#include "private/qdeclarativeclassfactory_p.h"
#include "private/qdeclarativetypeloader_p.h"
#include "private/qdeclarativeimport_p.h"
#include "private/qpodvector_p.h"
diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp
index 8f95e26..fe4ed48 100644
--- a/src/declarative/qml/qdeclarativeimport.cpp
+++ b/src/declarative/qml/qdeclarativeimport.cpp
@@ -876,6 +876,7 @@ void QDeclarativeImportDatabase::addImportPath(const QString& path)
cPath = dir.canonicalPath();
} else {
cPath = path;
+ cPath.replace(QLatin1Char('\\'), QLatin1Char('/'));
}
if (!cPath.isEmpty()
diff --git a/src/declarative/qml/qdeclarativetypenotavailable.cpp b/src/declarative/qml/qdeclarativetypenotavailable.cpp
index 7a84732..9b79d70 100644
--- a/src/declarative/qml/qdeclarativetypenotavailable.cpp
+++ b/src/declarative/qml/qdeclarativetypenotavailable.cpp
@@ -41,9 +41,13 @@
#include "qdeclarativetypenotavailable_p.h"
+QT_BEGIN_NAMESPACE
+
int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString& message)
{
return qmlRegisterUncreatableType<QDeclarativeTypeNotAvailable>(uri,versionMajor,versionMinor,qmlName,message);
}
QDeclarativeTypeNotAvailable::QDeclarativeTypeNotAvailable() { }
+
+QT_END_NAMESPACE
diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri
index 687ff52..66b69f9 100644
--- a/src/declarative/qml/qml.pri
+++ b/src/declarative/qml/qml.pri
@@ -22,7 +22,6 @@ SOURCES += \
$$PWD/qdeclarativerefcount.cpp \
$$PWD/qdeclarativemetatype.cpp \
$$PWD/qdeclarativestringconverters.cpp \
- $$PWD/qdeclarativeclassfactory.cpp \
$$PWD/qdeclarativeparserstatus.cpp \
$$PWD/qdeclarativetypeloader.cpp \
$$PWD/qdeclarativeinfo.cpp \
@@ -89,7 +88,6 @@ HEADERS += \
$$PWD/qdeclarativecontext.h \
$$PWD/qdeclarativeexpression.h \
$$PWD/qdeclarativestringconverters_p.h \
- $$PWD/qdeclarativeclassfactory_p.h \
$$PWD/qdeclarativeinfo.h \
$$PWD/qdeclarativeproperty_p.h \
$$PWD/qdeclarativecontext_p.h \
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index ea3da25..ba6f1e7 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -2192,6 +2192,13 @@ void QDeclarativePropertyAnimation::setProperties(const QString &prop)
The singular forms are slightly optimized, so if you do have only a single target/property
to animate you should try to use them.
+ The \c targets property allows multiple targets to be set. For example, this animates the
+ \c x property of both \c itemA and \c itemB:
+
+ \qml
+ NumberAnimation { targets: [itemA, itemB]; properties: "x"; to: 500 }
+ \endqml
+
In many cases these properties do not need to be explicitly specified, as they can be
inferred from the animation framework:
@@ -2255,7 +2262,7 @@ void QDeclarativePropertyAnimation::setProperties(const QString &prop)
As seen in the above example, properties is specified as a comma-separated string of property names to animate.
- \sa exclude
+ \sa exclude, {QML Animation}
*/
QDeclarativeListProperty<QObject> QDeclarativePropertyAnimation::targets()
{
diff --git a/src/declarative/util/qdeclarativeanimation_p.h b/src/declarative/util/qdeclarativeanimation_p.h
index cdd5041..8cb17e4 100644
--- a/src/declarative/util/qdeclarativeanimation_p.h
+++ b/src/declarative/util/qdeclarativeanimation_p.h
@@ -63,7 +63,7 @@ QT_MODULE(Declarative)
class QDeclarativeAbstractAnimationPrivate;
class QDeclarativeAnimationGroup;
-class Q_AUTOTEST_EXPORT QDeclarativeAbstractAnimation : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus
+class Q_DECLARATIVE_EXPORT QDeclarativeAbstractAnimation : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeAbstractAnimation)
diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp
index 91588b7..6879494 100644
--- a/src/declarative/util/qdeclarativefontloader.cpp
+++ b/src/declarative/util/qdeclarativefontloader.cpp
@@ -210,11 +210,7 @@ void QDeclarativeFontLoader::setSource(const QUrl &url)
updateFontInfo(QString(), Error);
}
} else {
- QDeclarativeFontObject *fo = d->fonts[d->url];
- d->name = QFontDatabase::applicationFontFamilies(fo->id).at(0);
- emit nameChanged();
- d->status = QDeclarativeFontLoader::Ready;
- emit statusChanged();
+ updateFontInfo(QFontDatabase::applicationFontFamilies(d->fonts[d->url]->id).at(0), Ready);
}
} else
#endif
diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp
index cf2eada..398480e 100644
--- a/src/declarative/util/qdeclarativelistmodel.cpp
+++ b/src/declarative/util/qdeclarativelistmodel.cpp
@@ -58,6 +58,28 @@ Q_DECLARE_METATYPE(QListModelInterface *)
QT_BEGIN_NAMESPACE
+template<typename T>
+void qdeclarativelistmodel_move(int from, int to, int n, T *items)
+{
+ if (n == 1) {
+ items->move(from, to);
+ } else {
+ T replaced;
+ int i=0;
+ typename T::ConstIterator it=items->begin(); it += from+n;
+ for (; i<to-from; ++i,++it)
+ replaced.append(*it);
+ i=0;
+ it=items->begin(); it += from;
+ for (; i<n; ++i,++it)
+ replaced.append(*it);
+ typename T::ConstIterator f=replaced.begin();
+ typename T::Iterator t=items->begin(); t += from;
+ for (; f != replaced.end(); ++f, ++t)
+ *t = *f;
+ }
+}
+
QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListModelData::instructions() const
{
return (QDeclarativeListModelParser::ListInstruction *)((char *)this + sizeof(ListModelData));
@@ -154,10 +176,10 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
handler. You must call sync() or else the changes made to the list from the external
thread will not be reflected in the list model in the main thread.
- \section1 Limitations
+ \section1 Restrictions
- If a list model is to be accessed from a WorkerScript, it \bold cannot
- contain list data. So, the following model cannot be used from a WorkerScript
+ If a list model is to be accessed from a WorkerScript, it cannot
+ contain list-type data. So, the following model cannot be used from a WorkerScript
because of the list contained in the "attributes" property:
\code
@@ -174,7 +196,7 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
}
\endcode
- In addition, the WorkerScript cannot add any list data to the model.
+ In addition, the WorkerScript cannot add list-type data to the model.
\sa {qmlmodels}{Data Models}, {declarative/threading/threadedlistmodel}{Threaded ListModel example}, QtDeclarative
*/
@@ -195,17 +217,25 @@ QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListM
*/
QDeclarativeListModel::QDeclarativeListModel(QObject *parent)
-: QListModelInterface(parent), m_agent(0), m_nested(new NestedListModel(this)), m_flat(0), m_isWorkerCopy(false)
+: QListModelInterface(parent), m_agent(0), m_nested(new NestedListModel(this)), m_flat(0)
{
}
-QDeclarativeListModel::QDeclarativeListModel(bool workerCopy, QObject *parent)
-: QListModelInterface(parent), m_agent(0), m_nested(0), m_flat(0), m_isWorkerCopy(workerCopy)
+QDeclarativeListModel::QDeclarativeListModel(const QDeclarativeListModel *orig, QDeclarativeListModelWorkerAgent *parent)
+: QListModelInterface(parent), m_agent(0), m_nested(0), m_flat(0)
{
- if (workerCopy)
- m_flat = new FlatListModel(this);
- else
- m_nested = new NestedListModel(this);
+ m_flat = new FlatListModel(this);
+ m_flat->m_parentAgent = parent;
+
+ if (orig->m_flat) {
+ m_flat->m_roles = orig->m_flat->m_roles;
+ m_flat->m_strings = orig->m_flat->m_strings;
+ m_flat->m_values = orig->m_flat->m_values;
+
+ m_flat->m_nodeData.reserve(m_flat->m_values.count());
+ for (int i=0; i<m_flat->m_values.count(); i++)
+ m_flat->m_nodeData << 0;
+ }
}
QDeclarativeListModel::~QDeclarativeListModel()
@@ -241,19 +271,28 @@ bool QDeclarativeListModel::flatten()
flat->m_strings.insert(s, roles[i]);
}
+ flat->m_nodeData.reserve(flat->m_values.count());
+ for (int i=0; i<flat->m_values.count(); i++)
+ flat->m_nodeData << 0;
+
m_flat = flat;
delete m_nested;
m_nested = 0;
return true;
}
+bool QDeclarativeListModel::inWorkerThread() const
+{
+ return m_flat && m_flat->m_parentAgent;
+}
+
QDeclarativeListModelWorkerAgent *QDeclarativeListModel::agent()
{
if (m_agent)
return m_agent;
if (!flatten()) {
- qmlInfo(this) << "List contains nested list values and cannot be used from a worker script";
+ qmlInfo(this) << "List contains list-type data and cannot be used from a worker script";
return 0;
}
@@ -271,14 +310,6 @@ QString QDeclarativeListModel::toString(int role) const
return m_flat ? m_flat->toString(role) : m_nested->toString(role);
}
-QHash<int,QVariant> QDeclarativeListModel::data(int index, const QList<int> &roles) const
-{
- if (index >= count() || index < 0)
- return QHash<int, QVariant>();
-
- return m_flat ? m_flat->data(index, roles) : m_nested->data(index, roles);
-}
-
QVariant QDeclarativeListModel::data(int index, int role) const
{
if (index >= count() || index < 0)
@@ -311,12 +342,43 @@ void QDeclarativeListModel::clear()
else
m_nested->clear();
- if (!m_isWorkerCopy) {
+ if (!inWorkerThread()) {
emit itemsRemoved(0, cleared);
emit countChanged();
}
}
+QDeclarativeListModel *ModelNode::model(const NestedListModel *model)
+{
+ if (!modelCache) {
+ modelCache = new QDeclarativeListModel;
+ QDeclarativeEngine::setContextForObject(modelCache,QDeclarativeEngine::contextForObject(model->m_listModel));
+ modelCache->m_nested->_root = this; // ListModel defaults to nestable model
+
+ for (int i=0; i<values.count(); ++i) {
+ ModelNode *subNode = qvariant_cast<ModelNode *>(values.at(i));
+ if (subNode)
+ subNode->m_model = modelCache->m_nested;
+ }
+ }
+ return modelCache;
+}
+
+ModelObject *ModelNode::object(const NestedListModel *model)
+{
+ if (!objectCache) {
+ objectCache = new ModelObject(this,
+ const_cast<NestedListModel*>(model),
+ QDeclarativeEnginePrivate::getScriptEngine(qmlEngine(model->m_listModel)));
+ QHash<QString, ModelNode *>::iterator it;
+ for (it = properties.begin(); it != properties.end(); ++it) {
+ objectCache->setValue(it.key().toUtf8(), model->valueForNode(*it));
+ }
+ objectCache->setNodeUpdatesEnabled(true);
+ }
+ return objectCache;
+}
+
/*!
\qmlmethod ListModel::remove(int index)
@@ -336,7 +398,7 @@ void QDeclarativeListModel::remove(int index)
else
m_nested->remove(index);
- if (!m_isWorkerCopy) {
+ if (!inWorkerThread()) {
emit itemsRemoved(index, 1);
emit countChanged();
}
@@ -370,7 +432,7 @@ void QDeclarativeListModel::insert(int index, const QScriptValue& valuemap)
}
bool ok = m_flat ? m_flat->insert(index, valuemap) : m_nested->insert(index, valuemap);
- if (ok && !m_isWorkerCopy) {
+ if (ok && !inWorkerThread()) {
emit itemsInserted(index, 1);
emit countChanged();
}
@@ -394,7 +456,7 @@ void QDeclarativeListModel::move(int from, int to, int n)
{
if (n==0 || from==to)
return;
- if (from+n > count() || to+n > count() || from < 0 || to < 0 || n < 0) {
+ if (!canMove(from, to, n)) {
qmlInfo(this) << tr("move: out of range");
return;
}
@@ -416,7 +478,7 @@ void QDeclarativeListModel::move(int from, int to, int n)
else
m_nested->move(from, to, n);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsMoved(origfrom, origto, orign);
}
@@ -445,11 +507,15 @@ void QDeclarativeListModel::append(const QScriptValue& valuemap)
/*!
\qmlmethod object ListModel::get(int index)
- Returns the item at \a index in the list model.
+ Returns the item at \a index in the list model. This allows the item
+ data to be accessed or modified from JavaScript:
\code
- fruitModel.append({"cost": 5.95, "name":"Jackfruit"})
- fruitModel.get(0).cost
+ Component.onCompleted: {
+ fruitModel.append({"cost": 5.95, "name":"Jackfruit"});
+ console.log(fruitModel.get(0).cost);
+ fruitModel.get(0).cost = 10.95;
+ }
\endcode
The \a index must be an element in the list.
@@ -464,6 +530,9 @@ void QDeclarativeListModel::append(const QScriptValue& valuemap)
fruitModel.get(0).attributes.get(1).value; // == "green"
\endcode
+ \warning The returned object is not guaranteed to remain valid. It
+ should not be used in \l{Property Binding}{property bindings}.
+
\sa append()
*/
QScriptValue QDeclarativeListModel::get(int index) const
@@ -483,7 +552,8 @@ QScriptValue QDeclarativeListModel::get(int index) const
fruitModel.set(3, {"cost": 5.95, "name":"Pizza"})
\endcode
- The \a index must be an element in the list.
+ If \a index is equal to count() then a new item is appended to the
+ list. Otherwise, \a index must be an element in the list.
\sa append()
*/
@@ -493,7 +563,7 @@ void QDeclarativeListModel::set(int index, const QScriptValue& valuemap)
qmlInfo(this) << tr("set: value is not an object");
return;
}
- if (count() == 0 || index > count() || index < 0) {
+ if (index > count() || index < 0) {
qmlInfo(this) << tr("set: index %1 out of range").arg(index);
return;
}
@@ -507,7 +577,7 @@ void QDeclarativeListModel::set(int index, const QScriptValue& valuemap)
else
m_nested->set(index, valuemap, &roles);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsChanged(index, 1, roles);
}
}
@@ -538,7 +608,7 @@ void QDeclarativeListModel::setProperty(int index, const QString& property, cons
else
m_nested->setProperty(index, property, value, &roles);
- if (!m_isWorkerCopy)
+ if (!inWorkerThread())
emit itemsChanged(index, 1, roles);
}
@@ -705,7 +775,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
{
QDeclarativeListModel *rv = static_cast<QDeclarativeListModel *>(obj);
- ModelNode *root = new ModelNode;
+ ModelNode *root = new ModelNode(rv->m_nested);
rv->m_nested->_root = root;
QStack<ModelNode *> nodes;
nodes << root;
@@ -722,7 +792,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
case ListInstruction::Push:
{
ModelNode *n = nodes.top();
- ModelNode *n2 = new ModelNode;
+ ModelNode *n2 = new ModelNode(rv->m_nested);
n->values << qVariantFromValue(n2);
nodes.push(n2);
if (processingSet)
@@ -761,7 +831,7 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
case ListInstruction::Set:
{
ModelNode *n = nodes.top();
- ModelNode *n2 = new ModelNode;
+ ModelNode *n2 = new ModelNode(rv->m_nested);
n->properties.insert(QString::fromUtf8(data + instr.dataIdx), n2);
nodes.push(n2);
processingSet = true;
@@ -769,6 +839,13 @@ void QDeclarativeListModelParser::setCustomData(QObject *obj, const QByteArray &
break;
}
}
+
+ ModelNode *rootNode = rv->m_nested->_root;
+ for (int i=0; i<rootNode->values.count(); ++i) {
+ ModelNode *node = qvariant_cast<ModelNode *>(rootNode->values[i]);
+ node->listIndex = i;
+ node->updateListIndexes();
+ }
}
bool QDeclarativeListModelParser::definesEmptyList(const QString &s)
@@ -783,6 +860,7 @@ bool QDeclarativeListModelParser::definesEmptyList(const QString &s)
return false;
}
+
/*!
\qmlclass ListElement QDeclarativeListElement
\ingroup qml-working-with-data
@@ -826,25 +904,13 @@ bool QDeclarativeListModelParser::definesEmptyList(const QString &s)
*/
FlatListModel::FlatListModel(QDeclarativeListModel *base)
- : m_scriptEngine(0), m_listModel(base)
+ : m_scriptEngine(0), m_listModel(base), m_scriptClass(0), m_parentAgent(0)
{
}
FlatListModel::~FlatListModel()
{
-}
-
-QHash<int,QVariant> FlatListModel::data(int index, const QList<int> &roles) const
-{
- Q_ASSERT(index >= 0 && index < m_values.count());
-
- QHash<int, QVariant> row;
- for (int i=0; i<roles.count(); i++) {
- int role = roles[i];
- if (m_values[index].contains(role))
- row.insert(role, m_values[index][role]);
- }
- return row;
+ qDeleteAll(m_nodeData);
}
QVariant FlatListModel::data(int index, int role) const
@@ -875,16 +941,15 @@ int FlatListModel::count() const
void FlatListModel::clear()
{
m_values.clear();
+
+ qDeleteAll(m_nodeData);
+ m_nodeData.clear();
}
void FlatListModel::remove(int index)
{
m_values.removeAt(index);
-}
-
-bool FlatListModel::append(const QScriptValue &value)
-{
- return insert(m_values.count(), value);
+ removedNode(index);
}
bool FlatListModel::insert(int index, const QScriptValue &value)
@@ -896,6 +961,8 @@ bool FlatListModel::insert(int index, const QScriptValue &value)
return false;
m_values.insert(index, row);
+ insertedNode(index);
+
return true;
}
@@ -909,13 +976,17 @@ QScriptValue FlatListModel::get(int index) const
if (index < 0 || index >= m_values.count())
return scriptEngine->undefinedValue();
- QScriptValue rv = scriptEngine->newObject();
+ FlatListModel *that = const_cast<FlatListModel*>(this);
+ if (!m_scriptClass)
+ that->m_scriptClass = new FlatListScriptClass(that, scriptEngine);
- QHash<int, QVariant> row = m_values.at(index);
- for (QHash<int, QVariant>::ConstIterator iter = row.begin(); iter != row.end(); ++iter)
- rv.setProperty(m_roles.value(iter.key()), qScriptValueFromValue(scriptEngine, iter.value()));
+ FlatNodeData *data = m_nodeData.value(index);
+ if (!data) {
+ data = new FlatNodeData(index);
+ that->m_nodeData.replace(index, data);
+ }
- return rv;
+ return QScriptDeclarativeClass::newObject(scriptEngine, m_scriptClass, new FlatNodeObjectData(data));
}
void FlatListModel::set(int index, const QScriptValue &value, QList<int> *roles)
@@ -947,23 +1018,8 @@ void FlatListModel::setProperty(int index, const QString& property, const QVaria
void FlatListModel::move(int from, int to, int n)
{
- if (n == 1) {
- m_values.move(from, to);
- } else {
- QList<QHash<int, QVariant> > replaced;
- int i=0;
- QList<QHash<int, QVariant> >::ConstIterator it=m_values.begin(); it += from+n;
- for (; i<to-from; ++i,++it)
- replaced.append(*it);
- i=0;
- it=m_values.begin(); it += from;
- for (; i<n; ++i,++it)
- replaced.append(*it);
- QList<QHash<int, QVariant> >::ConstIterator f=replaced.begin();
- QList<QHash<int, QVariant> >::Iterator t=m_values.begin(); t += from;
- for (; f != replaced.end(); ++f, ++t)
- *t = *f;
- }
+ qdeclarativelistmodel_move<QList<QHash<int, QVariant> > >(from, to, n, &m_values);
+ moveNodes(from, to, n);
}
bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *row, QList<int> *roles)
@@ -973,7 +1029,7 @@ bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *ro
it.next();
QScriptValue value = it.value();
if (!value.isVariant() && !value.isRegExp() && !value.isDate() && value.isObject()) {
- qmlInfo(m_listModel) << "Cannot add nested list values when modifying or after modification from a worker script";
+ qmlInfo(m_listModel) << "Cannot add list-type data when modifying or after modification from a worker script";
return false;
}
@@ -993,6 +1049,139 @@ bool FlatListModel::addValue(const QScriptValue &value, QHash<int, QVariant> *ro
return true;
}
+void FlatListModel::insertedNode(int index)
+{
+ if (index >= 0 && index <= m_values.count()) {
+ m_nodeData.insert(index, 0);
+
+ for (int i=index + 1; i<m_nodeData.count(); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+ }
+}
+
+void FlatListModel::removedNode(int index)
+{
+ if (index >= 0 && index < m_nodeData.count()) {
+ delete m_nodeData.takeAt(index);
+
+ for (int i=index; i<m_nodeData.count(); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+ }
+}
+
+void FlatListModel::moveNodes(int from, int to, int n)
+{
+ if (!m_listModel->canMove(from, to, n))
+ return;
+
+ qdeclarativelistmodel_move<QList<FlatNodeData *> >(from, to, n, &m_nodeData);
+
+ for (int i=from; i<from + (to-from); i++) {
+ if (m_nodeData[i])
+ m_nodeData[i]->index = i;
+ }
+}
+
+
+
+FlatNodeData::~FlatNodeData()
+{
+ for (QSet<FlatNodeObjectData *>::Iterator iter = objects.begin(); iter != objects.end(); ++iter) {
+ FlatNodeObjectData *data = *iter;
+ data->nodeData = 0;
+ }
+}
+
+void FlatNodeData::addData(FlatNodeObjectData *data)
+{
+ objects.insert(data);
+}
+
+void FlatNodeData::removeData(FlatNodeObjectData *data)
+{
+ objects.remove(data);
+}
+
+
+FlatListScriptClass::FlatListScriptClass(FlatListModel *model, QScriptEngine *seng)
+ : QScriptDeclarativeClass(seng),
+ m_model(model)
+{
+}
+
+QScriptDeclarativeClass::Value FlatListScriptClass::property(Object *obj, const Identifier &name)
+{
+ FlatNodeObjectData *objData = static_cast<FlatNodeObjectData*>(obj);
+ if (!objData->nodeData) // item at this index has been deleted
+ return QScriptDeclarativeClass::Value(engine(), engine()->undefinedValue());
+
+ int index = objData->nodeData->index;
+ QString propName = toString(name);
+ int role = m_model->m_strings.value(propName, -1);
+
+ if (role >= 0 && index >=0 ) {
+ const QHash<int, QVariant> &row = m_model->m_values[index];
+ QScriptValue sv = engine()->toScriptValue<QVariant>(row[role]);
+ return QScriptDeclarativeClass::Value(engine(), sv);
+ }
+
+ return QScriptDeclarativeClass::Value(engine(), engine()->undefinedValue());
+}
+
+void FlatListScriptClass::setProperty(Object *obj, const Identifier &name, const QScriptValue &value)
+{
+ if (!value.isVariant() && !value.isRegExp() && !value.isDate() && value.isObject()) {
+ qmlInfo(m_model->m_listModel) << "Cannot add list-type data when modifying or after modification from a worker script";
+ return;
+ }
+
+ FlatNodeObjectData *objData = static_cast<FlatNodeObjectData*>(obj);
+ if (!objData->nodeData) // item at this index has been deleted
+ return;
+
+ int index = objData->nodeData->index;
+ QString propName = toString(name);
+
+ int role = m_model->m_strings.value(propName, -1);
+ if (role >= 0 && index >= 0) {
+ QHash<int, QVariant> &row = m_model->m_values[index];
+ row[role] = value.toVariant();
+
+ if (m_model->m_parentAgent) {
+ // This is the list in the worker thread, so tell the agent to
+ // emit itemsChanged() later
+ m_model->m_parentAgent->changedData(index, 1);
+ } else {
+ // This is the list in the main thread, so emit itemsChanged()
+ QList<int> roles;
+ roles << role;
+ emit m_model->m_listModel->itemsChanged(index, 1, roles);
+ }
+ }
+}
+
+QScriptClass::QueryFlags FlatListScriptClass::queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags)
+{
+ return (QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess);
+}
+
+bool FlatListScriptClass::compare(Object *obj1, Object *obj2)
+{
+ FlatNodeObjectData *data1 = static_cast<FlatNodeObjectData*>(obj1);
+ FlatNodeObjectData *data2 = static_cast<FlatNodeObjectData*>(obj2);
+
+ if (!data1->nodeData || !data2->nodeData)
+ return false;
+
+ return data1->nodeData->index == data2->nodeData->index;
+}
+
+
+
NestedListModel::NestedListModel(QDeclarativeListModel *base)
: _root(0), m_ownsRoot(false), m_listModel(base), _rolesOk(false)
{
@@ -1118,11 +1307,12 @@ void NestedListModel::remove(int index)
bool NestedListModel::insert(int index, const QScriptValue& valuemap)
{
if (!_root) {
- _root = new ModelNode;
+ _root = new ModelNode(this);
m_ownsRoot = true;
}
- ModelNode *mn = new ModelNode;
+ ModelNode *mn = new ModelNode(this);
+ mn->listIndex = index;
mn->setObjectValue(valuemap);
_root->values.insert(index,qVariantFromValue(mn));
return true;
@@ -1130,35 +1320,9 @@ bool NestedListModel::insert(int index, const QScriptValue& valuemap)
void NestedListModel::move(int from, int to, int n)
{
- if (n==1) {
- _root->values.move(from,to);
- } else {
- QList<QVariant> replaced;
- int i=0;
- QVariantList::const_iterator it=_root->values.begin(); it += from+n;
- for (; i<to-from; ++i,++it)
- replaced.append(*it);
- i=0;
- it=_root->values.begin(); it += from;
- for (; i<n; ++i,++it)
- replaced.append(*it);
- QVariantList::const_iterator f=replaced.begin();
- QVariantList::iterator t=_root->values.begin(); t += from;
- for (; f != replaced.end(); ++f, ++t)
- *t = *f;
- }
-}
-
-bool NestedListModel::append(const QScriptValue& valuemap)
-{
- if (!_root) {
- _root = new ModelNode;
- m_ownsRoot = true;
- }
- ModelNode *mn = new ModelNode;
- mn->setObjectValue(valuemap);
- _root->values << qVariantFromValue(mn);
- return true;
+ if (!_root)
+ return;
+ qdeclarativelistmodel_move<QVariantList>(from, to, n, &_root->values);
}
QScriptValue NestedListModel::get(int index) const
@@ -1252,8 +1416,8 @@ QString NestedListModel::toString(int role) const
}
-ModelNode::ModelNode()
-: modelCache(0), objectCache(0), isArray(false)
+ModelNode::ModelNode(NestedListModel *model)
+: modelCache(0), objectCache(0), isArray(false), m_model(model), listIndex(-1)
{
}
@@ -1277,18 +1441,18 @@ void ModelNode::clear()
properties.clear();
}
-void ModelNode::setObjectValue(const QScriptValue& valuemap) {
+void ModelNode::setObjectValue(const QScriptValue& valuemap, bool writeToCache) {
QScriptValueIterator it(valuemap);
while (it.hasNext()) {
it.next();
- ModelNode *value = new ModelNode;
+ ModelNode *value = new ModelNode(m_model);
QScriptValue v = it.value();
if (v.isArray()) {
value->isArray = true;
value->setListValue(v);
} else {
value->values << v.toVariant();
- if (objectCache)
+ if (writeToCache && objectCache)
objectCache->setValue(it.name().toUtf8(), value->values.last());
}
if (properties.contains(it.name()))
@@ -1301,14 +1465,16 @@ void ModelNode::setListValue(const QScriptValue& valuelist) {
values.clear();
int size = valuelist.property(QLatin1String("length")).toInt32();
for (int i=0; i<size; i++) {
- ModelNode *value = new ModelNode;
+ ModelNode *value = new ModelNode(m_model);
QScriptValue v = valuelist.property(i);
if (v.isArray()) {
value->isArray = true;
value->setListValue(v);
} else if (v.isObject()) {
+ value->listIndex = i;
value->setObjectValue(v);
} else {
+ value->listIndex = i;
value->values << v.toVariant();
}
values.append(qVariantFromValue(value));
@@ -1320,7 +1486,7 @@ void ModelNode::setProperty(const QString& prop, const QVariant& val) {
if (it != properties.end()) {
(*it)->values[0] = val;
} else {
- ModelNode *n = new ModelNode;
+ ModelNode *n = new ModelNode(m_model);
n->values << val;
properties.insert(prop,n);
}
@@ -1328,6 +1494,40 @@ void ModelNode::setProperty(const QString& prop, const QVariant& val) {
objectCache->setValue(prop.toUtf8(), val);
}
+void ModelNode::updateListIndexes()
+{
+ for (QHash<QString, ModelNode *>::ConstIterator iter = properties.begin(); iter != properties.end(); ++iter) {
+ ModelNode *node = iter.value();
+ if (node->isArray) {
+ for (int i=0; i<node->values.count(); ++i) {
+ ModelNode *subNode = qvariant_cast<ModelNode *>(node->values.at(i));
+ if (subNode)
+ subNode->listIndex = i;
+ }
+ }
+ node->updateListIndexes();
+ }
+}
+
+/*
+ Need to call this to emit itemsChanged() for modifications outside of set()
+ and setProperty(), i.e. if an item returned from get() is modified
+*/
+void ModelNode::changedProperty(const QString &name) const
+{
+ if (listIndex < 0)
+ return;
+
+ m_model->checkRoles();
+ QList<int> roles;
+ int role = m_model->roleStrings.indexOf(name);
+ if (role < 0)
+ roles = m_model->roles();
+ else
+ roles << role;
+ emit m_model->m_listModel->itemsChanged(listIndex, 1, roles);
+}
+
void ModelNode::dump(ModelNode *node, int ind)
{
QByteArray indentBa(ind * 4, ' ');
@@ -1349,16 +1549,47 @@ void ModelNode::dump(ModelNode *node, int ind)
}
}
-ModelObject::ModelObject()
-: _mo(new QDeclarativeOpenMetaObject(this))
+ModelObject::ModelObject(ModelNode *node, NestedListModel *model, QScriptEngine *seng)
+ : m_model(model),
+ m_node(node),
+ m_meta(new ModelNodeMetaObject(seng, this))
{
}
void ModelObject::setValue(const QByteArray &name, const QVariant &val)
{
- _mo->setValue(name, val);
+ m_meta->setValue(name, val);
setProperty(name.constData(), val);
}
+void ModelObject::setNodeUpdatesEnabled(bool enable)
+{
+ m_meta->m_enabled = enable;
+}
+
+
+ModelNodeMetaObject::ModelNodeMetaObject(QScriptEngine *seng, ModelObject *object)
+ : QDeclarativeOpenMetaObject(object),
+ m_enabled(false),
+ m_seng(seng),
+ m_obj(object)
+{
+}
+
+void ModelNodeMetaObject::propertyWritten(int index)
+{
+ if (!m_enabled)
+ return;
+
+ QString propName = QString::fromUtf8(name(index));
+ QVariant value = operator[](index);
+
+ QScriptValue sv = m_seng->newObject();
+ sv.setProperty(propName, m_seng->newVariant(value));
+ m_obj->m_node->setObjectValue(sv, false);
+
+ m_obj->m_node->changedProperty(propName);
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/util/qdeclarativelistmodel_p.h b/src/declarative/util/qdeclarativelistmodel_p.h
index 6aff9c6..e9673c8 100644
--- a/src/declarative/util/qdeclarativelistmodel_p.h
+++ b/src/declarative/util/qdeclarativelistmodel_p.h
@@ -63,6 +63,7 @@ class FlatListModel;
class NestedListModel;
class QDeclarativeListModelWorkerAgent;
struct ModelNode;
+class FlatListScriptClass;
class Q_DECLARATIVE_EXPORT QDeclarativeListModel : public QListModelInterface
{
Q_OBJECT
@@ -75,7 +76,6 @@ public:
virtual QList<int> roles() const;
virtual QString toString(int role) const;
virtual int count() const;
- virtual QHash<int,QVariant> data(int index, const QList<int> &roles = (QList<int>())) const;
virtual QVariant data(int index, int role) const;
Q_INVOKABLE void clear();
@@ -96,16 +96,21 @@ Q_SIGNALS:
private:
friend class QDeclarativeListModelParser;
friend class QDeclarativeListModelWorkerAgent;
+ friend class FlatListModel;
+ friend class FlatListScriptClass;
friend struct ModelNode;
- QDeclarativeListModel(bool workerCopy, QObject *parent=0);
+ // Constructs a flat list model for a worker agent
+ QDeclarativeListModel(const QDeclarativeListModel *orig, QDeclarativeListModelWorkerAgent *parent);
+
bool flatten();
- bool modifyCheck();
+ bool inWorkerThread() const;
+
+ inline bool canMove(int from, int to, int n) const { return !(from+n > count() || to+n > count() || from < 0 || to < 0 || n < 0); }
QDeclarativeListModelWorkerAgent *m_agent;
NestedListModel *m_nested;
FlatListModel *m_flat;
- bool m_isWorkerCopy;
};
// ### FIXME
diff --git a/src/declarative/util/qdeclarativelistmodel_p_p.h b/src/declarative/util/qdeclarativelistmodel_p_p.h
index 8231414..43a0a9b 100644
--- a/src/declarative/util/qdeclarativelistmodel_p_p.h
+++ b/src/declarative/util/qdeclarativelistmodel_p_p.h
@@ -54,9 +54,11 @@
//
#include "private/qdeclarativelistmodel_p.h"
-
-#include "qdeclarative.h"
#include "private/qdeclarativeengine_p.h"
+#include "private/qdeclarativeopenmetaobject_p.h"
+#include "qdeclarative.h"
+
+#include <private/qscriptdeclarativeclass_p.h>
QT_BEGIN_HEADER
@@ -68,6 +70,8 @@ class QDeclarativeOpenMetaObject;
class QScriptEngine;
class QDeclarativeListModelWorkerAgent;
struct ModelNode;
+class FlatListScriptClass;
+class FlatNodeData;
class FlatListModel
{
@@ -75,7 +79,6 @@ public:
FlatListModel(QDeclarativeListModel *base);
~FlatListModel();
- QHash<int,QVariant> data(int index, const QList<int> &roles) const;
QVariant data(int index, int role) const;
QList<int> roles() const;
@@ -84,7 +87,6 @@ public:
int count() const;
void clear();
void remove(int index);
- bool append(const QScriptValue&);
bool insert(int index, const QScriptValue&);
QScriptValue get(int index) const;
void set(int index, const QScriptValue&, QList<int> *roles);
@@ -94,16 +96,82 @@ public:
private:
friend class QDeclarativeListModelWorkerAgent;
friend class QDeclarativeListModel;
+ friend class FlatListScriptClass;
+ friend class FlatNodeData;
bool addValue(const QScriptValue &value, QHash<int, QVariant> *row, QList<int> *roles);
+ void insertedNode(int index);
+ void removedNode(int index);
+ void moveNodes(int from, int to, int n);
QScriptEngine *m_scriptEngine;
QHash<int, QString> m_roles;
QHash<QString, int> m_strings;
QList<QHash<int, QVariant> > m_values;
QDeclarativeListModel *m_listModel;
+
+ FlatListScriptClass *m_scriptClass;
+ QList<FlatNodeData *> m_nodeData;
+ QDeclarativeListModelWorkerAgent *m_parentAgent;
+};
+
+
+/*
+ Created when get() is called on a FlatListModel. This allows changes to the
+ object returned by get() to be tracked, and passed onto the model.
+*/
+class FlatListScriptClass : public QScriptDeclarativeClass
+{
+public:
+ FlatListScriptClass(FlatListModel *model, QScriptEngine *seng);
+
+ Value property(Object *, const Identifier &);
+ void setProperty(Object *, const Identifier &name, const QScriptValue &);
+ QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags flags);
+ bool compare(Object *, Object *);
+
+private:
+ FlatListModel *m_model;
+};
+
+/*
+ FlatNodeData and FlatNodeObjectData allow objects returned by get() to still
+ point to the correct list index if move(), insert() or remove() are called.
+*/
+struct FlatNodeObjectData;
+class FlatNodeData
+{
+public:
+ FlatNodeData(int i)
+ : index(i) {}
+
+ ~FlatNodeData();
+
+ void addData(FlatNodeObjectData *data);
+ void removeData(FlatNodeObjectData *data);
+
+ int index;
+
+private:
+ QSet<FlatNodeObjectData*> objects;
+};
+
+struct FlatNodeObjectData : public QScriptDeclarativeClass::Object
+{
+ FlatNodeObjectData(FlatNodeData *data) : nodeData(data) {
+ nodeData->addData(this);
+ }
+
+ ~FlatNodeObjectData() {
+ if (nodeData)
+ nodeData->removeData(this);
+ }
+
+ FlatNodeData *nodeData;
};
+
+
class NestedListModel
{
public:
@@ -119,7 +187,6 @@ public:
int count() const;
void clear();
void remove(int index);
- bool append(const QScriptValue&);
bool insert(int index, const QScriptValue&);
QScriptValue get(int index) const;
void set(int index, const QScriptValue&, QList<int> *roles);
@@ -134,25 +201,50 @@ public:
QDeclarativeListModel *m_listModel;
private:
+ friend struct ModelNode;
mutable QStringList roleStrings;
mutable bool _rolesOk;
};
+class ModelNodeMetaObject;
class ModelObject : public QObject
{
Q_OBJECT
public:
- ModelObject();
+ ModelObject(ModelNode *node, NestedListModel *model, QScriptEngine *seng);
void setValue(const QByteArray &name, const QVariant &val);
+ void setNodeUpdatesEnabled(bool enable);
+
+ NestedListModel *m_model;
+ ModelNode *m_node;
private:
- QDeclarativeOpenMetaObject *_mo;
+ ModelNodeMetaObject *m_meta;
};
+class ModelNodeMetaObject : public QDeclarativeOpenMetaObject
+{
+public:
+ ModelNodeMetaObject(QScriptEngine *seng, ModelObject *object);
+
+ bool m_enabled;
+
+protected:
+ void propertyWritten(int index);
+
+private:
+ QScriptEngine *m_seng;
+ ModelObject *m_obj;
+};
+
+
+/*
+ A ModelNode is created for each item in a NestedListModel.
+*/
struct ModelNode
{
- ModelNode();
+ ModelNode(NestedListModel *model);
~ModelNode();
QList<QVariant> values;
@@ -160,35 +252,22 @@ struct ModelNode
void clear();
- QDeclarativeListModel *model(const NestedListModel *model) {
- if (!modelCache) {
- modelCache = new QDeclarativeListModel;
- QDeclarativeEngine::setContextForObject(modelCache,QDeclarativeEngine::contextForObject(model->m_listModel));
- modelCache->m_nested->_root = this; // ListModel defaults to nestable model
- }
- return modelCache;
- }
-
- ModelObject *object(const NestedListModel *model) {
- if (!objectCache) {
- objectCache = new ModelObject();
- QHash<QString, ModelNode *>::iterator it;
- for (it = properties.begin(); it != properties.end(); ++it) {
- objectCache->setValue(it.key().toUtf8(), model->valueForNode(*it));
- }
- }
- return objectCache;
- }
+ QDeclarativeListModel *model(const NestedListModel *model);
+ ModelObject *object(const NestedListModel *model);
-
- void setObjectValue(const QScriptValue& valuemap);
+ void setObjectValue(const QScriptValue& valuemap, bool writeToCache = true);
void setListValue(const QScriptValue& valuelist);
void setProperty(const QString& prop, const QVariant& val);
+ void changedProperty(const QString &name) const;
+ void updateListIndexes();
static void dump(ModelNode *node, int ind);
QDeclarativeListModel *modelCache;
ModelObject *objectCache;
bool isArray;
+
+ NestedListModel *m_model;
+ int listIndex; // only used for top-level nodes within a list
};
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
index d9df169..6804d4a 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
@@ -83,11 +83,11 @@ void QDeclarativeListModelWorkerAgent::Data::changedChange(int index, int count)
}
QDeclarativeListModelWorkerAgent::QDeclarativeListModelWorkerAgent(QDeclarativeListModel *model)
-: m_engine(0), m_ref(1), m_orig(model), m_copy(new QDeclarativeListModel(true, this))
+ : m_engine(0),
+ m_ref(1),
+ m_orig(model),
+ m_copy(new QDeclarativeListModel(model, this))
{
- m_copy->m_flat->m_roles = m_orig->m_flat->m_roles;
- m_copy->m_flat->m_strings = m_orig->m_flat->m_strings;
- m_copy->m_flat->m_values = m_orig->m_flat->m_values;
}
QDeclarativeListModelWorkerAgent::~QDeclarativeListModelWorkerAgent()
@@ -194,6 +194,11 @@ void QDeclarativeListModelWorkerAgent::sync()
mutex.unlock();
}
+void QDeclarativeListModelWorkerAgent::changedData(int index, int count)
+{
+ data.changedChange(index, count);
+}
+
bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
{
if (e->type() == QEvent::User) {
@@ -216,6 +221,24 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
orig->m_strings = copy->m_strings;
orig->m_values = copy->m_values;
+ // update the orig->m_nodeData list
+ for (int ii = 0; ii < changes.count(); ++ii) {
+ const Change &change = changes.at(ii);
+ switch (change.type) {
+ case Change::Inserted:
+ orig->insertedNode(change.index);
+ break;
+ case Change::Removed:
+ orig->removedNode(change.index);
+ break;
+ case Change::Moved:
+ orig->moveNodes(change.index, change.to, change.count);
+ break;
+ case Change::Changed:
+ break;
+ }
+ }
+
syncDone.wakeAll();
locker.unlock();
@@ -232,7 +255,7 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
emit m_orig->itemsMoved(change.index, change.to, change.count);
break;
case Change::Changed:
- emit m_orig->itemsChanged(change.index, change.to, orig->m_roles.keys());
+ emit m_orig->itemsChanged(change.index, change.count, orig->m_roles.keys());
break;
}
}
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent_p.h b/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
index 01da374..10c3bca 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent_p.h
@@ -67,6 +67,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeListModel;
+class FlatListScriptClass;
class QDeclarativeListModelWorkerAgent : public QObject
{
@@ -115,6 +116,7 @@ protected:
private:
friend class QDeclarativeWorkerScriptEnginePrivate;
+ friend class FlatListScriptClass;
QScriptEngine *m_engine;
struct Change {
@@ -141,6 +143,8 @@ private:
QDeclarativeListModel *list;
};
+ void changedData(int index, int count);
+
QAtomicInt m_ref;
QDeclarativeListModel *m_orig;
QDeclarativeListModel *m_copy;
diff --git a/src/declarative/util/qdeclarativetimer_p.h b/src/declarative/util/qdeclarativetimer_p.h
index 93b0965..08c3d4e 100644
--- a/src/declarative/util/qdeclarativetimer_p.h
+++ b/src/declarative/util/qdeclarativetimer_p.h
@@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Declarative)
class QDeclarativeTimerPrivate;
-class Q_AUTOTEST_EXPORT QDeclarativeTimer : public QObject, public QDeclarativeParserStatus
+class Q_DECLARATIVE_EXPORT QDeclarativeTimer : public QObject, public QDeclarativeParserStatus
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDeclarativeTimer)
diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp
index 8f06858..2381172 100644
--- a/src/declarative/util/qdeclarativeview.cpp
+++ b/src/declarative/util/qdeclarativeview.cpp
@@ -392,7 +392,7 @@ QDeclarativeView::Status QDeclarativeView::status() const
/*!
Return the list of errors that occurred during the last compile or create
- operation. An empty list is returned if isError() is not set.
+ operation. When the status is not Error, an empty list is returned.
*/
QList<QDeclarativeError> QDeclarativeView::errors() const
{
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 47b502d..f0ed80b 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -209,8 +209,9 @@ Q_SIGNALS:
protected:
void run() {
+ m_mutex.lock();
+
while (!m_quit) {
- m_mutex.lock();
if (!m_jobs.isEmpty())
m_currentJob = m_jobs.dequeue();
m_mutex.unlock();
@@ -230,12 +231,13 @@ protected:
m_mutex.lock();
if (m_currentJob.queryId != -1 && m_abortQueryId != m_currentJob.queryId)
emit queryCompleted(r);
- if (m_jobs.isEmpty())
+ if (m_jobs.isEmpty() && !m_quit)
m_condition.wait(&m_mutex);
m_currentJob.queryId = -1;
m_abortQueryId = -1;
- m_mutex.unlock();
}
+
+ m_mutex.unlock();
}
private:
diff --git a/src/declarative/util/qlistmodelinterface_p.h b/src/declarative/util/qlistmodelinterface_p.h
index 07592ad..8c8ebb3 100644
--- a/src/declarative/util/qlistmodelinterface_p.h
+++ b/src/declarative/util/qlistmodelinterface_p.h
@@ -59,10 +59,7 @@ class Q_DECLARATIVE_EXPORT QListModelInterface : public QObject
virtual ~QListModelInterface() {}
virtual int count() const = 0;
- virtual QHash<int,QVariant> data(int index, const QList<int>& roles = QList<int>()) const = 0;
virtual QVariant data(int index, int role) const = 0;
- virtual bool setData(int index, const QHash<int,QVariant>& values)
- { Q_UNUSED(index); Q_UNUSED(values); return false; }
virtual QList<int> roles() const = 0;
virtual QString toString(int role) const = 0;
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index cb74a3c..fc3c186 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -302,7 +302,6 @@ QT_BEGIN_INCLUDE_NAMESPACE
#endif
#include <qshortcut.h>
#ifdef Q_WS_MAC
-#include <private/qunicodetables_p.h>
#include <qmacstyle_mac.h>
#endif
QT_END_INCLUDE_NAMESPACE
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index c166c30..8dc15bf 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4751,7 +4751,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
ENSURE_TRANSFORM_PTR
QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toAlignedRect()
: transformPtr->mapRect(brect).toAlignedRect();
- viewBoundingRect.adjust(-rectAdjust, -rectAdjust, rectAdjust, rectAdjust);
+ viewBoundingRect.adjust(-int(rectAdjust), -int(rectAdjust), rectAdjust, rectAdjust);
if (widget)
item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect);
drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect)
@@ -4814,6 +4814,27 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
}
}
+static inline void setClip(QPainter *painter, QGraphicsItem *item)
+{
+ painter->save();
+ QRectF clipRect;
+ const QPainterPath clipPath(item->shape());
+ if (QPathClipper::pathToRect(clipPath, &clipRect))
+ painter->setClipRect(clipRect, Qt::IntersectClip);
+ else
+ painter->setClipPath(clipPath, Qt::IntersectClip);
+}
+
+static inline void setWorldTransform(QPainter *painter, const QTransform *const transformPtr,
+ const QTransform *effectTransform)
+{
+ Q_ASSERT(transformPtr);
+ if (effectTransform)
+ painter->setWorldTransform(*transformPtr * *effectTransform);
+ else
+ painter->setWorldTransform(*transformPtr);
+}
+
void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const QTransform *const viewTransform,
const QTransform *const transformPtr, QRegion *exposedRegion, QWidget *widget,
qreal opacity, const QTransform *effectTransform,
@@ -4822,36 +4843,37 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q
const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity);
const bool itemClipsChildrenToShape = (item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape);
const bool itemHasChildren = !item->d_ptr->children.isEmpty();
+ bool setChildClip = itemClipsChildrenToShape;
+ bool itemHasChildrenStackedBehind = false;
int i = 0;
if (itemHasChildren) {
+ if (itemClipsChildrenToShape)
+ setWorldTransform(painter, transformPtr, effectTransform);
+
item->d_ptr->ensureSortedChildren();
+ // Items with the 'ItemStacksBehindParent' flag are put in front of the list
+ // so all we have to do is to check the first item.
+ itemHasChildrenStackedBehind = (item->d_ptr->children.at(0)->d_ptr->flags
+ & QGraphicsItem::ItemStacksBehindParent);
- if (itemClipsChildrenToShape) {
- painter->save();
- Q_ASSERT(transformPtr);
- if (effectTransform)
- painter->setWorldTransform(*transformPtr * *effectTransform);
- else
- painter->setWorldTransform(*transformPtr);
- QRectF clipRect;
- const QPainterPath clipPath(item->shape());
- if (QPathClipper::pathToRect(clipPath, &clipRect))
- painter->setClipRect(clipRect, Qt::IntersectClip);
- else
- painter->setClipPath(clipPath, Qt::IntersectClip);
- }
+ if (itemHasChildrenStackedBehind) {
+ if (itemClipsChildrenToShape) {
+ setClip(painter, item);
+ setChildClip = false;
+ }
- // Draw children behind
- for (i = 0; i < item->d_ptr->children.size(); ++i) {
- QGraphicsItem *child = item->d_ptr->children.at(i);
- if (wasDirtyParentSceneTransform)
- child->d_ptr->dirtySceneTransform = 1;
- if (!(child->d_ptr->flags & QGraphicsItem::ItemStacksBehindParent))
- break;
- if (itemIsFullyTransparent && !(child->d_ptr->flags & QGraphicsItem::ItemIgnoresParentOpacity))
- continue;
- drawSubtreeRecursive(child, painter, viewTransform, exposedRegion, widget, opacity, effectTransform);
+ // Draw children behind
+ for (i = 0; i < item->d_ptr->children.size(); ++i) {
+ QGraphicsItem *child = item->d_ptr->children.at(i);
+ if (wasDirtyParentSceneTransform)
+ child->d_ptr->dirtySceneTransform = 1;
+ if (!(child->d_ptr->flags & QGraphicsItem::ItemStacksBehindParent))
+ break;
+ if (itemIsFullyTransparent && !(child->d_ptr->flags & QGraphicsItem::ItemIgnoresParentOpacity))
+ continue;
+ drawSubtreeRecursive(child, painter, viewTransform, exposedRegion, widget, opacity, effectTransform);
+ }
}
}
@@ -4864,38 +4886,50 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q
? *exposedRegion : QRegion(), exposedRegion == 0);
const bool itemClipsToShape = item->d_ptr->flags & QGraphicsItem::ItemClipsToShape;
- const bool savePainter = itemClipsToShape || painterStateProtection;
- if (savePainter)
- painter->save();
+ bool restorePainterClip = false;
if (!itemHasChildren || !itemClipsChildrenToShape) {
- if (effectTransform)
- painter->setWorldTransform(*transformPtr * *effectTransform);
- else
- painter->setWorldTransform(*transformPtr);
+ // Item does not have children or clip children to shape.
+ setWorldTransform(painter, transformPtr, effectTransform);
+ if ((restorePainterClip = itemClipsToShape))
+ setClip(painter, item);
+ } else if (itemHasChildrenStackedBehind){
+ // Item clips children to shape and has children stacked behind, which means
+ // the painter is already clipped to the item's shape.
+ if (itemClipsToShape) {
+ // The clip is already correct. Ensure correct world transform.
+ setWorldTransform(painter, transformPtr, effectTransform);
+ } else {
+ // Remove clip (this also ensures correct world transform).
+ painter->restore();
+ setChildClip = true;
+ }
+ } else if (itemClipsToShape) {
+ // Item clips children and itself to shape. It does not have hildren stacked
+ // behind, which means the clip has not yet been set. We set it now and re-use it
+ // for the children.
+ setClip(painter, item);
+ setChildClip = false;
}
- if (itemClipsToShape) {
- QRectF clipRect;
- const QPainterPath clipPath(item->shape());
- if (QPathClipper::pathToRect(clipPath, &clipRect))
- painter->setClipRect(clipRect, Qt::IntersectClip);
- else
- painter->setClipPath(clipPath, Qt::IntersectClip);
- }
- painter->setOpacity(opacity);
+ if (painterStateProtection && !restorePainterClip)
+ painter->save();
+ painter->setOpacity(opacity);
if (!item->d_ptr->cacheMode && !item->d_ptr->isWidget)
item->paint(painter, &styleOptionTmp, widget);
else
drawItemHelper(item, painter, &styleOptionTmp, widget, painterStateProtection);
- if (savePainter)
+ if (painterStateProtection || restorePainterClip)
painter->restore();
}
// Draw children in front
if (itemHasChildren) {
+ if (setChildClip)
+ setClip(painter, item);
+
for (; i < item->d_ptr->children.size(); ++i) {
QGraphicsItem *child = item->d_ptr->children.at(i);
if (wasDirtyParentSceneTransform)
@@ -4904,11 +4938,11 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q
continue;
drawSubtreeRecursive(child, painter, viewTransform, exposedRegion, widget, opacity, effectTransform);
}
- }
- // Restore child clip
- if (itemHasChildren && itemClipsChildrenToShape)
- painter->restore();
+ // Restore child clip
+ if (itemClipsChildrenToShape)
+ painter->restore();
+ }
}
void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, bool invalidateChildren,
@@ -5271,6 +5305,7 @@ void QGraphicsScene::drawItems(QPainter *painter,
if (!d->unpolishedItems.isEmpty())
d->_q_polishItems();
+ const qreal opacity = painter->opacity();
QTransform viewTransform = painter->worldTransform();
Q_UNUSED(options);
@@ -5304,6 +5339,7 @@ void QGraphicsScene::drawItems(QPainter *painter,
topLevelItems.at(i)->d_ptr->itemDiscovered = 0;
painter->setWorldTransform(viewTransform);
+ painter->setOpacity(opacity);
}
/*!
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index c8aca80..a566c8e 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -3475,7 +3475,8 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
// IndirectPainting (the else branch), because in that case we always save()
// and restore() in QGraphicsScene::drawItems().
if (!d->scene->d_func()->painterStateProtection)
- painter.setWorldTransform(viewTransform);
+ painter.setOpacity(1.0);
+ painter.setWorldTransform(viewTransform);
} else {
// Make sure we don't have unpolished items before we draw
if (!d->scene->d_func()->unpolishedItems.isEmpty())
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 13d2c77..90b5de5 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -60,21 +60,6 @@ symbian {
QMAKE_LFLAGS.ARMCC += --rw-base 0x800000
QMAKE_LFLAGS.GCCE += -Tdata 0xC00000
}
-
- # Partial upgrade SIS file
- vendorinfo = \
- "; Localised Vendor name" \
- "%{\"Nokia, Qt\"}" \
- " " \
- "; Unique Vendor name" \
- ":\"Nokia, Qt\"" \
- " "
- pu_header = "; Partial upgrade package for testing QtGui changes without reinstalling everything" \
- "$${LITERAL_HASH}{\"Qt gui\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
- partial_upgrade.pkg_prerules = pu_header vendorinfo
- partial_upgrade.sources = $$QMAKE_LIBDIR_QT/QtGui$${QT_LIBINFIX}.dll
- partial_upgrade.path = c:/sys/bin
- DEPLOYMENT = partial_upgrade $$DEPLOYMENT
}
neon:*-g++* {
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp
index eda5efb..b9eda05 100644
--- a/src/gui/image/qjpeghandler.cpp
+++ b/src/gui/image/qjpeghandler.cpp
@@ -134,15 +134,18 @@ static void qt_init_source(j_decompress_ptr)
static boolean qt_fill_input_buffer(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
+ qint64 num_read = 0;
if (src->memDevice) {
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;
+ num_read = src->memDevice->data().size() - src->memDevice->pos();
+ src->device->seek(src->memDevice->data().size());
+ } else {
+ src->next_input_byte = src->buffer;
+ num_read = src->device->read((char*)src->buffer, max_buf);
}
- src->next_input_byte = src->buffer;
- int num_read = src->device->read((char*)src->buffer, max_buf);
if (num_read <= 0) {
// Insert a fake EOI marker - as per jpeglib recommendation
+ src->next_input_byte = src->buffer;
src->buffer[0] = (JOCTET) 0xFF;
src->buffer[1] = (JOCTET) JPEG_EOI;
src->bytes_in_buffer = 2;
@@ -183,13 +186,7 @@ static void qt_term_source(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
if (!src->device->isSequential())
- {
- // 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);
- }
+ src->device->seek(src->device->pos() - src->bytes_in_buffer);
}
#if defined(Q_C_CALLBACKS)
@@ -518,29 +515,10 @@ inline my_jpeg_destination_mgr::my_jpeg_destination_mgr(QIODevice *device)
free_in_buffer = max_buf;
}
-static bool can_write_format(QImage::Format fmt)
-{
- switch (fmt) {
- case QImage::Format_Mono:
- case QImage::Format_MonoLSB:
- case QImage::Format_Indexed8:
- case QImage::Format_RGB888:
- case QImage::Format_RGB32:
- case QImage::Format_ARGB32:
- case QImage::Format_ARGB32_Premultiplied:
- return true;
- break;
- default:
- break;
- }
- return false;
-}
-static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int sourceQuality)
+static bool write_jpeg_image(const QImage &image, QIODevice *device, int sourceQuality)
{
bool success = false;
- const QImage image = can_write_format(sourceImage.format()) ?
- sourceImage : sourceImage.convertToFormat(QImage::Format_RGB888);
const QVector<QRgb> cmap = image.colorTable();
struct jpeg_compress_struct cinfo;
@@ -617,7 +595,7 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
if (gray) {
- const uchar* data = image.scanLine(cinfo.next_scanline);
+ const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
@@ -630,7 +608,7 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
}
}
} else {
- const uchar* data = image.scanLine(cinfo.next_scanline);
+ const uchar* data = image.constScanLine(cinfo.next_scanline);
if (image.format() == QImage::Format_MonoLSB) {
for (int i=0; i<w; i++) {
bool bit = !!(*(data + (i >> 3)) & (1 << (i & 7)));
@@ -650,13 +628,13 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
break;
case QImage::Format_Indexed8:
if (gray) {
- const uchar* pix = image.scanLine(cinfo.next_scanline);
+ const uchar* pix = image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row = qRed(cmap[*pix]);
++row; ++pix;
}
} else {
- const uchar* pix = image.scanLine(cinfo.next_scanline);
+ const uchar* pix = image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row++ = qRed(cmap[*pix]);
*row++ = qGreen(cmap[*pix]);
@@ -666,12 +644,12 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
}
break;
case QImage::Format_RGB888:
- memcpy(row, image.scanLine(cinfo.next_scanline), w * 3);
+ memcpy(row, image.constScanLine(cinfo.next_scanline), w * 3);
break;
case QImage::Format_RGB32:
case QImage::Format_ARGB32:
case QImage::Format_ARGB32_Premultiplied: {
- QRgb* rgb = (QRgb*)image.scanLine(cinfo.next_scanline);
+ const QRgb* rgb = (const QRgb*)image.constScanLine(cinfo.next_scanline);
for (int i=0; i<w; i++) {
*row++ = qRed(*rgb);
*row++ = qGreen(*rgb);
@@ -681,8 +659,12 @@ static bool write_jpeg_image(const QImage &sourceImage, QIODevice *device, int s
break;
}
default:
- qWarning("QJpegHandler: unable to write image of format %i",
- image.format());
+ for (int i=0; i<w; i++) {
+ QRgb pix = image.pixel(i, cinfo.next_scanline);
+ *row++ = qRed(pix);
+ *row++ = qGreen(pix);
+ *row++ = qBlue(pix);
+ }
break;
}
jpeg_write_scanlines(&cinfo, row_pointer, 1);
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index 66a861d..64d8ed2 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -664,14 +664,19 @@ void QPixmap::resize_helper(const QSize &s)
#if defined(Q_WS_X11)
if (x11Data && x11Data->x11_mask) {
- QX11PixmapData *pmData = static_cast<QX11PixmapData*>(pd);
- pmData->x11_mask = (Qt::HANDLE)XCreatePixmap(X11->display,
- RootWindow(x11Data->xinfo.display(),
- x11Data->xinfo.screen()),
- w, h, 1);
- GC gc = XCreateGC(X11->display, pmData->x11_mask, 0, 0);
- XCopyArea(X11->display, x11Data->x11_mask, pmData->x11_mask, gc, 0, 0, qMin(width(), w), qMin(height(), h), 0, 0);
- XFreeGC(X11->display, gc);
+ QPixmapData *newPd = pm.pixmapData();
+ QX11PixmapData *pmData = (newPd && newPd->classId() == QPixmapData::X11Class)
+ ? static_cast<QX11PixmapData*>(newPd) : 0;
+ if (pmData) {
+ pmData->x11_mask = (Qt::HANDLE)XCreatePixmap(X11->display,
+ RootWindow(x11Data->xinfo.display(),
+ x11Data->xinfo.screen()),
+ w, h, 1);
+ GC gc = XCreateGC(X11->display, pmData->x11_mask, 0, 0);
+ XCopyArea(X11->display, x11Data->x11_mask, pmData->x11_mask, gc, 0, 0,
+ qMin(width(), w), qMin(height(), h), 0, 0);
+ XFreeGC(X11->display, gc);
+ }
}
#endif
*this = pm;
@@ -836,7 +841,7 @@ bool QPixmap::load(const QString &fileName, const char *format, Qt::ImageConvers
% HexString<quint64>(info.size())
% HexString<uint>(data ? data->pixelType() : QPixmapData::PixmapType);
- // Note: If no extension is provided, we try to match the
+ // Note: If no extension is provided, we try to match the
// file against known plugin extensions
if (!info.completeSuffix().isEmpty() && !info.exists())
return false;
@@ -1177,8 +1182,12 @@ Qt::HANDLE QPixmap::handle() const
{
#if defined(Q_WS_X11)
const QPixmapData *pd = pixmapData();
- if (pd && pd->classId() == QPixmapData::X11Class)
- return static_cast<const QX11PixmapData*>(pd)->handle();
+ if (pd) {
+ if (pd->classId() == QPixmapData::X11Class)
+ return static_cast<const QX11PixmapData*>(pd)->handle();
+ else
+ qWarning("QPixmap::handle(): Pixmap is not an X11 class pixmap");
+ }
#endif
return 0;
}
@@ -1789,13 +1798,27 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode)
Returns true if this pixmap has an alpha channel, \e or has a
mask, otherwise returns false.
- \warning This is potentially an expensive operation.
-
\sa hasAlphaChannel(), mask()
*/
bool QPixmap::hasAlpha() const
{
- return data && (data->hasAlphaChannel() || !data->mask().isNull());
+#if defined(Q_WS_X11)
+ if (data && data->hasAlphaChannel())
+ return true;
+ QPixmapData *pd = pixmapData();
+ if (pd && pd->classId() == QPixmapData::X11Class) {
+ QX11PixmapData *x11Data = static_cast<QX11PixmapData*>(pd);
+#ifndef QT_NO_XRENDER
+ if (x11Data->picture && x11Data->d == 32)
+ return true;
+#endif
+ if (x11Data->d == 1 || x11Data->x11_mask)
+ return true;
+ }
+ return false;
+#else
+ return data && data->hasAlphaChannel();
+#endif
}
/*!
diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp
index 3d9c363..01f2c11 100644
--- a/src/gui/image/qpixmap_x11.cpp
+++ b/src/gui/image/qpixmap_x11.cpp
@@ -1321,7 +1321,6 @@ QBitmap QX11PixmapData::mask() const
return mask;
}
-
/*!
Sets a mask bitmap.
@@ -1549,7 +1548,7 @@ QImage QX11PixmapData::toImage(const QRect &rect) const
if (!xiWrapper.xi)
return QImage();
- if (canTakeQImageFromXImage(xiWrapper))
+ if (!x11_mask && canTakeQImageFromXImage(xiWrapper))
return takeQImageFromXImage(xiWrapper);
QImage image = toImage(xiWrapper, rect);
diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp
index 70770c4..26bffcc 100644
--- a/src/gui/image/qpixmapfilter.cpp
+++ b/src/gui/image/qpixmapfilter.cpp
@@ -764,10 +764,17 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp
}
if (transposed == 0) {
- qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()),
- temp.width(), temp.height(), temp.bytesPerLine(),
- reinterpret_cast<quint32*>(img.bits()),
- img.bytesPerLine());
+ if (img.depth() == 8) {
+ qt_memrotate90(reinterpret_cast<const quint8*>(temp.bits()),
+ temp.width(), temp.height(), temp.bytesPerLine(),
+ reinterpret_cast<quint8*>(img.bits()),
+ img.bytesPerLine());
+ } else {
+ qt_memrotate90(reinterpret_cast<const quint32*>(temp.bits()),
+ temp.width(), temp.height(), temp.bytesPerLine(),
+ reinterpret_cast<quint32*>(img.bits()),
+ img.bytesPerLine());
+ }
} else {
img = temp;
}
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index b797776..40b51fe 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -3435,6 +3435,10 @@ void QTreeViewPrivate::updateScrollBars()
if (!viewportSize.isValid())
viewportSize = QSize(0, 0);
+ if (viewItems.isEmpty()) {
+ q->doItemsLayout();
+ }
+
int itemsInViewport = 0;
if (uniformRowHeights) {
if (defaultItemHeight <= 0)
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 2fd2f46..fdacefc 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -494,6 +494,7 @@ bool QApplicationPrivate::fade_tooltip = false;
bool QApplicationPrivate::animate_toolbox = false;
bool QApplicationPrivate::widgetCount = false;
bool QApplicationPrivate::load_testability = false;
+QString QApplicationPrivate::qmljsDebugArguments;
#ifdef QT_KEYPAD_NAVIGATION
# ifdef Q_OS_SYMBIAN
Qt::NavigationMode QApplicationPrivate::navigationMode = Qt::NavigationModeKeypadDirectional;
@@ -565,6 +566,8 @@ void QApplicationPrivate::process_cmdline()
QString s;
if (arg == "-qdevel" || arg == "-qdebug") {
// obsolete argument
+ } else if (arg.indexOf("-qmljsdebugger=", 0) != -1) {
+ qmljsDebugArguments = QString::fromLocal8Bit(arg.right(arg.length() - 15));
} else if (arg.indexOf("-style=", 0) != -1) {
s = QString::fromLocal8Bit(arg.right(arg.length() - 7).toLower());
} else if (arg == "-style" && i < argc-1) {
@@ -670,6 +673,9 @@ void QApplicationPrivate::process_cmdline()
Qt::RightToLeft
\o -graphicssystem, sets the backend to be used for on-screen widgets
and QPixmaps. Available options are \c{raster} and \c{opengl}.
+ \o -qmljsdebugger=, activates the QML/JS debugger with a specified port.
+ The value must be of format port:1234[,block], where block is optional
+ and will make the application wait until a debugger connects to it.
\endlist
The X11 version of Qt supports some traditional X11 command line options:
@@ -705,6 +711,12 @@ void QApplicationPrivate::process_cmdline()
done.
\endlist
+ \section1 X11 Notes
+
+ If QApplication fails to open the X11 display, it will terminate
+ the process. This behavior is consistent with most X11
+ applications.
+
\sa arguments()
*/
@@ -2391,8 +2403,13 @@ static const char *application_menu_strings[] = {
};
QString qt_mac_applicationmenu_string(int type)
{
- return qApp->translate("MAC_APPLICATION_MENU",
- application_menu_strings[type]);
+ QString menuString = QString::fromLatin1(application_menu_strings[type]);
+ QString translated = qApp->translate("QMenuBar", application_menu_strings[type]);
+ if (translated != menuString)
+ return translated;
+ else
+ return qApp->translate("MAC_APPLICATION_MENU",
+ application_menu_strings[type]);
}
#endif
#endif
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 8dc16e0..9c5095d 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -446,6 +446,8 @@ public:
static bool animate_toolbox;
static bool widgetCount; // Coupled with -widgetcount switch
static bool load_testability; // Coupled with -testability switch
+ static QString qmljsDebugArguments; // a string containing arguments for js/qml debugging.
+
#ifdef Q_WS_MAC
static bool native_modal_dialog_active;
#endif
@@ -528,12 +530,12 @@ public:
#ifndef QT_NO_GESTURES
QGestureManager *gestureManager;
QWidget *gestureWidget;
+#endif
#if defined(Q_WS_X11) || defined(Q_WS_WIN)
QPixmap *move_cursor;
QPixmap *copy_cursor;
QPixmap *link_cursor;
#endif
-#endif
#if defined(Q_WS_WIN)
QPixmap *ignore_cursor;
#endif
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index e937918..2be3ed3 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1341,6 +1341,10 @@ void QSymbianControl::setFocusSafely(bool focus)
// focus in Symbian. If this is not executed, the control which happens to be on
// the top of the stack may randomly be assigned focus by Symbian, for example
// when creating new windows (specifically in CCoeAppUi::HandleStackChanged()).
+
+ // Close any popups.
+ CEikonEnv::Static()->EikAppUi()->StopDisplayingMenuBar();
+
if (focus) {
S60->appUi()->RemoveFromStack(this);
// Symbian doesn't automatically remove focus from the last focused control, so we need to
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
index e7b7ed8..d8fb74c 100644
--- a/src/gui/kernel/qapplication_x11.cpp
+++ b/src/gui/kernel/qapplication_x11.cpp
@@ -74,7 +74,6 @@
#include "qevent_p.h"
#include "qvarlengtharray.h"
#include "qdebug.h"
-#include <private/qunicodetables_p.h>
#include <private/qcrashhandler_p.h>
#include <private/qcolor_p.h>
#include <private/qcursor_p.h>
diff --git a/src/gui/kernel/qdnd_win.cpp b/src/gui/kernel/qdnd_win.cpp
index a164c2a..7083886 100644
--- a/src/gui/kernel/qdnd_win.cpp
+++ b/src/gui/kernel/qdnd_win.cpp
@@ -515,7 +515,7 @@ static inline Qt::MouseButtons keystate_to_mousebutton(DWORD grfKeyState)
//---------------------------------------------------------------------
// IDropSource Methods
//---------------------------------------------------------------------
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState)
{
#ifdef QDND_DEBUG
@@ -545,7 +545,7 @@ QOleDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState)
}
}
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropSource::GiveFeedback(DWORD dwEffect)
{
Qt::DropAction action = translateToQDragDropAction(dwEffect);
@@ -626,7 +626,7 @@ QOleDropTarget::Release(void)
// IDropTarget Methods
//---------------------------------------------------------------------
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropTarget::DragEnter(LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
{
#ifdef QDND_DEBUG
@@ -688,7 +688,7 @@ void QOleDropTarget::sendDragEnterEvent(QWidget *dragEnterWidget, DWORD grfKeySt
}
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
{
#ifdef QDND_DEBUG
@@ -758,7 +758,7 @@ QOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
return NOERROR;
}
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropTarget::DragLeave()
{
#ifdef QDND_DEBUG
@@ -785,7 +785,7 @@ QOleDropTarget::DragLeave()
#define KEY_STATE_BUTTON_MASK (MK_LBUTTON | MK_MBUTTON | MK_RBUTTON)
-STDMETHODIMP
+QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP
QOleDropTarget::Drop(LPDATAOBJECT /*pDataObj*/, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
{
#ifdef QDND_DEBUG
diff --git a/src/gui/painting/qbezier.cpp b/src/gui/painting/qbezier.cpp
index 2a9b31a..54c81ba 100644
--- a/src/gui/painting/qbezier.cpp
+++ b/src/gui/painting/qbezier.cpp
@@ -293,36 +293,6 @@ static ShiftResult good_offset(const QBezier *b1, const QBezier *b2, qreal offse
return Ok;
}
-static inline QLineF qline_shifted(const QPointF &p1, const QPointF &p2, qreal offset)
-{
- QLineF l(p1, p2);
- QLineF ln = l.normalVector().unitVector();
- l.translate(ln.dx() * offset, ln.dy() * offset);
- return l;
-}
-
-static bool qbezier_is_line(QPointF *points, int pointCount)
-{
- Q_ASSERT(pointCount > 2);
-
- qreal dx13 = points[2].x() - points[0].x();
- qreal dy13 = points[2].y() - points[0].y();
-
- qreal dx12 = points[1].x() - points[0].x();
- qreal dy12 = points[1].y() - points[0].y();
-
- if (pointCount == 3) {
- return qFuzzyCompare(dx12 * dy13, dx13 * dy12);
- } else if (pointCount == 4) {
- qreal dx14 = points[3].x() - points[0].x();
- qreal dy14 = points[3].y() - points[0].y();
-
- return (qFuzzyCompare(dx12 * dy13, dx13 * dy12) && qFuzzyCompare(dx12 * dy14, dx14 * dy12));
- }
-
- return false;
-}
-
static ShiftResult shift(const QBezier *orig, QBezier *shifted, qreal offset, qreal threshold)
{
int map[4];
@@ -353,17 +323,6 @@ static ShiftResult shift(const QBezier *orig, QBezier *shifted, qreal offset, qr
if (np == 1)
return Discard;
- // We need to specialcase lines of 3 or 4 points due to numerical
- // instability in intersections below
- if (np > 2 && qbezier_is_line(points, np)) {
- if (points[0] == points[np-1])
- return Discard;
-
- QLineF l = qline_shifted(points[0], points[np-1], offset);
- *shifted = QBezier::fromPoints(l.p1(), l.pointAt(qreal(0.33)), l.pointAt(qreal(0.66)), l.p2());
- return Ok;
- }
-
QRectF b = orig->bounds();
if (np == 4 && b.width() < .1*offset && b.height() < .1*offset) {
qreal l = (orig->x1 - orig->x2)*(orig->x1 - orig->x2) +
diff --git a/src/gui/painting/qprintengine_ps.cpp b/src/gui/painting/qprintengine_ps.cpp
index 28e9a7a..ca694ae 100644
--- a/src/gui/painting/qprintengine_ps.cpp
+++ b/src/gui/painting/qprintengine_ps.cpp
@@ -64,7 +64,6 @@
#include "qbitmap.h"
#include "qregion.h"
#include "qimagewriter.h"
-#include <private/qunicodetables_p.h>
#include <private/qpainterpath_p.h>
#include <qdebug.h>
#include <private/qdrawhelper_p.h>
diff --git a/src/gui/painting/qprintengine_win.cpp b/src/gui/painting/qprintengine_win.cpp
index dd4de99..afae0a5 100644
--- a/src/gui/painting/qprintengine_win.cpp
+++ b/src/gui/painting/qprintengine_win.cpp
@@ -851,7 +851,7 @@ void QWin32PrintEnginePrivate::strokePath_dev(const QPainterPath &path, const QC
HPEN pen = ExtCreatePen(((penWidth == 0) ? PS_COSMETIC : PS_GEOMETRIC)
| PS_SOLID | capStyle | joinStyle,
- penWidth, &brush, 0, 0);
+ (penWidth == 0) ? 1 : penWidth, &brush, 0, 0);
HGDIOBJ old_pen = SelectObject(hdc, pen);
StrokePath(hdc);
diff --git a/src/gui/painting/qrasterizer.cpp b/src/gui/painting/qrasterizer.cpp
index f8f8afb..4fded1f 100644
--- a/src/gui/painting/qrasterizer.cpp
+++ b/src/gui/painting/qrasterizer.cpp
@@ -65,6 +65,12 @@ typedef int Q16Dot16;
#define COORD_ROUNDING 1 // 0: round up, 1: round down
#define COORD_OFFSET 32 // 26.6, 32 is half a pixel
+static inline QT_FT_Vector PointToVector(const QPointF &p)
+{
+ QT_FT_Vector result = { QT_FT_Pos(p.x() * 64), QT_FT_Pos(p.y() * 64) };
+ return result;
+}
+
class QSpanBuffer {
public:
QSpanBuffer(ProcessSpans blend, void *data, const QRect &clipRect)
@@ -693,9 +699,9 @@ static Q16Dot16 intersectPixelFP(int x, Q16Dot16 top, Q16Dot16 bottom, Q16Dot16
}
}
-static inline bool q16Dot16Compare(qreal p1, qreal p2)
+static inline bool q26Dot6Compare(qreal p1, qreal p2)
{
- return FloatToQ16Dot16(p2 - p1) == 0;
+ return int((p2 - p1) * 64.) == 0;
}
static inline qreal qFloorF(qreal v)
@@ -708,6 +714,12 @@ static inline qreal qFloorF(qreal v)
return floor(v);
}
+static inline QPointF snapTo26Dot6Grid(const QPointF &p)
+{
+ return QPointF(qFloorF(p.x() * 64) * (1 / qreal(64)),
+ qFloorF(p.y() * 64) * (1 / qreal(64)));
+}
+
void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width, bool squareCap)
{
if (a == b || width == 0 || d->clipRect.isEmpty())
@@ -718,17 +730,21 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
QPointF pa = a;
QPointF pb = b;
- QPointF offs = QPointF(qAbs(b.y() - a.y()), qAbs(b.x() - a.x())) * width * 0.5;
- if (squareCap)
- offs += QPointF(offs.y(), offs.x());
+ if (squareCap) {
+ QPointF delta = pb - pa;
+ pa -= (0.5f * width) * delta;
+ pb += (0.5f * width) * delta;
+ }
+
+ QPointF offs = QPointF(qAbs(b.y() - a.y()), qAbs(b.x() - a.x())) * width * 0.5;
const QRectF clip(d->clipRect.topLeft() - offs, d->clipRect.bottomRight() + QPoint(1, 1) + offs);
- if (!clip.contains(a) || !clip.contains(b)) {
+ if (!clip.contains(pa) || !clip.contains(pb)) {
qreal t1 = 0;
qreal t2 = 1;
- const qreal o[2] = { a.x(), a.y() };
- const qreal d[2] = { b.x() - a.x(), b.y() - a.y() };
+ const qreal o[2] = { pa.x(), pa.y() };
+ const qreal d[2] = { pb.x() - pa.x(), pb.y() - pa.y() };
const qreal low[2] = { clip.left(), clip.top() };
const qreal high[2] = { clip.right(), clip.bottom() };
@@ -751,8 +767,12 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
if (t1 >= t2)
return;
}
- pa = a + (b - a) * t1;
- pb = a + (b - a) * t2;
+
+ QPointF npa = pa + (pb - pa) * t1;
+ QPointF npb = pa + (pb - pa) * t2;
+
+ pa = npa;
+ pb = npb;
}
if (!d->antialiased) {
@@ -763,15 +783,6 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
}
{
- const qreal gridResolution = 64;
- const qreal reciprocal = 1 / gridResolution;
-
- // snap to grid to prevent large slopes
- pa.rx() = qFloorF(pa.rx() * gridResolution) * reciprocal;
- pa.ry() = qFloorF(pa.ry() * gridResolution) * reciprocal;
- pb.rx() = qFloorF(pb.rx() * gridResolution) * reciprocal;
- pb.ry() = qFloorF(pb.ry() * gridResolution) * reciprocal;
-
// old delta
const QPointF d0 = a - b;
const qreal w0 = d0.x() * d0.x() + d0.y() * d0.y();
@@ -789,7 +800,7 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
QSpanBuffer buffer(d->blend, d->data, d->clipRect);
- if (q16Dot16Compare(pa.y(), pb.y())) {
+ if (q26Dot6Compare(pa.y(), pb.y())) {
const qreal x = (pa.x() + pb.x()) * 0.5f;
const qreal dx = qAbs(pb.x() - pa.x()) * 0.5f;
@@ -799,26 +810,16 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
pa = QPointF(x, y - dy);
pb = QPointF(x, y + dy);
- if (squareCap)
- width = 1 / width + 1.0f;
- else
- width = 1 / width;
-
- squareCap = false;
+ width = 1 / width;
}
- if (q16Dot16Compare(pa.x(), pb.x())) {
+ if (q26Dot6Compare(pa.x(), pb.x())) {
if (pa.y() > pb.y())
qSwap(pa, pb);
const qreal dy = pb.y() - pa.y();
const qreal halfWidth = 0.5f * width * dy;
- if (squareCap) {
- pa.ry() -= halfWidth;
- pb.ry() += halfWidth;
- }
-
qreal left = pa.x() - halfWidth;
qreal right = pa.x() + halfWidth;
@@ -828,7 +829,7 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
pa.ry() = qBound(qreal(d->clipRect.top()), pa.y(), qreal(d->clipRect.bottom() + 1));
pb.ry() = qBound(qreal(d->clipRect.top()), pb.y(), qreal(d->clipRect.bottom() + 1));
- if (q16Dot16Compare(left, right) || q16Dot16Compare(pa.y(), pb.y()))
+ if (q26Dot6Compare(left, right) || q26Dot6Compare(pa.y(), pb.y()))
return;
if (d->antialiased) {
@@ -899,11 +900,6 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
delta *= 0.5f * width;
const QPointF perp(delta.y(), -delta.x());
- if (squareCap) {
- pa -= delta;
- pb += delta;
- }
-
QPointF top;
QPointF left;
QPointF right;
@@ -921,14 +917,36 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
bottom = pb + perp;
}
+ top = snapTo26Dot6Grid(top);
+ bottom = snapTo26Dot6Grid(bottom);
+ left = snapTo26Dot6Grid(left);
+ right = snapTo26Dot6Grid(right);
+
const qreal topBound = qBound(qreal(d->clipRect.top()), top.y(), qreal(d->clipRect.bottom()));
const qreal bottomBound = qBound(qreal(d->clipRect.top()), bottom.y(), qreal(d->clipRect.bottom()));
- const qreal leftSlope = (left.x() - top.x()) / (left.y() - top.y());
- const qreal rightSlope = -1.0f / leftSlope;
+ const QPointF topLeftEdge = left - top;
+ const QPointF topRightEdge = right - top;
+ const QPointF bottomLeftEdge = bottom - left;
+ const QPointF bottomRightEdge = bottom - right;
+
+ const qreal topLeftSlope = topLeftEdge.x() / topLeftEdge.y();
+ const qreal bottomLeftSlope = bottomLeftEdge.x() / bottomLeftEdge.y();
+
+ const qreal topRightSlope = topRightEdge.x() / topRightEdge.y();
+ const qreal bottomRightSlope = bottomRightEdge.x() / bottomRightEdge.y();
+
+ const Q16Dot16 topLeftSlopeFP = FloatToQ16Dot16(topLeftSlope);
+ const Q16Dot16 topRightSlopeFP = FloatToQ16Dot16(topRightSlope);
- const Q16Dot16 leftSlopeFP = FloatToQ16Dot16(leftSlope);
- const Q16Dot16 rightSlopeFP = FloatToQ16Dot16(rightSlope);
+ const Q16Dot16 bottomLeftSlopeFP = FloatToQ16Dot16(bottomLeftSlope);
+ const Q16Dot16 bottomRightSlopeFP = FloatToQ16Dot16(bottomRightSlope);
+
+ const Q16Dot16 invTopLeftSlopeFP = FloatToQ16Dot16(1 / topLeftSlope);
+ const Q16Dot16 invTopRightSlopeFP = FloatToQ16Dot16(1 / topRightSlope);
+
+ const Q16Dot16 invBottomLeftSlopeFP = FloatToQ16Dot16(1 / bottomLeftSlope);
+ const Q16Dot16 invBottomRightSlopeFP = FloatToQ16Dot16(1 / bottomRightSlope);
if (d->antialiased) {
const Q16Dot16 iTopFP = IntToQ16Dot16(int(topBound));
@@ -936,16 +954,16 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
const Q16Dot16 iRightFP = IntToQ16Dot16(int(right.y()));
const Q16Dot16 iBottomFP = IntToQ16Dot16(int(bottomBound));
- Q16Dot16 leftIntersectAf = FloatToQ16Dot16(top.x() + (int(topBound) - top.y()) * leftSlope);
- Q16Dot16 rightIntersectAf = FloatToQ16Dot16(top.x() + (int(topBound) - top.y()) * rightSlope);
+ Q16Dot16 leftIntersectAf = FloatToQ16Dot16(top.x() + (int(topBound) - top.y()) * topLeftSlope);
+ Q16Dot16 rightIntersectAf = FloatToQ16Dot16(top.x() + (int(topBound) - top.y()) * topRightSlope);
Q16Dot16 leftIntersectBf = 0;
Q16Dot16 rightIntersectBf = 0;
if (iLeftFP < iTopFP)
- leftIntersectBf = FloatToQ16Dot16(left.x() + (int(topBound) - left.y()) * rightSlope);
+ leftIntersectBf = FloatToQ16Dot16(left.x() + (int(topBound) - left.y()) * bottomLeftSlope);
if (iRightFP < iTopFP)
- rightIntersectBf = FloatToQ16Dot16(right.x() + (int(topBound) - right.y()) * leftSlope);
+ rightIntersectBf = FloatToQ16Dot16(right.x() + (int(topBound) - right.y()) * bottomRightSlope);
Q16Dot16 rowTop, rowBottomLeft, rowBottomRight, rowTopLeft, rowTopRight, rowBottom;
Q16Dot16 topLeftIntersectAf, topLeftIntersectBf, topRightIntersectAf, topRightIntersectBf;
@@ -960,9 +978,9 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
rowTop = qMax(iTopFP, yTopFP);
topLeftIntersectAf = leftIntersectAf +
- Q16Dot16Multiply(leftSlopeFP, rowTop - iTopFP);
+ Q16Dot16Multiply(topLeftSlopeFP, rowTop - iTopFP);
topRightIntersectAf = rightIntersectAf +
- Q16Dot16Multiply(rightSlopeFP, rowTop - iTopFP);
+ Q16Dot16Multiply(topRightSlopeFP, rowTop - iTopFP);
Q16Dot16 yFP = iTopFP;
while (yFP <= iBottomFP) {
@@ -974,30 +992,30 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
if (yFP == iLeftFP) {
const int y = Q16Dot16ToInt(yFP);
- leftIntersectBf = FloatToQ16Dot16(left.x() + (y - left.y()) * rightSlope);
- topLeftIntersectBf = leftIntersectBf + Q16Dot16Multiply(rightSlopeFP, rowTopLeft - yFP);
- bottomLeftIntersectAf = leftIntersectAf + Q16Dot16Multiply(leftSlopeFP, rowBottomLeft - yFP);
+ leftIntersectBf = FloatToQ16Dot16(left.x() + (y - left.y()) * bottomLeftSlope);
+ topLeftIntersectBf = leftIntersectBf + Q16Dot16Multiply(bottomLeftSlopeFP, rowTopLeft - yFP);
+ bottomLeftIntersectAf = leftIntersectAf + Q16Dot16Multiply(topLeftSlopeFP, rowBottomLeft - yFP);
} else {
topLeftIntersectBf = leftIntersectBf;
- bottomLeftIntersectAf = leftIntersectAf + leftSlopeFP;
+ bottomLeftIntersectAf = leftIntersectAf + topLeftSlopeFP;
}
if (yFP == iRightFP) {
const int y = Q16Dot16ToInt(yFP);
- rightIntersectBf = FloatToQ16Dot16(right.x() + (y - right.y()) * leftSlope);
- topRightIntersectBf = rightIntersectBf + Q16Dot16Multiply(leftSlopeFP, rowTopRight - yFP);
- bottomRightIntersectAf = rightIntersectAf + Q16Dot16Multiply(rightSlopeFP, rowBottomRight - yFP);
+ rightIntersectBf = FloatToQ16Dot16(right.x() + (y - right.y()) * bottomRightSlope);
+ topRightIntersectBf = rightIntersectBf + Q16Dot16Multiply(bottomRightSlopeFP, rowTopRight - yFP);
+ bottomRightIntersectAf = rightIntersectAf + Q16Dot16Multiply(topRightSlopeFP, rowBottomRight - yFP);
} else {
topRightIntersectBf = rightIntersectBf;
- bottomRightIntersectAf = rightIntersectAf + rightSlopeFP;
+ bottomRightIntersectAf = rightIntersectAf + topRightSlopeFP;
}
if (yFP == iBottomFP) {
- bottomLeftIntersectBf = leftIntersectBf + Q16Dot16Multiply(rightSlopeFP, rowBottom - yFP);
- bottomRightIntersectBf = rightIntersectBf + Q16Dot16Multiply(leftSlopeFP, rowBottom - yFP);
+ bottomLeftIntersectBf = leftIntersectBf + Q16Dot16Multiply(bottomLeftSlopeFP, rowBottom - yFP);
+ bottomRightIntersectBf = rightIntersectBf + Q16Dot16Multiply(bottomRightSlopeFP, rowBottom - yFP);
} else {
- bottomLeftIntersectBf = leftIntersectBf + rightSlopeFP;
- bottomRightIntersectBf = rightIntersectBf + leftSlopeFP;
+ bottomLeftIntersectBf = leftIntersectBf + bottomLeftSlopeFP;
+ bottomRightIntersectBf = rightIntersectBf + bottomRightSlopeFP;
}
if (yFP < iLeftFP) {
@@ -1042,21 +1060,21 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
if (yFP <= iLeftFP)
excluded += intersectPixelFP(x, rowTop, rowBottomLeft,
bottomLeftIntersectAf, topLeftIntersectAf,
- leftSlopeFP, -rightSlopeFP);
+ topLeftSlopeFP, invTopLeftSlopeFP);
if (yFP >= iLeftFP)
excluded += intersectPixelFP(x, rowTopLeft, rowBottom,
topLeftIntersectBf, bottomLeftIntersectBf,
- rightSlopeFP, -leftSlopeFP);
+ bottomLeftSlopeFP, invBottomLeftSlopeFP);
if (x >= rightMin) {
if (yFP <= iRightFP)
excluded += (rowBottomRight - rowTop) - intersectPixelFP(x, rowTop, rowBottomRight,
topRightIntersectAf, bottomRightIntersectAf,
- rightSlopeFP, -leftSlopeFP);
+ topRightSlopeFP, invTopRightSlopeFP);
if (yFP >= iRightFP)
excluded += (rowBottom - rowTopRight) - intersectPixelFP(x, rowTopRight, rowBottom,
bottomRightIntersectBf, topRightIntersectBf,
- leftSlopeFP, -rightSlopeFP);
+ bottomRightSlopeFP, invBottomRightSlopeFP);
}
Q16Dot16 coverage = rowHeight - excluded;
@@ -1074,11 +1092,11 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
if (yFP <= iRightFP)
excluded += (rowBottomRight - rowTop) - intersectPixelFP(x, rowTop, rowBottomRight,
topRightIntersectAf, bottomRightIntersectAf,
- rightSlopeFP, -leftSlopeFP);
+ topRightSlopeFP, invTopRightSlopeFP);
if (yFP >= iRightFP)
excluded += (rowBottom - rowTopRight) - intersectPixelFP(x, rowTopRight, rowBottom,
bottomRightIntersectBf, topRightIntersectBf,
- leftSlopeFP, -rightSlopeFP);
+ bottomRightSlopeFP, invBottomRightSlopeFP);
Q16Dot16 coverage = rowHeight - excluded;
buffer.addSpan(x, 1, Q16Dot16ToInt(yFP),
@@ -1086,10 +1104,10 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
++x;
}
- leftIntersectAf += leftSlopeFP;
- leftIntersectBf += rightSlopeFP;
- rightIntersectAf += rightSlopeFP;
- rightIntersectBf += leftSlopeFP;
+ leftIntersectAf += topLeftSlopeFP;
+ leftIntersectBf += bottomLeftSlopeFP;
+ rightIntersectAf += topRightSlopeFP;
+ rightIntersectBf += bottomRightSlopeFP;
topLeftIntersectAf = leftIntersectAf;
topRightIntersectAf = rightIntersectAf;
@@ -1103,10 +1121,10 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
int iBottom = bottom.y() < 0.5f? -1 : int(bottom.y() - 0.5f);
int iMiddle = qMin(iLeft, iRight);
- Q16Dot16 leftIntersectAf = FloatToQ16Dot16(top.x() + 0.5f + (iTop + 0.5f - top.y()) * leftSlope);
- Q16Dot16 leftIntersectBf = FloatToQ16Dot16(left.x() + 0.5f + (iLeft + 1.5f - left.y()) * rightSlope);
- Q16Dot16 rightIntersectAf = FloatToQ16Dot16(top.x() - 0.5f + (iTop + 0.5f - top.y()) * rightSlope);
- Q16Dot16 rightIntersectBf = FloatToQ16Dot16(right.x() - 0.5f + (iRight + 1.5f - right.y()) * leftSlope);
+ Q16Dot16 leftIntersectAf = FloatToQ16Dot16(top.x() + 0.5f + (iTop + 0.5f - top.y()) * topLeftSlope);
+ Q16Dot16 leftIntersectBf = FloatToQ16Dot16(left.x() + 0.5f + (iLeft + 1.5f - left.y()) * bottomLeftSlope);
+ Q16Dot16 rightIntersectAf = FloatToQ16Dot16(top.x() - 0.5f + (iTop + 0.5f - top.y()) * topRightSlope);
+ Q16Dot16 rightIntersectBf = FloatToQ16Dot16(right.x() - 0.5f + (iRight + 1.5f - right.y()) * bottomRightSlope);
int ny;
int y = iTop;
@@ -1128,10 +1146,10 @@ void QRasterizer::rasterizeLine(const QPointF &a, const QPointF &b, qreal width,
ri += rs; \
}
- DO_SEGMENT(iMiddle, leftIntersectAf, rightIntersectAf, leftSlopeFP, rightSlopeFP)
- DO_SEGMENT(iRight, leftIntersectBf, rightIntersectAf, rightSlopeFP, rightSlopeFP)
- DO_SEGMENT(iLeft, leftIntersectAf, rightIntersectBf, leftSlopeFP, leftSlopeFP)
- DO_SEGMENT(iBottom, leftIntersectBf, rightIntersectBf, rightSlopeFP, leftSlopeFP)
+ DO_SEGMENT(iMiddle, leftIntersectAf, rightIntersectAf, topLeftSlopeFP, topRightSlopeFP)
+ DO_SEGMENT(iRight, leftIntersectBf, rightIntersectAf, bottomLeftSlopeFP, topRightSlopeFP)
+ DO_SEGMENT(iLeft, leftIntersectAf, rightIntersectBf, topLeftSlopeFP, bottomRightSlopeFP);
+ DO_SEGMENT(iBottom, leftIntersectBf, rightIntersectBf, bottomLeftSlopeFP, bottomRightSlopeFP);
#undef DO_SEGMENT
}
}
@@ -1183,12 +1201,6 @@ void QRasterizer::rasterize(const QT_FT_Outline *outline, Qt::FillRule fillRule)
d->scanConverter.end();
}
-static inline QT_FT_Vector PointToVector(const QPointF &p)
-{
- QT_FT_Vector result = { QT_FT_Pos(p.x() * 64), QT_FT_Pos(p.y() * 64) };
- return result;
-}
-
void QRasterizer::rasterize(const QPainterPath &path, Qt::FillRule fillRule)
{
if (path.isEmpty())
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 631a9cf..b609f7b 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -47,10 +47,6 @@
#include "private/qnativeimage_p.h"
#include "private/qfontengine_ft_p.h"
-#ifndef QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH
-#define QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH 256
-#endif
-
QT_BEGIN_NAMESPACE
// #define CACHE_DEBUG
@@ -137,10 +133,18 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
m_currentRowHeight = qMax(m_currentRowHeight, c.h + margin * 2);
if (m_cx + c.w > m_w) {
- // no room on the current line, start new glyph strip
- m_cx = 0;
- m_cy += m_currentRowHeight + paddingDoubled;
- m_currentRowHeight = 0; // New row
+ int new_width = m_w*2;
+ while (new_width < m_cx + c.w)
+ new_width *= 2;
+ if (new_width <= maxTextureWidth()) {
+ resizeTextureData(new_width, m_h);
+ m_w = new_width;
+ } else {
+ // no room on the current line, start new glyph strip
+ m_cx = 0;
+ m_cy += m_currentRowHeight + paddingDoubled;
+ m_currentRowHeight = 0; // New row
+ }
}
if (m_cy + c.h > m_h) {
int new_height = m_h*2;
diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h
index a818978..e6d2b22 100644
--- a/src/gui/painting/qtextureglyphcache_p.h
+++ b/src/gui/painting/qtextureglyphcache_p.h
@@ -64,6 +64,10 @@
# undef m_type
#endif
+#ifndef QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH
+#define QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH 256
+#endif
+
struct glyph_metrics_t;
typedef unsigned int glyph_t;
@@ -113,6 +117,8 @@ public:
QHash<glyph_t, Coord> coords;
QImage textureMapForGlyph(glyph_t g) const;
+ virtual int maxTextureWidth() const { return QT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH; }
+ virtual int maxTextureHeight() const { return 32768; }
protected:
QFontEngine *m_current_fontengine;
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 5996032..bafc5f3 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -3436,8 +3436,7 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event)
break;
}
case QEvent::MouseButtonRelease: {
- const QWidget *w = QApplication::widgetAt(QCursor::pos());
- if (w && d->m_pressedWidget) {
+ if (d->m_pressedWidget) {
d->m_pressedWidget->update();
d->m_pressedWidget = 0;
}
diff --git a/src/gui/styles/qstylehelper_p.h b/src/gui/styles/qstylehelper_p.h
index 71fce55..3759929 100644
--- a/src/gui/styles/qstylehelper_p.h
+++ b/src/gui/styles/qstylehelper_p.h
@@ -108,7 +108,7 @@ template <typename T>
{
typedef HexString<T> type;
enum { ExactSize = true };
- static int size(const HexString<T> &str) { return sizeof(str.val) * 2; }
+ static int size(const HexString<T> &) { return sizeof(T) * 2; }
static inline void appendTo(const HexString<T> &str, QChar *&out) { str.write(out); }
};
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index 7a5dec4..9506006 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -43,6 +43,7 @@
#include "qstatictext_p.h"
#include <private/qtextengine_p.h>
#include <private/qfontengine_p.h>
+#include <qabstracttextdocumentlayout.h>
#include <QtGui/qapplication.h>
@@ -654,7 +655,9 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
p->save();
p->translate(topLeftPosition);
- document.drawContents(p);
+ QAbstractTextDocumentLayout::PaintContext ctx;
+ ctx.palette.setColor(QPalette::Text, p->pen().color());
+ document.documentLayout()->draw(p, ctx);
p->restore();
if (textWidth >= 0.0)
diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index 5fe0c0c..7f2c4e9 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -404,12 +404,6 @@ void QTextControlPrivate::init(Qt::TextFormat format, const QString &text, QText
Q_Q(QTextControl);
setContent(format, text, document);
- QWidget *parentWidget = qobject_cast<QWidget*>(parent);
- if (parentWidget) {
- QTextOption opt = doc->defaultTextOption();
- opt.setTextDirection(parentWidget->layoutDirection());
- doc->setDefaultTextOption(opt);
- }
doc->setUndoRedoEnabled(interactionFlags & Qt::TextEditable);
q->setCursorWidth(-1);
}
diff --git a/src/gui/text/qtextdocumentfragment.cpp b/src/gui/text/qtextdocumentfragment.cpp
index 7c5f973..26346ca 100644
--- a/src/gui/text/qtextdocumentfragment.cpp
+++ b/src/gui/text/qtextdocumentfragment.cpp
@@ -43,7 +43,6 @@
#include "qtextdocumentfragment_p.h"
#include "qtextcursor_p.h"
#include "qtextlist.h"
-#include "private/qunicodetables_p.h"
#include <qdebug.h>
#include <qtextcodec.h>
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index e190379..ca0942e 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -53,7 +53,6 @@
#include "qtextdocument_p.h"
#include "qtextcursor.h"
#include "qfont_p.h"
-#include "private/qunicodetables_p.h"
#include "private/qfunctions_p.h"
#ifndef QT_NO_TEXTHTMLPARSER
diff --git a/src/gui/widgets/qlabel.cpp b/src/gui/widgets/qlabel.cpp
index bdbd0b0..42be03b 100644
--- a/src/gui/widgets/qlabel.cpp
+++ b/src/gui/widgets/qlabel.cpp
@@ -635,7 +635,7 @@ QSize QLabelPrivate::sizeForWidth(int w) const
br = movie->currentPixmap().rect();
#endif
else if (isTextLabel) {
- int align = QStyle::visualAlignment(q->layoutDirection(), QFlag(this->align));
+ int align = QStyle::visualAlignment(textDirection(), QFlag(this->align));
// Add indentation
int m = indent;
@@ -1059,7 +1059,8 @@ void QLabel::paintEvent(QPaintEvent *)
drawFrame(&painter);
QRect cr = contentsRect();
cr.adjust(d->margin, d->margin, -d->margin, -d->margin);
- int align = QStyle::visualAlignment(layoutDirection(), QFlag(d->align));
+ int align = QStyle::visualAlignment(d->isTextLabel ? d->textDirection()
+ : layoutDirection(), QFlag(d->align));
#ifndef QT_NO_MOVIE
if (d->movie) {
@@ -1119,7 +1120,8 @@ void QLabel::paintEvent(QPaintEvent *)
d->control->drawContents(&painter, QRectF(), this);
painter.restore();
} else {
- int flags = align;
+ int flags = align | (d->textDirection() == Qt::LeftToRight ? Qt::TextForceLeftToRight
+ : Qt::TextForceRightToLeft);
if (d->hasShortcut) {
flags |= Qt::TextShowMnemonic;
if (!style->styleHint(QStyle::SH_UnderlineShortcut, &opt, this))
@@ -1447,10 +1449,6 @@ void QLabel::changeEvent(QEvent *ev)
d->control->setPalette(palette());
} else if (ev->type() == QEvent::ContentsRectChange) {
d->updateLabel();
- } else if (ev->type() == QEvent::LayoutDirectionChange) {
- if (d->isTextLabel && d->control) {
- d->sendControlEvent(ev);
- }
}
QFrame::changeEvent(ev);
}
@@ -1486,6 +1484,15 @@ void QLabel::setScaledContents(bool enable)
update(contentsRect());
}
+Qt::LayoutDirection QLabelPrivate::textDirection() const
+{
+ if (control) {
+ QTextOption opt = control->document()->defaultTextOption();
+ return opt.textDirection();
+ }
+
+ return text.isRightToLeft() ? Qt::RightToLeft : Qt::LeftToRight;
+}
/*!
\fn void QLabel::setAlignment(Qt::AlignmentFlag flag)
@@ -1503,7 +1510,8 @@ QRect QLabelPrivate::documentRect() const
Q_ASSERT_X(isTextLabel, "documentRect", "document rect called for label that is not a text label!");
QRect cr = q->contentsRect();
cr.adjust(margin, margin, -margin, -margin);
- const int align = QStyle::visualAlignment(q->layoutDirection(), QFlag(this->align));
+ const int align = QStyle::visualAlignment(isTextLabel ? textDirection()
+ : q->layoutDirection(), QFlag(this->align));
int m = indent;
if (m < 0 && q->frameWidth()) // no indent, but we do have a frame
m = q->fontMetrics().width(QLatin1Char('x')) / 2 - margin;
@@ -1564,7 +1572,6 @@ void QLabelPrivate::ensureTextLayouted() const
if (!textLayoutDirty)
return;
ensureTextPopulated();
- Q_Q(const QLabel);
if (control) {
QTextDocument *doc = control->document();
QTextOption opt = doc->defaultTextOption();
@@ -1576,8 +1583,6 @@ void QLabelPrivate::ensureTextLayouted() const
else
opt.setWrapMode(QTextOption::ManualWrap);
- opt.setTextDirection(q->layoutDirection());
-
doc->setDefaultTextOption(opt);
QTextFrameFormat fmt = doc->rootFrame()->frameFormat();
diff --git a/src/gui/widgets/qlabel_p.h b/src/gui/widgets/qlabel_p.h
index fba7224..83624c7 100644
--- a/src/gui/widgets/qlabel_p.h
+++ b/src/gui/widgets/qlabel_p.h
@@ -132,6 +132,7 @@ public:
QRectF layoutRect() const;
QRect documentRect() const;
QPoint layoutPoint(const QPoint& p) const;
+ Qt::LayoutDirection textDirection() const;
#ifndef QT_NO_CONTEXTMENU
QMenu *createStandardContextMenu(const QPoint &pos);
#endif
diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp
index ab2bdea..83ba15a 100644
--- a/src/gui/widgets/qmenu_symbian.cpp
+++ b/src/gui/widgets/qmenu_symbian.cpp
@@ -168,11 +168,11 @@ static void qt_symbian_insert_action(QSymbianMenuAction* action, QList<SymbianMe
if (action->action->menu()->actions().size() > 0) {
for (int c2= 0; c2 < action->action->menu()->actions().size(); ++c2) {
- QSymbianMenuAction *symbianAction2 = new QSymbianMenuAction;
+ QScopedPointer<QSymbianMenuAction> symbianAction2(new QSymbianMenuAction);
symbianAction2->action = action->action->menu()->actions().at(c2);
QMenu * menu = symbianAction2->action->menu();
symbianAction2->command = qt_symbian_menu_static_cmd_id++;
- qt_symbian_insert_action(symbianAction2, &(menuItem->children));
+ qt_symbian_insert_action(symbianAction2.data(), &(menuItem->children));
}
}
@@ -432,11 +432,11 @@ void QMenuBarPrivate::QSymbianMenuBarPrivate::removeAction(QSymbianMenuAction *a
void QMenuBarPrivate::QSymbianMenuBarPrivate::insertNativeMenuItems(const QList<QAction*> &actions)
{
for (int i = 0; i <actions.size(); ++i) {
- QSymbianMenuAction *symbianActionTopLevel = new QSymbianMenuAction;
+ QScopedPointer<QSymbianMenuAction> symbianActionTopLevel(new QSymbianMenuAction);
symbianActionTopLevel->action = actions.at(i);
symbianActionTopLevel->parent = 0;
symbianActionTopLevel->command = qt_symbian_menu_static_cmd_id++;
- qt_symbian_insert_action(symbianActionTopLevel, &symbianMenus);
+ qt_symbian_insert_action(symbianActionTopLevel.data(), &symbianMenus);
}
}
diff --git a/src/gui/widgets/qsplashscreen.cpp b/src/gui/widgets/qsplashscreen.cpp
index 8be0cf8..d1fb686 100644
--- a/src/gui/widgets/qsplashscreen.cpp
+++ b/src/gui/widgets/qsplashscreen.cpp
@@ -186,6 +186,13 @@ void QSplashScreen::repaint()
Draws the \a message text onto the splash screen with color \a
color and aligns the text according to the flags in \a alignment.
+ To make sure the splash screen is repainted immediately, you can
+ call \l{QCoreApplication}'s
+ \l{QCoreApplication::}{processEvents()} after the call to
+ showMessage(). You usually want this to make sure that the message
+ is kept up to date with what your application is doing (e.g.,
+ loading files).
+
\sa Qt::Alignment, clearMessage()
*/
void QSplashScreen::showMessage(const QString &message, int alignment,
diff --git a/src/imports/folderlistmodel/folderlistmodel.pro b/src/imports/folderlistmodel/folderlistmodel.pro
index c306037..b2e5360 100644
--- a/src/imports/folderlistmodel/folderlistmodel.pro
+++ b/src/imports/folderlistmodel/folderlistmodel.pro
@@ -8,7 +8,6 @@ SOURCES += qdeclarativefolderlistmodel.cpp plugin.cpp
HEADERS += qdeclarativefolderlistmodel.h
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/$$TARGETPATH
-else:DESTDIR = .
target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
qmldir.files += $$PWD/qmldir
@@ -17,8 +16,9 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
symbian:{
TARGET.UID3 = 0x20021320
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
-
- importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+
+ isEmpty(DESTDIR):importFiles.sources = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/gestures/gestures.pro b/src/imports/gestures/gestures.pro
index 8a772da..18ffcb9 100644
--- a/src/imports/gestures/gestures.pro
+++ b/src/imports/gestures/gestures.pro
@@ -8,7 +8,6 @@ SOURCES += qdeclarativegesturearea.cpp plugin.cpp
HEADERS += qdeclarativegesturearea_p.h
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/$$TARGETPATH
-else:DESTDIR = .
target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
qmldir.files += $$PWD/qmldir
@@ -18,7 +17,8 @@ symbian:{
TARGET.UID3 = 0x2002131F
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.sources = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/gestures/qdeclarativegesturearea.cpp b/src/imports/gestures/qdeclarativegesturearea.cpp
index 500c6bf..0d19ba9 100644
--- a/src/imports/gestures/qdeclarativegesturearea.cpp
+++ b/src/imports/gestures/qdeclarativegesturearea.cpp
@@ -92,7 +92,7 @@ public:
\e {This element is only functional on devices with touch input.}
\qml
- import Qt.labs.gestures 0.1
+ import Qt.labs.gestures 1.0
GestureArea {
anchors.fill: parent
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
index 68462e7..a3eb0d1 100644
--- a/src/imports/particles/particles.pro
+++ b/src/imports/particles/particles.pro
@@ -12,7 +12,6 @@ HEADERS += \
qdeclarativeparticles_p.h
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/imports/$$TARGETPATH
-else:DESTDIR = .
target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH
qmldir.files += $$PWD/qmldir
@@ -22,7 +21,8 @@ symbian:{
TARGET.UID3 = 0x2002131E
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/network/access/qfilenetworkreply.cpp b/src/network/access/qfilenetworkreply.cpp
index 4ac9a8c..00bd29e 100644
--- a/src/network/access/qfilenetworkreply.cpp
+++ b/src/network/access/qfilenetworkreply.cpp
@@ -97,7 +97,10 @@ QFileNetworkReply::QFileNetworkReply(QObject *parent, const QNetworkRequest &req
QString fileName = url.toLocalFile();
if (fileName.isEmpty()) {
- fileName = url.toString(QUrl::RemoveAuthority | QUrl::RemoveFragment | QUrl::RemoveQuery);
+ if (url.scheme() == QLatin1String("qrc"))
+ fileName = QLatin1Char(':') + url.path();
+ else
+ fileName = url.toString(QUrl::RemoveAuthority | QUrl::RemoveFragment | QUrl::RemoveQuery);
}
QFileInfo fi(fileName);
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index ae4d257..ccdbb20 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -743,7 +743,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free AND connected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
+ if (!channels[i].reply && !channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
dequeueAndSendRequest(channels[i].socket);
}
}
@@ -753,7 +753,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free unconnected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy()) {
+ if (!channels[i].reply && !channels[i].isSocketBusy()) {
dequeueAndSendRequest(channels[i].socket);
}
}
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index b35c318..a637474 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -946,10 +946,10 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
// fast path for GET on file:// URLs
// Also if the scheme is empty we consider it a file.
- // The QNetworkAccessFileBackend will right now only be used
- // for PUT or qrc://
+ // The QNetworkAccessFileBackend will right now only be used for PUT
if ((op == QNetworkAccessManager::GetOperation || op == QNetworkAccessManager::HeadOperation)
&& (req.url().scheme() == QLatin1String("file")
+ || req.url().scheme() == QLatin1String("qrc")
|| req.url().scheme().isEmpty())) {
return new QFileNetworkReply(this, req, op);
}
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index 348b0d2..41a9512 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -468,14 +468,17 @@ void QHostInfoRunnable::run()
resultEmitter.emitResultsReady(hostInfo);
// now also iterate through the postponed ones
- QMutableListIterator<QHostInfoRunnable*> iterator(manager->postponedLookups);
- while (iterator.hasNext()) {
- QHostInfoRunnable* postponed = iterator.next();
- if (toBeLookedUp == postponed->toBeLookedUp) {
- // we can now emit
- iterator.remove();
- hostInfo.setLookupId(postponed->id);
- postponed->resultEmitter.emitResultsReady(hostInfo);
+ {
+ QMutexLocker locker(&manager->mutex);
+ QMutableListIterator<QHostInfoRunnable*> iterator(manager->postponedLookups);
+ while (iterator.hasNext()) {
+ QHostInfoRunnable* postponed = iterator.next();
+ if (toBeLookedUp == postponed->toBeLookedUp) {
+ // we can now emit
+ iterator.remove();
+ hostInfo.setLookupId(postponed->id);
+ postponed->resultEmitter.emitResultsReady(hostInfo);
+ }
}
}
diff --git a/src/network/network.pro b/src/network/network.pro
index 5e33080..7ed7d3a 100644
--- a/src/network/network.pro
+++ b/src/network/network.pro
@@ -28,19 +28,4 @@ QMAKE_LIBS += $$QMAKE_LIBS_NETWORK
symbian {
TARGET.UID3=0x2001B2DE
LIBS += -lesock -linsock -lcertstore -lefsrv -lctframework
-
- # Partial upgrade SIS file
- vendorinfo = \
- "; Localised Vendor name" \
- "%{\"Nokia, Qt\"}" \
- " " \
- "; Unique Vendor name" \
- ":\"Nokia, Qt\"" \
- " "
- pu_header = "; Partial upgrade package for testing QtGui changes without reinstalling everything" \
- "$${LITERAL_HASH}{\"Qt network\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
- partial_upgrade.pkg_prerules = pu_header vendorinfo
- partial_upgrade.sources = $$QMAKE_LIBDIR_QT/QtNetwork.dll
- partial_upgrade.path = c:/sys/bin
- DEPLOYMENT = partial_upgrade $$DEPLOYMENT
}
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index aa217f6..ee59830 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -1314,7 +1314,7 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c
QGLRect srcRect(src.left(), top, src.right(), bottom);
bool isBitmap = pixmap.isQBitmap();
- bool isOpaque = !isBitmap && !pixmap.hasAlphaChannel();
+ bool isOpaque = !isBitmap && !pixmap.hasAlpha();
d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE,
state()->renderHints & QPainter::SmoothPixmapTransform, texture->id);
@@ -1765,7 +1765,7 @@ void QGL2PaintEngineExPrivate::drawPixmapFragments(const QPainter::PixmapFragmen
transferMode(ImageArrayDrawingMode);
bool isBitmap = pixmap.isQBitmap();
- bool isOpaque = !isBitmap && (!pixmap.hasAlphaChannel() || (hints & QPainter::OpaqueHint)) && allOpaque;
+ bool isOpaque = !isBitmap && (!pixmap.hasAlpha() || (hints & QPainter::OpaqueHint)) && allOpaque;
updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE,
q->state()->renderHints & QPainter::SmoothPixmapTransform, texture->id);
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index 410cf21..f353995 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -129,7 +129,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
GLuint oldTexture = m_texture;
createTextureData(width, height);
-
+
if (ctx->d_ptr->workaround_brokenFBOReadBack) {
QImageTextureGlyphCache::resizeTextureData(width, height);
Q_ASSERT(image().depth() == 8);
@@ -281,4 +281,13 @@ int QGLTextureGlyphCache::glyphPadding() const
return 1;
}
+int QGLTextureGlyphCache::maxTextureWidth() const
+{
+ return ctx->d_ptr->maxTextureSize();
+}
+
+int QGLTextureGlyphCache::maxTextureHeight() const
+{
+ return ctx->d_ptr->maxTextureSize();
+}
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index 6bcd655..eb3693c 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -73,6 +73,8 @@ public:
virtual void resizeTextureData(int width, int height);
virtual void fillTexture(const Coord &c, glyph_t glyph);
virtual int glyphPadding() const;
+ virtual int maxTextureWidth() const;
+ virtual int maxTextureHeight() const;
inline GLuint texture() const { return m_texture; }
diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
index 9bc099d..7b0b8a2 100644
--- a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
@@ -509,6 +509,7 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen, c
m_dash_stroker.setDashPattern(pen.dashPattern());
m_dash_stroker.setStrokeWidth(cosmetic ? width * m_inv_scale : width);
+ m_dash_stroker.setDashOffset(pen.dashOffset());
m_dash_stroker.setMiterLimit(pen.miterLimit());
m_dash_stroker.setClipRect(clip);
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 15070d4..0d1a66e 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -1689,9 +1689,6 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format)
workaround_brokenFBOReadBack = false;
workaroundsCached = false;
- workaround_brokenTextureFromPixmap = false;
- workaround_brokenTextureFromPixmap_init = false;
-
for (int i = 0; i < QT_GL_VERTEX_ARRAY_TRACKED_COUNT; ++i)
vertexAttributeArraysEnabledState[i] = false;
}
@@ -2577,34 +2574,18 @@ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target,
}
}
-#if defined(Q_WS_X11)
- // Try to use texture_from_pixmap
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
+ // Only try to use texture_from_pixmap under X11/EGL
const QX11Info *xinfo = qt_x11Info(paintDevice);
if (pd->classId() == QPixmapData::X11Class && pd->pixelType() == QPixmapData::PixmapType
&& xinfo && xinfo->screen() == pixmap.x11Info().screen()
&& target == GL_TEXTURE_2D)
{
- if (!workaround_brokenTextureFromPixmap_init) {
- workaround_brokenTextureFromPixmap_init = true;
-
- const QByteArray versionString(reinterpret_cast<const char*>(glGetString(GL_VERSION)));
- const int pos = versionString.indexOf("NVIDIA ");
-
- if (pos >= 0) {
- const QByteArray nvidiaVersionString = versionString.mid(pos + strlen("NVIDIA "));
-
- if (nvidiaVersionString.startsWith("195") || nvidiaVersionString.startsWith("256"))
- workaround_brokenTextureFromPixmap = true;
- }
- }
-
- if (!workaround_brokenTextureFromPixmap) {
- texture = bindTextureFromNativePixmap(const_cast<QPixmap*>(&pixmap), key, options);
- if (texture) {
- texture->options |= QGLContext::MemoryManagedBindOption;
- texture->boundPixmap = pd;
- boundPixmaps.insert(pd, QPixmap(pixmap));
- }
+ texture = bindTextureFromNativePixmap(const_cast<QPixmap*>(&pixmap), key, options);
+ if (texture) {
+ texture->options |= QGLContext::MemoryManagedBindOption;
+ texture->boundPixmap = pd;
+ boundPixmaps.insert(pd, QPixmap(pixmap));
}
}
#endif
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 623eeaf..6323ce2 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -401,9 +401,6 @@ public:
uint workaround_brokenFBOReadBack : 1;
uint workaroundsCached : 1;
- uint workaround_brokenTextureFromPixmap : 1;
- uint workaround_brokenTextureFromPixmap_init : 1;
-
QPaintDevice *paintDevice;
QColor transpColor;
QGLContext *q_ptr;
diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp
index bfb232d..7f4c670 100644
--- a/src/opengl/qgl_x11.cpp
+++ b/src/opengl/qgl_x11.cpp
@@ -54,6 +54,7 @@
#include <private/qt_x11_p.h>
#include <private/qpixmap_x11_p.h>
#include <private/qimagepixmapcleanuphooks_p.h>
+#include <private/qunicodetables_p.h>
#ifdef Q_OS_HPUX
// for GLXPBuffer
#include <private/qglpixelbuffer_p.h>
@@ -1775,6 +1776,10 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pixmap, cons
QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pixmap->data_ptr().data());
Q_ASSERT(pixmapData->classId() == QPixmapData::X11Class);
+ // We can't use TFP if the pixmap has a separate X11 mask
+ if (pixmapData->x11_mask)
+ return 0;
+
if (!qt_resolveTextureFromPixmap(paintDevice))
return 0;
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index 9b8a3d1..6c9b288 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -468,13 +468,17 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz,
glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_SAMPLES_EXT, &samples);
}
+ // In practice, a combined depth-stencil buffer is supported by all desktop platforms, while a
+ // separate stencil buffer is not. On embedded devices however, a combined depth-stencil buffer
+ // might not be supported while separate buffers are, according to QTBUG-12861.
+
if (attachment == QGLFramebufferObject::CombinedDepthStencil
&& (QGLExtensions::glExtensions() & QGLExtensions::PackedDepthStencil)) {
// depth and stencil buffer needs another extension
- glGenRenderbuffers(1, &depth_stencil_buffer);
- Q_ASSERT(!glIsRenderbuffer(depth_stencil_buffer));
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_stencil_buffer);
- Q_ASSERT(glIsRenderbuffer(depth_stencil_buffer));
+ glGenRenderbuffers(1, &depth_buffer);
+ Q_ASSERT(!glIsRenderbuffer(depth_buffer));
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_buffer);
+ Q_ASSERT(glIsRenderbuffer(depth_buffer));
if (samples != 0 && glRenderbufferStorageMultisampleEXT)
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
GL_DEPTH24_STENCIL8_EXT, size.width(), size.height());
@@ -482,24 +486,26 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz,
glRenderbufferStorage(GL_RENDERBUFFER_EXT,
GL_DEPTH24_STENCIL8_EXT, size.width(), size.height());
- GLint i = 0;
- glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_DEPTH_SIZE_EXT, &i);
+ stencil_buffer = depth_buffer;
glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT, depth_stencil_buffer);
+ GL_RENDERBUFFER_EXT, depth_buffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT, depth_stencil_buffer);
- fbo_attachment = QGLFramebufferObject::CombinedDepthStencil;
+ GL_RENDERBUFFER_EXT, stencil_buffer);
valid = checkFramebufferStatus();
- if (!valid)
- glDeleteRenderbuffers(1, &depth_stencil_buffer);
- } else if (attachment == QGLFramebufferObject::Depth
- || attachment == QGLFramebufferObject::CombinedDepthStencil)
+ if (!valid) {
+ glDeleteRenderbuffers(1, &depth_buffer);
+ stencil_buffer = depth_buffer = 0;
+ }
+ }
+
+ if (depth_buffer == 0 && (attachment == QGLFramebufferObject::CombinedDepthStencil
+ || (attachment == QGLFramebufferObject::Depth)))
{
- glGenRenderbuffers(1, &depth_stencil_buffer);
- Q_ASSERT(!glIsRenderbuffer(depth_stencil_buffer));
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_stencil_buffer);
- Q_ASSERT(glIsRenderbuffer(depth_stencil_buffer));
+ glGenRenderbuffers(1, &depth_buffer);
+ Q_ASSERT(!glIsRenderbuffer(depth_buffer));
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, depth_buffer);
+ Q_ASSERT(glIsRenderbuffer(depth_buffer));
if (samples != 0 && glRenderbufferStorageMultisampleEXT) {
#ifdef QT_OPENGL_ES
#define GL_DEPTH_COMPONENT16 0x81A5
@@ -517,14 +523,53 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz,
glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, size.width(), size.height());
#endif
}
- GLint i = 0;
- glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_DEPTH_SIZE_EXT, &i);
glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
- GL_RENDERBUFFER_EXT, depth_stencil_buffer);
- fbo_attachment = QGLFramebufferObject::Depth;
+ GL_RENDERBUFFER_EXT, depth_buffer);
+ valid = checkFramebufferStatus();
+ if (!valid) {
+ glDeleteRenderbuffers(1, &depth_buffer);
+ depth_buffer = 0;
+ }
+ }
+
+ if (stencil_buffer == 0 && (attachment == QGLFramebufferObject::CombinedDepthStencil)) {
+ glGenRenderbuffers(1, &stencil_buffer);
+ Q_ASSERT(!glIsRenderbuffer(stencil_buffer));
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, stencil_buffer);
+ Q_ASSERT(glIsRenderbuffer(stencil_buffer));
+ if (samples != 0 && glRenderbufferStorageMultisampleEXT) {
+#ifdef QT_OPENGL_ES
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
+ GL_STENCIL_INDEX8_EXT, size.width(), size.height());
+#else
+ glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples,
+ GL_STENCIL_INDEX, size.width(), size.height());
+#endif
+ } else {
+#ifdef QT_OPENGL_ES
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX8_EXT,
+ size.width(), size.height());
+#else
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX,
+ size.width(), size.height());
+#endif
+ }
+ glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
+ GL_RENDERBUFFER_EXT, stencil_buffer);
valid = checkFramebufferStatus();
- if (!valid)
- glDeleteRenderbuffers(1, &depth_stencil_buffer);
+ if (!valid) {
+ glDeleteRenderbuffers(1, &stencil_buffer);
+ stencil_buffer = 0;
+ }
+ }
+
+ // The FBO might have become valid after removing the depth or stencil buffer.
+ valid = checkFramebufferStatus();
+
+ if (depth_buffer && stencil_buffer) {
+ fbo_attachment = QGLFramebufferObject::CombinedDepthStencil;
+ } else if (depth_buffer) {
+ fbo_attachment = QGLFramebufferObject::Depth;
} else {
fbo_attachment = QGLFramebufferObject::NoAttachment;
}
@@ -535,6 +580,10 @@ void QGLFramebufferObjectPrivate::init(QGLFramebufferObject *q, const QSize &sz,
glDeleteRenderbuffers(1, &color_buffer);
else
glDeleteTextures(1, &texture);
+ if (depth_buffer)
+ glDeleteRenderbuffers(1, &depth_buffer);
+ if (stencil_buffer && depth_buffer != stencil_buffer)
+ glDeleteRenderbuffers(1, &stencil_buffer);
glDeleteFramebuffers(1, &fbo);
fbo_guard.setId(0);
}
@@ -817,8 +866,10 @@ QGLFramebufferObject::~QGLFramebufferObject()
glDeleteTextures(1, &d->texture);
if (d->color_buffer)
glDeleteRenderbuffers(1, &d->color_buffer);
- if (d->depth_stencil_buffer)
- glDeleteRenderbuffers(1, &d->depth_stencil_buffer);
+ if (d->depth_buffer)
+ glDeleteRenderbuffers(1, &d->depth_buffer);
+ if (d->stencil_buffer && d->stencil_buffer != d->depth_buffer)
+ glDeleteRenderbuffers(1, &d->stencil_buffer);
GLuint fbo = d->fbo();
glDeleteFramebuffers(1, &fbo);
}
diff --git a/src/opengl/qglframebufferobject_p.h b/src/opengl/qglframebufferobject_p.h
index d8ff012..58b4e9e 100644
--- a/src/opengl/qglframebufferobject_p.h
+++ b/src/opengl/qglframebufferobject_p.h
@@ -126,7 +126,7 @@ private:
class QGLFramebufferObjectPrivate
{
public:
- QGLFramebufferObjectPrivate() : fbo_guard(0), texture(0), depth_stencil_buffer(0)
+ QGLFramebufferObjectPrivate() : fbo_guard(0), texture(0), depth_buffer(0), stencil_buffer(0)
, color_buffer(0), valid(false), engine(0) {}
~QGLFramebufferObjectPrivate() {}
@@ -136,7 +136,8 @@ public:
bool checkFramebufferStatus() const;
QGLSharedResourceGuard fbo_guard;
GLuint texture;
- GLuint depth_stencil_buffer;
+ GLuint depth_buffer;
+ GLuint stencil_buffer;
GLuint color_buffer;
GLenum target;
QSize size;
diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp
index 9a8b243..994947b 100644
--- a/src/opengl/qglpixelbuffer.cpp
+++ b/src/opengl/qglpixelbuffer.cpp
@@ -67,7 +67,13 @@
when the pbuffer contents change, eliminating the need for
additional copy operations. This is supported only on Windows
and Mac OS X systems that provide the \c render_texture
- extension.
+ extension. Note that under Windows, a multi-sampled pbuffer
+ can't be used in conjunction with the \c render_texture
+ extension. If a multi-sampled pbuffer is requested under
+ Windows, the \c render_texture extension is turned off for that
+ pbuffer.
+
+
\endlist
Pbuffers are provided by the OpenGL \c pbuffer extension; call
diff --git a/src/opengl/qglpixelbuffer_win.cpp b/src/opengl/qglpixelbuffer_win.cpp
index 8d0d105..b55f383 100644
--- a/src/opengl/qglpixelbuffer_win.cpp
+++ b/src/opengl/qglpixelbuffer_win.cpp
@@ -167,6 +167,11 @@ typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, con
#define WGL_FLOAT_COMPONENTS_NV 0x20B0
#endif
+#ifndef WGL_ARB_multisample
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+#endif
+
QGLFormat pfiToQGLFormat(HDC hdc, int pfi);
static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f, int attribs[])
@@ -226,14 +231,12 @@ static void qt_format_to_attrib_list(bool has_render_texture, const QGLFormat &f
attribs[i++] = WGL_FLOAT_COMPONENTS_NV;
attribs[i++] = TRUE;
}
- // sample buffers doesn't work in conjunction with the render_texture extension
- // so igonre that for now
- // if (f.sampleBuffers()) {
- // attribs[i++] = WGL_SAMPLE_BUFFERS_ARB;
- // attribs[i++] = 1;
- // attribs[i++] = WGL_SAMPLES_ARB;
- // attribs[i++] = f.samples() == -1 ? 16 : f.samples();
- // }
+ if (f.sampleBuffers()) {
+ attribs[i++] = WGL_SAMPLE_BUFFERS_ARB;
+ attribs[i++] = 1;
+ attribs[i++] = WGL_SAMPLES_ARB;
+ attribs[i++] = f.samples() == -1 ? 16 : f.samples();
+ }
attribs[i] = 0;
}
@@ -257,12 +260,17 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge
dc = GetDC(dmy.winId());
Q_ASSERT(dc);
- PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB =
- (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
+ // sample buffers doesn't work in conjunction with the render_texture extension
+ if (f.sampleBuffers()) {
+ has_render_texture = false;
+ } else {
+ PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB =
+ (PFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB");
- if (wglGetExtensionsStringARB) {
- QString extensions(QLatin1String(wglGetExtensionsStringARB(dc)));
- has_render_texture = extensions.contains(QLatin1String("WGL_ARB_render_texture"));
+ if (wglGetExtensionsStringARB) {
+ QString extensions(QLatin1String(wglGetExtensionsStringARB(dc)));
+ has_render_texture = extensions.contains(QLatin1String("WGL_ARB_render_texture"));
+ }
}
int attribs[40];
diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp
index 12c487d..58778ea 100644
--- a/src/opengl/qpaintengine_opengl.cpp
+++ b/src/opengl/qpaintengine_opengl.cpp
@@ -921,6 +921,7 @@ static inline QPainterPath strokeForPath(const QPainterPath &path, const QPen &c
stroker.setCapStyle(cpen.capStyle());
stroker.setJoinStyle(cpen.joinStyle());
stroker.setMiterLimit(cpen.miterLimit());
+ stroker.setDashOffset(cpen.dashOffset());
qreal width = cpen.widthF();
if (width == 0)
@@ -4734,9 +4735,11 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, QFontEngine *fontEngine,
font_cache = new QGLFontGlyphHash;
// qDebug() << "new context" << context << font_cache;
qt_context_cache.insert(context, font_cache);
- if (context->isValid() && context->device()->devType() == QInternal::Widget) {
- QWidget *widget = static_cast<QWidget *>(context->device());
- connect(widget, SIGNAL(destroyed(QObject*)), SLOT(widgetDestroyed(QObject*)));
+ if (context->isValid()) {
+ if (context->device()->devType() == QInternal::Widget) {
+ QWidget *widget = static_cast<QWidget *>(context->device());
+ connect(widget, SIGNAL(destroyed(QObject*)), SLOT(widgetDestroyed(QObject*)));
+ }
connect(QGLSignalProxy::instance(),
SIGNAL(aboutToDestroyContext(const QGLContext*)),
SLOT(cleanupContext(const QGLContext*)));
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 3c2fd3d..74395a2 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -248,7 +248,11 @@ public:
inline void ensurePathTransform()
{
if (!pathTransformSet) {
- setTransform(VG_MATRIX_PATH_USER_TO_SURFACE, pathTransform);
+ QTransform aliasedTransform = pathTransform;
+ if (renderingQuality == VG_RENDERING_QUALITY_NONANTIALIASED && currentPen != Qt::NoPen)
+ aliasedTransform = aliasedTransform
+ * QTransform::fromTranslate(aliasedCoordinateDelta, -aliasedCoordinateDelta);
+ setTransform(VG_MATRIX_PATH_USER_TO_SURFACE, aliasedTransform);
pathTransformSet = true;
}
}
@@ -306,6 +310,7 @@ inline void QVGPaintEnginePrivate::setRenderingQuality(VGRenderingQuality mode)
if (renderingQuality != mode) {
vgSeti(VG_RENDERING_QUALITY, mode);
renderingQuality = mode;
+ pathTransformSet = false; // need to tweak transform for aliased stroking
}
}
diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.cpp b/src/plugins/bearer/icd/dbusdispatcher.cpp
index 7581982..3d588dc 100644
--- a/src/3rdparty/libconninet/src/dbusdispatcher.cpp
+++ b/src/plugins/bearer/icd/dbusdispatcher.cpp
@@ -1,24 +1,44 @@
-/* * This file is part of conninet *
- *
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- *
- * Contact: Aapo Makela <aapo.makela@nokia.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 <QDebug>
#include <QtCore>
diff --git a/src/3rdparty/libconninet/src/dbusdispatcher.h b/src/plugins/bearer/icd/dbusdispatcher.h
index 2f71b6f..6f2f347 100644
--- a/src/3rdparty/libconninet/src/dbusdispatcher.h
+++ b/src/plugins/bearer/icd/dbusdispatcher.h
@@ -1,24 +1,44 @@
-/* * This file is part of conn-dui-settings-inet *
- *
- * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- *
- * Contact: Aapo Makela <aapo.makela@nokia.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 DBUSDISPATCHER_H
#define DBUSDISPATCHER_H
diff --git a/src/3rdparty/libconninet/src/iapconf.cpp b/src/plugins/bearer/icd/iapconf.cpp
index 2e77fa5..ddd9fc2 100644
--- a/src/3rdparty/libconninet/src/iapconf.cpp
+++ b/src/plugins/bearer/icd/iapconf.cpp
@@ -1,24 +1,44 @@
-/*
- libconninet - Internet Connectivity support library
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
- Copyright (C) 2009-2010 Nokia Corporation. All rights reserved.
-
- Contact: Aapo Makela <aapo.makela@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
#include <stdlib.h>
#include <string.h>
@@ -191,61 +211,6 @@ IAPConf::~IAPConf()
delete d_ptr;
}
-void IAPConf::setValue(const QString& key, const QVariant& value)
-{
- // Invalid value means unsetting the given key
- if (!value.isValid()) {
- int err = conn_settings_unset(d_ptr->settings,
- QSTRING_TO_CONST_CSTR(key));
- if (err != CONN_SETTINGS_E_NO_ERROR) {
- qWarning("IAPConf: unable to unset key %s: %s",
- QSTRING_TO_CONST_CSTR(key),
- conn_settings_error_text((ConnSettingsError)err));
- }
- return;
- }
-
- // Convert value to ConnSettingsValue
- ConnSettingsValue *val = d_ptr->variantToValue(value);
- if (val == 0) return;
-
- // Set value and handle errors
- int error = conn_settings_set(d_ptr->settings,
- QSTRING_TO_CONST_CSTR(key),
- val);
- if (error != CONN_SETTINGS_E_NO_ERROR) {
- qWarning("IAPConf: error in setting key %s: %s",
- QSTRING_TO_CONST_CSTR(key),
- conn_settings_error_text((ConnSettingsError)error));
- }
-
- // Destroy value
- conn_settings_value_destroy(val);
- return;
-}
-
-void IAPConf::set(const QString& key1, const QVariant& value1,
- const QString& key2, const QVariant& value2,
- const QString& key3, const QVariant& value3,
- const QString& key4, const QVariant& value4,
- const QString& key5, const QVariant& value5,
- const QString& key6, const QVariant& value6,
- const QString& key7, const QVariant& value7,
- const QString& key8, const QVariant& value8,
- const QString& key9, const QVariant& value9,
- const QString& key10, const QVariant& value10)
-{
- if (!key1.isEmpty()) setValue(key1, value1);
- if (!key2.isEmpty()) setValue(key2, value2);
- if (!key3.isEmpty()) setValue(key3, value3);
- if (!key4.isEmpty()) setValue(key4, value4);
- if (!key5.isEmpty()) setValue(key5, value5);
- if (!key6.isEmpty()) setValue(key6, value6);
- if (!key7.isEmpty()) setValue(key7, value7);
- if (!key8.isEmpty()) setValue(key8, value8);
- if (!key9.isEmpty()) setValue(key9, value9);
- if (!key10.isEmpty()) setValue(key10, value10);
-}
QVariant IAPConf::value(const QString& key) const
{
@@ -257,25 +222,6 @@ QVariant IAPConf::value(const QString& key) const
return variant;
}
-void IAPConf::clear(const char *default_path)
-{
- Q_UNUSED(default_path); // default path is unused
-
- int error = conn_settings_remove(d_ptr->settings);
- if (error != CONN_SETTINGS_E_NO_ERROR) {
- qWarning("IAPConf: Error when removing IAP: %s",
- conn_settings_error_text((ConnSettingsError)error));
- }
-}
-
-void IAPConf::clearAll()
-{
- ConnSettings *settings = conn_settings_open(CONN_SETTINGS_CONNECTION,
- NULL);
- conn_settings_remove(settings);
- conn_settings_close(settings);
-}
-
void IAPConf::getAll(QList<QString> &all_iaps, bool return_path)
{
diff --git a/src/plugins/bearer/icd/iapconf.h b/src/plugins/bearer/icd/iapconf.h
new file mode 100644
index 0000000..9c4ddcb
--- /dev/null
+++ b/src/plugins/bearer/icd/iapconf.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 IAPCONF_H
+#define IAPCONF_H
+
+#include <QString>
+#include <QVariant>
+
+namespace Maemo {
+
+class IAPConfPrivate;
+class IAPConf {
+public:
+ IAPConf(const QString &iap_id);
+ virtual ~IAPConf();
+
+ /**
+ Get one IAP value.
+ */
+ QVariant value(const QString& key) const;
+
+ /**
+ Return all the IAPs found in the system. If return_path is true,
+ then do not strip the IAP path away.
+ */
+ static void getAll(QList<QString> &all_iaps, bool return_path=false);
+
+private:
+ IAPConfPrivate *d_ptr;
+};
+
+} // namespace Maemo
+
+#endif
diff --git a/src/3rdparty/libconninet/src/iapmonitor.cpp b/src/plugins/bearer/icd/iapmonitor.cpp
index c44cbc8..322bac0 100644
--- a/src/3rdparty/libconninet/src/iapmonitor.cpp
+++ b/src/plugins/bearer/icd/iapmonitor.cpp
@@ -1,24 +1,44 @@
-/*
- libconninet - Internet Connectivity support library
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
- Copyright (C) 2009-2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
#include <QStringList>
@@ -73,7 +93,9 @@ void conn_settings_notify_func (ConnSettingsType type,
const char *key,
ConnSettingsValue *value,
void *user_data)
-{
+{
+ Q_UNUSED(id);
+
if (type != CONN_SETTINGS_CONNECTION) return;
IAPMonitorPrivate *priv = (IAPMonitorPrivate *)user_data;
@@ -99,11 +121,13 @@ IAPMonitor::~IAPMonitor()
void IAPMonitor::iapAdded(const QString &id)
{
+ Q_UNUSED(id);
// By default do nothing
}
void IAPMonitor::iapRemoved(const QString &id)
{
+ Q_UNUSED(id);
// By default do nothing
}
diff --git a/src/declarative/qml/qdeclarativeclassfactory.cpp b/src/plugins/bearer/icd/iapmonitor.h
index 798eacd..21ad3bc 100644
--- a/src/declarative/qml/qdeclarativeclassfactory.cpp
+++ b/src/plugins/bearer/icd/iapmonitor.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,12 +39,30 @@
**
****************************************************************************/
-#include "private/qdeclarativeclassfactory_p.h"
-QT_BEGIN_NAMESPACE
+#ifndef IAPMONITOR_H
+#define IAPMONITOR_H
-QDeclarativeClassFactory::~QDeclarativeClassFactory()
-{
-}
+#include <QString>
+
+namespace Maemo {
+
+class IAPMonitorPrivate;
+class IAPMonitor {
+public:
+ IAPMonitor();
+ ~IAPMonitor();
+
+protected:
+ virtual void iapAdded(const QString &id);
+ virtual void iapRemoved(const QString &id);
+
+private:
+ IAPMonitorPrivate *d_ptr;
+ Q_DECLARE_PRIVATE(IAPMonitor);
+};
+
+} // namespace Maemo
+
+#endif // IAPMONITOR_H
-QT_END_NAMESPACE
diff --git a/src/plugins/bearer/icd/icd.pro b/src/plugins/bearer/icd/icd.pro
index b2c58e9..464cc1c 100644
--- a/src/plugins/bearer/icd/icd.pro
+++ b/src/plugins/bearer/icd/icd.pro
@@ -7,15 +7,25 @@ QMAKE_CXXFLAGS *= $$QT_CFLAGS_DBUS $$QT_CFLAGS_CONNSETTINGS
LIBS += $$QT_LIBS_CONNSETTINGS
HEADERS += qicdengine.h \
- qnetworksession_impl.h
+ qnetworksession_impl.h \
+ dbusdispatcher.h \
+ iapconf.h \
+ iapmonitor.h \
+ maemo_icd.h \
+ proxyconf.h \
+ wlan-utils.h
SOURCES += main.cpp \
qicdengine.cpp \
- qnetworksession_impl.cpp
+ qnetworksession_impl.cpp \
+ dbusdispatcher.cpp \
+ iapmonitor.cpp \
+ iapconf.cpp \
+ maemo_icd.cpp \
+ proxyconf.cpp
#DEFINES += BEARER_MANAGEMENT_DEBUG
-include(../../../3rdparty/libconninet.pri)
include(../../../3rdparty/libgq.pri)
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/bearer
diff --git a/src/3rdparty/libconninet/src/maemo_icd.cpp b/src/plugins/bearer/icd/maemo_icd.cpp
index 026241c..4f879e3 100644
--- a/src/3rdparty/libconninet/src/maemo_icd.cpp
+++ b/src/plugins/bearer/icd/maemo_icd.cpp
@@ -1,27 +1,48 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009 Nokia Corporation. All rights reserved.
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
-
-#include <stdio.h>
#include "maemo_icd.h"
+#include "dbusdispatcher.h"
+
#include <QObject>
#include <QTimer>
#include <QCoreApplication>
@@ -30,6 +51,7 @@
#include <dbus/dbus.h>
#include <dbus/dbus-glib-lowlevel.h>
+#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
@@ -54,73 +76,6 @@ namespace Maemo {
#endif
-/* Reference counting singleton class that creates a single connection
- * to icd so that icd reference counting works as expected. This is
- * needed because DBusDispatcher uses private dbus connections
- * which come and go and icd cannot use that information to
- * determine whether application quit or not. So we create one
- * persistent connection that is only teared down when application
- * quits or calls disconnect()
- */
-class IcdRefCounting
-{
-public:
- IcdRefCounting() : first_call(true) { }
- void setup(enum icd_connection_flags flag);
- void cleanup();
-
-private:
- bool first_call;
- struct DBusConnection *connection;
-};
-
-Q_GLOBAL_STATIC(IcdRefCounting, icdRefCounting);
-
-
-void IcdRefCounting::setup(enum icd_connection_flags flag)
-{
- if (first_call) {
- DBusMessage *msg = NULL;
-
- connection = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL);
- dbus_connection_set_exit_on_disconnect(connection, FALSE);
- dbus_connection_setup_with_g_main(connection, NULL);
-
- msg = dbus_message_new_method_call(ICD_DBUS_API_INTERFACE,
- ICD_DBUS_API_PATH,
- ICD_DBUS_API_INTERFACE,
- ICD_DBUS_API_CONNECT_REQ);
- if (msg == NULL)
- goto out;
-
- if (!dbus_message_append_args(msg,
- DBUS_TYPE_UINT32, &flag,
- DBUS_TYPE_INVALID))
- goto out;
-
- if (!dbus_connection_send_with_reply(connection, msg,
- NULL, 60*1000))
- goto out;
-
- first_call = false;
- return;
-
- out:
- dbus_connection_close(connection);
- dbus_connection_unref(connection);
- }
-}
-
-void IcdRefCounting::cleanup()
-{
- if (!first_call) {
- dbus_connection_close(connection);
- dbus_connection_unref(connection);
- first_call = true;
- }
-}
-
-
class IcdPrivate
{
public:
@@ -136,6 +91,8 @@ public:
IcdPrivate(unsigned int timeout, IcdDbusInterfaceVer ver, Icd *myfriend)
{
+ Q_UNUSED(ver);
+
/* Note that the old Icd interface is currently disabled and
* the new one is always used.
*/
@@ -171,36 +128,20 @@ public:
QStringList &network_types,
QList<IcdScanResult>& scan_results,
QString& error);
- void scanCancel();
- bool connect(icd_connection_flags flags, IcdConnectResult& result);
- bool connect(icd_connection_flags flags, QList<ConnectParams>& params,
- IcdConnectResult& result);
- bool connect(icd_connection_flags flags, QString& iap, QString& result);
- void select(uint flags);
- void disconnect(uint connect_flags, QString& service_type,
- uint service_attrs, QString& service_id,
- QString& network_type, uint network_attrs,
- QByteArray& network_id);
- void disconnect(uint connect_flags);
uint state(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
IcdStateResult &state_result);
- uint statistics(QString& service_type, uint service_attrs,
- QString& service_id, QString& network_type,
- uint network_attrs, QByteArray& network_id,
- IcdStatisticsResult& stats_result);
+
uint addrinfo(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
IcdAddressInfoResult& addr_result);
uint state(QList<IcdStateResult>& state_results);
- uint state_non_blocking(QList<IcdStateResult>& state_results);
uint statistics(QList<IcdStatisticsResult>& stats_results);
uint addrinfo(QList<IcdAddressInfoResult>& addr_results);
- uint addrinfo_non_blocking(QList<IcdAddressInfoResult>& addr_results);
void signalReceived(const QString& interface,
const QString& signal,
@@ -209,8 +150,6 @@ public:
const QList<QVariant>& args,
const QString& error);
- QString error() { return mError; }
-
public:
DBusDispatcher *mDBus;
QString mMethod;
@@ -279,8 +218,6 @@ public:
receivedSignals.clear();
}
- bool doConnect(IcdConnectResult& result);
- bool doConnect(QString& result);
bool doState();
};
@@ -334,29 +271,13 @@ static void get_scan_result(QList<QVariant>& args,
}
-static void get_connect_result(QList<QVariant>& args,
- IcdConnectResult& ret)
-{
- int i=0;
-
- if (args.isEmpty())
- return;
-
- ret.connect.service_type = args[i++].toString();
- ret.connect.service_attrs = args[i++].toInt();
- ret.connect.service_id = args[i++].toString();
- ret.connect.network_type = args[i++].toString();
- ret.connect.network_attrs = args[i++].toInt();
- ret.connect.network_id = args[i++].toByteArray();
- ret.status = args[i++].toInt();
-}
-
-
QStringList IcdPrivate::scan(icd_scan_request_flags flags,
QStringList &network_types,
QList<IcdScanResult>& scan_results,
QString& error)
{
+ Q_UNUSED(network_types);
+
QStringList scanned_types;
QTimer timer;
QVariant reply;
@@ -458,147 +379,6 @@ QStringList IcdPrivate::scan(icd_scan_request_flags flags,
}
-void IcdPrivate::scanCancel()
-{
- mDBus->call(ICD_DBUS_API_SCAN_CANCEL);
-}
-
-
-bool IcdPrivate::doConnect(IcdConnectResult& result)
-{
- QTimer timer;
- bool status = false;
-
- timer.setSingleShot(true);
- timer.start(timeout);
-
- //qDebug() << "Waiting" << ICD_DBUS_API_CONNECT_SIG << "signal";
-
- while (timer.isActive() && mInterface.isEmpty() &&
- mSignal != ICD_DBUS_API_CONNECT_SIG &&
- mError.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- }
-
- timer.stop();
-
- if (mError.isEmpty()) {
- if (!mArgs.isEmpty()) {
- get_connect_result(mArgs, result);
- status = true;
- } else
- status = false;
- } else
- status = false;
-
- return status;
-}
-
-
-bool IcdPrivate::connect(icd_connection_flags flags, IcdConnectResult& result)
-{
- clearState();
- //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags);
- mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags);
- icdRefCounting()->setup(flags);
- return doConnect(result);
-}
-
-
-bool IcdPrivate::connect(icd_connection_flags flags, QList<ConnectParams>& params,
- IcdConnectResult& result)
-{
- QVariantList varlist;
- QVariantList varlist2;
-
- foreach (ConnectParams param, params) {
- QVariantList items;
-
- items.append(QVariant(param.connect.service_type));
- items.append(QVariant(param.connect.service_attrs));
- items.append(QVariant(param.connect.service_id));
- items.append(QVariant(param.connect.network_type));
- items.append(QVariant(param.connect.network_attrs));
- items.append(QVariant(param.connect.network_id));
-
- varlist.append(items);
- }
-
- varlist2.append(QVariant(varlist));
-
- clearState();
- //mDBus->callAsynchronous(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2);
- mDBus->call(ICD_DBUS_API_CONNECT_REQ, (uint)flags, varlist2);
- icdRefCounting()->setup(flags);
- return doConnect(result);
-}
-
-
-bool IcdPrivate::doConnect(QString& ret)
-{
- QTimer timer;
- bool status = false;
-
- timer.setSingleShot(true);
- timer.start(timeout);
-
- while (timer.isActive() && mInterface.isEmpty() &&
- mError.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- }
-
- timer.stop();
-
- if (mError.isEmpty()) {
- if (!mArgs.isEmpty()) {
- status = true;
- //ret = mArgs[0]; // TODO correctly
- } else
- status = false;
- } else
- status = false;
-
- return status;
-}
-
-
-bool IcdPrivate::connect(icd_connection_flags flags, QString& iap, QString& result)
-{
- clearState();
- //mDBus->callAsynchronous(ICD_CONNECT_REQ, iap, (uint)flags);
- mDBus->call(ICD_CONNECT_REQ, iap, (uint)flags);
- icdRefCounting()->setup(flags);
- return doConnect(result);
-}
-
-
-void IcdPrivate::select(uint flags)
-{
- mDBus->call(ICD_DBUS_API_SELECT_REQ, flags);
-}
-
-
-void IcdPrivate::disconnect(uint flags, QString& service_type,
- uint service_attrs, QString& service_id,
- QString& network_type, uint network_attrs,
- QByteArray& network_id)
-{
- clearState();
- mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags,
- service_type, service_attrs, service_id,
- network_type, network_attrs, network_id);
- icdRefCounting()->cleanup();
-}
-
-
-void IcdPrivate::disconnect(uint flags)
-{
- clearState();
- mDBus->call(ICD_DBUS_API_DISCONNECT_REQ, flags);
- icdRefCounting()->cleanup();
-}
-
-
static void get_state_all_result(QList<QVariant>& args,
IcdStateResult& ret)
{
@@ -692,68 +472,6 @@ uint IcdPrivate::state(QString& service_type, uint service_attrs,
}
-uint IcdPrivate::state_non_blocking(QList<IcdStateResult>& state_results)
-{
- QTimer timer;
- QVariant reply;
- QVariantList vl;
- uint signals_left, total_signals;
- IcdStateResult result;
-
- PDEBUG("%s\n", "non blocking state");
-
- clearState();
- reply = mDBus->call(ICD_DBUS_API_STATE_REQ);
- if (reply.type() != QVariant::List)
- return 0;
- vl = reply.toList();
- if (vl.isEmpty())
- return 0;
- reply = vl.first();
- signals_left = total_signals = reply.toUInt();
- if (!signals_left)
- return 0;
-
- timer.setSingleShot(true);
- timer.start(timeout);
- state_results.clear();
- mError.clear();
- while (signals_left) {
- mInterface.clear();
- while (timer.isActive() && mInterface.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- }
-
- if (!timer.isActive()) {
- total_signals = 0;
- break;
- }
-
- if (mSignal != ICD_DBUS_API_STATE_SIG) {
- continue;
- }
-
- if (mError.isEmpty()) {
- if (!mArgs.isEmpty()) {
- if (mArgs.size()==2)
- get_state_all_result2(mArgs, result);
- else
- get_state_all_result(mArgs, result);
- state_results << result;
- }
- signals_left--;
- } else {
- qWarning() << "Error:" << mError;
- break;
- }
- }
- timer.stop();
-
- PDEBUG("total_signals=%d\n", total_signals);
- return total_signals;
-}
-
-
/* Special version of the state() call which does not call event loop.
* Needed in order to fix NB#175098 where Qt4.7 webkit crashes because event
* loop is run when webkit does not expect it. This function is called from
@@ -898,57 +616,6 @@ uint IcdPrivate::statistics(QList<IcdStatisticsResult>& stats_results)
}
-uint IcdPrivate::statistics(QString& service_type, uint service_attrs,
- QString& service_id, QString& network_type,
- uint network_attrs, QByteArray& network_id,
- IcdStatisticsResult& stats_result)
-{
- QTimer timer;
- QVariant reply;
- uint total_signals;
- QVariantList vl;
-
- clearState();
-
- reply = mDBus->call(ICD_DBUS_API_STATISTICS_REQ,
- service_type, service_attrs, service_id,
- network_type, network_attrs, network_id);
- if (reply.type() != QVariant::List)
- return 0;
- vl = reply.toList();
- if (vl.isEmpty())
- return 0;
- reply = vl.first();
- total_signals = reply.toUInt();
- if (!total_signals)
- return 0;
-
- timer.setSingleShot(true);
- timer.start(timeout);
-
- mInterface.clear();
- while (timer.isActive() && mInterface.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
-
- if (mSignal != ICD_DBUS_API_STATISTICS_SIG) {
- mInterface.clear();
- continue;
- }
- }
-
- timer.stop();
-
- if (mError.isEmpty()) {
- get_statistics_all_result(mArgs, stats_result);
- } else {
- qWarning() << "Error:" << mError;
- }
-
- // The returned value should be one because we asked for one statistics
- return total_signals;
-}
-
-
static void get_addrinfo_all_result(QList<QVariant>& args,
IcdAddressInfoResult& ret)
{
@@ -1043,62 +710,6 @@ uint IcdPrivate::addrinfo(QList<IcdAddressInfoResult>& addr_results)
return total_signals;
}
-uint IcdPrivate::addrinfo_non_blocking(QList<IcdAddressInfoResult>& addr_results)
-{
- QTimer timer;
- QVariant reply;
- QVariantList vl;
- uint signals_left, total_signals;
- IcdAddressInfoResult result;
-
- PDEBUG("%s\n", "non blocking addrinfo");
-
- clearState();
- reply = mDBus->call(ICD_DBUS_API_ADDRINFO_REQ);
- if (reply.type() != QVariant::List)
- return 0;
- vl = reply.toList();
- if (vl.isEmpty())
- return 0;
- reply = vl.first();
- if (reply.type() != QVariant::UInt)
- return 0;
- signals_left = total_signals = reply.toUInt();
- if (!signals_left)
- return 0;
-
- timer.setSingleShot(true);
- timer.start(timeout);
- addr_results.clear();
- while (signals_left) {
- mInterface.clear();
- while (timer.isActive() && mInterface.isEmpty()) {
- QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
- }
-
- if (!timer.isActive()) {
- total_signals = 0;
- break;
- }
-
- if (mSignal != ICD_DBUS_API_ADDRINFO_SIG) {
- continue;
- }
-
- if (mError.isEmpty()) {
- get_addrinfo_all_result(mArgs, result);
- addr_results << result;
- signals_left--;
- } else {
- qWarning() << "Error:" << mError;
- break;
- }
- }
- timer.stop();
- PDEBUG("total_signals=%d\n", total_signals);
- return total_signals;
-}
-
uint IcdPrivate::addrinfo(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
@@ -1182,55 +793,6 @@ QStringList Icd::scan(icd_scan_request_flags flags,
}
-void Icd::scanCancel()
-{
- d->scanCancel();
-}
-
-
-bool Icd::connect(icd_connection_flags flags, IcdConnectResult& result)
-{
- return d->connect(flags, result);
-}
-
-
-bool Icd::connect(icd_connection_flags flags, QList<ConnectParams>& params,
- IcdConnectResult& result)
-{
- return d->connect(flags, params, result);
-}
-
-
-bool Icd::connect(icd_connection_flags flags, QString& iap, QString& result)
-{
- return d->connect(flags, iap, result);
-}
-
-
-void Icd::select(uint flags)
-{
- d->select(flags);
-}
-
-
-void Icd::disconnect(uint connect_flags, QString& service_type,
- uint service_attrs, QString& service_id,
- QString& network_type, uint network_attrs,
- QByteArray& network_id)
-{
- d->disconnect(connect_flags, service_type,
- service_attrs, service_id,
- network_type, network_attrs,
- network_id);
-}
-
-
-void Icd::disconnect(uint connect_flags)
-{
- d->disconnect(connect_flags);
-}
-
-
uint Icd::state(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
@@ -1242,17 +804,6 @@ uint Icd::state(QString& service_type, uint service_attrs,
}
-uint Icd::statistics(QString& service_type, uint service_attrs,
- QString& service_id, QString& network_type,
- uint network_attrs, QByteArray& network_id,
- IcdStatisticsResult& stats_result)
-{
- return d->statistics(service_type, service_attrs, service_id,
- network_type, network_attrs, network_id,
- stats_result);
-}
-
-
uint Icd::addrinfo(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
@@ -1269,10 +820,6 @@ uint Icd::state(QList<IcdStateResult>& state_results)
return d->state(state_results);
}
-uint Icd::state_non_blocking(QList<IcdStateResult>& state_results)
-{
- return d->state_non_blocking(state_results);
-}
uint Icd::statistics(QList<IcdStatisticsResult>& stats_results)
{
@@ -1285,10 +832,6 @@ uint Icd::addrinfo(QList<IcdAddressInfoResult>& addr_results)
return d->addrinfo(addr_results);
}
-uint Icd::addrinfo_non_blocking(QList<IcdAddressInfoResult>& addr_results)
-{
- return d->addrinfo_non_blocking(addr_results);
-}
void Icd::icdSignalReceived(const QString& interface,
const QString& signal,
@@ -1305,12 +848,6 @@ void Icd::icdCallReply(const QString& method,
d->callReply(method, args, error);
}
-
-QString Icd::error()
-{
- return d->error();
-}
-
} // Maemo namespace
diff --git a/src/3rdparty/libconninet/src/maemo_icd.h b/src/plugins/bearer/icd/maemo_icd.h
index d7a8d5b..156316a 100644
--- a/src/3rdparty/libconninet/src/maemo_icd.h
+++ b/src/plugins/bearer/icd/maemo_icd.h
@@ -1,24 +1,44 @@
-/*
- libconninet - Internet Connectivity support library
-
- Copyright (C) 2009 Nokia Corporation. All rights reserved.
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
#ifndef MAEMO_ICD_H
#define MAEMO_ICD_H
@@ -34,8 +54,6 @@
#include <icd/dbus_api.h>
#include <icd/osso-ic.h>
#include <icd/osso-ic-dbus.h>
-
-#include "dbusdispatcher.h"
#include <icd/network_api_defines.h>
#define ICD_LONG_SCAN_TIMEOUT (30*1000) /* 30sec */
@@ -54,10 +72,6 @@ struct CommonParams {
QByteArray network_id;
};
-struct ConnectParams {
- struct CommonParams connect;
-};
-
struct IcdScanResult {
uint status; // see #icd_scan_status
uint timestamp; // when last seen
@@ -77,11 +91,6 @@ struct IcdScanResult {
}
};
-struct IcdConnectResult {
- struct CommonParams connect;
- uint status;
-};
-
struct IcdStateResult {
struct CommonParams params;
QString error;
@@ -126,43 +135,26 @@ public:
Icd(unsigned int timeout, QObject *parent = 0);
Icd(unsigned int timeout, IcdDbusInterfaceVer ver, QObject *parent = 0);
~Icd();
- QString error(); // returns last error string
/* Icd2 dbus API functions */
QStringList scan(icd_scan_request_flags flags,
QStringList &network_types,
QList<IcdScanResult>& scan_results,
QString& error);
- void scanCancel();
- bool connect(icd_connection_flags flags, IcdConnectResult& result);
- bool connect(icd_connection_flags flags, QList<ConnectParams>& params,
- IcdConnectResult& result);
- bool connect(icd_connection_flags flags, QString& iap, QString& result);
- void select(uint flags);
- void disconnect(uint connect_flags, QString& service_type,
- uint service_attrs, QString& service_id,
- QString& network_type, uint network_attrs,
- QByteArray& network_id);
- void disconnect(uint connect_flags);
uint state(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
IcdStateResult &state_result);
- uint statistics(QString& service_type, uint service_attrs,
- QString& service_id, QString& network_type,
- uint network_attrs, QByteArray& network_id,
- IcdStatisticsResult& stats_result);
+
uint addrinfo(QString& service_type, uint service_attrs,
QString& service_id, QString& network_type,
uint network_attrs, QByteArray& network_id,
IcdAddressInfoResult& addr_result);
uint state(QList<IcdStateResult>& state_results);
- uint state_non_blocking(QList<IcdStateResult>& state_results);
uint statistics(QList<IcdStatisticsResult>& stats_results);
uint addrinfo(QList<IcdAddressInfoResult>& addr_results);
- uint addrinfo_non_blocking(QList<IcdAddressInfoResult>& addr_results);
private Q_SLOTS:
void icdSignalReceived(const QString& interface,
diff --git a/src/3rdparty/libconninet/src/proxyconf.cpp b/src/plugins/bearer/icd/proxyconf.cpp
index d377a31..e5c8f4e 100644
--- a/src/3rdparty/libconninet/src/proxyconf.cpp
+++ b/src/plugins/bearer/icd/proxyconf.cpp
@@ -1,24 +1,44 @@
-/*
- libconninet - Internet Connectivity support library
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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$
+**
+****************************************************************************/
- Copyright (C) 2010 Nokia Corporation. All rights reserved.
-
- Contact: Jukka Rissanen <jukka.rissanen@nokia.com>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License
- version 2.1 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- 02110-1301 USA
-*/
#include <QVariant>
#include <QStringList>
diff --git a/src/plugins/bearer/icd/proxyconf.h b/src/plugins/bearer/icd/proxyconf.h
new file mode 100644
index 0000000..884cc5c
--- /dev/null
+++ b/src/plugins/bearer/icd/proxyconf.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 PROXYCONF_H
+#define PROXYCONF_H
+
+#include <QString>
+#include <QNetworkProxy>
+
+namespace Maemo {
+
+class ProxyConfPrivate;
+class ProxyConf {
+private:
+ ProxyConfPrivate *d_ptr;
+
+public:
+ ProxyConf();
+ virtual ~ProxyConf();
+
+ QList<QNetworkProxy> flush(const QNetworkProxyQuery &query = QNetworkProxyQuery()); // read the proxies from db
+
+ /* Note that for each update() call there should be corresponding
+ * clear() call because the ProxyConf class implements a reference
+ * counting mechanism. The factory is removed only when there is
+ * no one using the factory any more.
+ */
+ static void update(void); // this builds QNetworkProxy factory
+ static void clear(void); // this removes QNetworkProxy factory
+};
+
+} // namespace Maemo
+
+#endif
diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp
index 3264f15..bdf4e2e 100644
--- a/src/plugins/bearer/icd/qicdengine.cpp
+++ b/src/plugins/bearer/icd/qicdengine.cpp
@@ -43,7 +43,7 @@
#include "qnetworksession_impl.h"
#include <wlancond.h>
-#include <libicd-network-wlan-dev.h>
+#include <wlan-utils.h>
#include <iapconf.h>
#include <iapmonitor.h>
@@ -67,6 +67,10 @@ QString IcdNetworkConfigurationPrivate::bearerTypeName() const
return iap_type;
}
+/******************************************************************************/
+/** IapAddTimer specific */
+/******************************************************************************/
+
/* The IapAddTimer is a helper class that makes sure we update
* the configuration only after all db additions to certain
* iap are finished (after a certain timeout)
@@ -162,6 +166,9 @@ void IapAddTimer::del(QString& iap_id)
}
}
+/******************************************************************************/
+/** IAPMonitor specific */
+/******************************************************************************/
class IapMonitor : public Maemo::IAPMonitor
{
@@ -216,6 +223,11 @@ void IapMonitor::iapRemoved(const QString &iap_id)
d->deleteConfiguration(id);
}
+
+/******************************************************************************/
+/** QIcdEngine implementation */
+/******************************************************************************/
+
QIcdEngine::QIcdEngine(QObject *parent)
: QBearerEngine(parent), iapMonitor(0), m_dbusInterface(0),
firstUpdate(true), m_scanGoingOn(false)
diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h
index 0d5ba27..d528f15 100644
--- a/src/plugins/bearer/icd/qicdengine.h
+++ b/src/plugins/bearer/icd/qicdengine.h
@@ -46,7 +46,7 @@
#include <QtCore/qtimer.h>
-#include <maemo_icd.h>
+#include "maemo_icd.h"
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/bearer/icd/qnetworksession_impl.cpp b/src/plugins/bearer/icd/qnetworksession_impl.cpp
index 8013d30..2ed0b88 100644
--- a/src/plugins/bearer/icd/qnetworksession_impl.cpp
+++ b/src/plugins/bearer/icd/qnetworksession_impl.cpp
@@ -60,13 +60,16 @@ QDBusArgument &operator<<(QDBusArgument &argument,
const ICd2DetailsDBusStruct &icd2)
{
argument.beginStructure();
+
argument << icd2.serviceType;
argument << icd2.serviceAttributes;
argument << icd2.setviceId;
argument << icd2.networkType;
argument << icd2.networkAttributes;
argument << icd2.networkId;
+
argument.endStructure();
+
return argument;
}
@@ -74,13 +77,16 @@ const QDBusArgument &operator>>(const QDBusArgument &argument,
ICd2DetailsDBusStruct &icd2)
{
argument.beginStructure();
+
argument >> icd2.serviceType;
argument >> icd2.serviceAttributes;
argument >> icd2.setviceId;
argument >> icd2.networkType;
argument >> icd2.networkAttributes;
argument >> icd2.networkId;
+
argument.endStructure();
+
return argument;
}
@@ -104,9 +110,12 @@ QDBusArgument &operator<<(QDBusArgument &argument,
const ICd2DetailsList &detailsList)
{
argument.beginArray(qMetaTypeId<ICd2DetailsDBusStruct>());
+
for (int i = 0; i < detailsList.count(); ++i)
argument << detailsList[i];
+
argument.endArray();
+
return argument;
}
@@ -144,7 +153,8 @@ void QNetworkSessionPrivateImpl::iapStateChanged(const QString& iapid, uint icd_
void QNetworkSessionPrivateImpl::cleanupSession(void)
{
- QObject::disconnect(q, SIGNAL(stateChanged(QNetworkSession::State)), this, SLOT(updateProxies(QNetworkSession::State)));
+ QObject::disconnect(q, SIGNAL(stateChanged(QNetworkSession::State)),
+ this, SLOT(updateProxies(QNetworkSession::State)));
}
@@ -881,7 +891,6 @@ void QNetworkSessionPrivateImpl::close()
} else if (isOpen) {
if ((activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) {
// We will not wait any disconnect from icd as it might never come
- Maemo::Icd icd;
#ifdef BEARER_MANAGEMENT_DEBUG
qDebug() << "closing session" << publicConfig.identifier();
#endif
@@ -894,7 +903,7 @@ void QNetworkSessionPrivateImpl::close()
opened = false;
isOpen = false;
- icd.disconnect(ICD_CONNECTION_FLAG_APPLICATION_EVENT);
+ m_dbusInterface->call(ICD_DBUS_API_DISCONNECT_REQ, ICD_CONNECTION_FLAG_APPLICATION_EVENT);
startTime = QDateTime();
} else {
opened = false;
@@ -915,7 +924,6 @@ void QNetworkSessionPrivateImpl::stop()
emit QNetworkSessionPrivate::error(lastError);
} else {
if ((activeConfig.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) {
- Maemo::Icd icd;
#ifdef BEARER_MANAGEMENT_DEBUG
qDebug() << "stopping session" << publicConfig.identifier();
#endif
@@ -928,7 +936,7 @@ void QNetworkSessionPrivateImpl::stop()
opened = false;
isOpen = false;
- icd.disconnect(ICD_CONNECTION_FLAG_APPLICATION_EVENT);
+ m_dbusInterface->call(ICD_DBUS_API_DISCONNECT_REQ, ICD_CONNECTION_FLAG_APPLICATION_EVENT);
startTime = QDateTime();
} else {
opened = false;
diff --git a/src/plugins/bearer/icd/qnetworksession_impl.h b/src/plugins/bearer/icd/qnetworksession_impl.h
index 390e508..9ef9dc3 100644
--- a/src/plugins/bearer/icd/qnetworksession_impl.h
+++ b/src/plugins/bearer/icd/qnetworksession_impl.h
@@ -58,6 +58,7 @@
#include <QtCore/qdatetime.h>
#include <QtCore/qtimer.h>
+#include <QtCore/quuid.h>
#include <QtDBus/qdbusconnection.h>
#include <QtDBus/qdbusinterface.h>
@@ -98,7 +99,9 @@ public:
m_stopTimer.setSingleShot(true);
connect(&m_stopTimer, SIGNAL(timeout()), this, SLOT(finishStopBySendingClosedSignal()));
- QDBusConnection systemBus = QDBusConnection::systemBus();
+ QDBusConnection systemBus = QDBusConnection::connectToBus(
+ QDBusConnection::SystemBus,
+ QUuid::createUuid().toString());
m_dbusInterface = new QDBusInterface(ICD_DBUS_API_INTERFACE,
ICD_DBUS_API_PATH,
@@ -123,6 +126,8 @@ public:
~QNetworkSessionPrivateImpl()
{
cleanupSession();
+
+ QDBusConnection::disconnectFromBus(m_dbusInterface->connection().name());
}
//called by QNetworkSession constructor and ensures
diff --git a/src/plugins/bearer/icd/wlan-utils.h b/src/plugins/bearer/icd/wlan-utils.h
new file mode 100644
index 0000000..1d9e89d
--- /dev/null
+++ b/src/plugins/bearer/icd/wlan-utils.h
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 WLAN_UTILS_H
+#define WLAN_UTILS_H
+
+/** Originally taken from: libicd-network-wlan-dev.h*/
+
+#include <glib.h>
+#include <dbus/dbus.h>
+#include <wlancond.h>
+#include <icd/network_api_defines.h>
+
+/* capability bits inside network attributes var */
+#define NWATTR_WPS_MASK 0x0000F000
+#define NWATTR_ALGORITHM_MASK 0x00000F00
+#define NWATTR_WPA2_MASK 0x00000080
+#define NWATTR_METHOD_MASK 0x00000078
+#define NWATTR_MODE_MASK 0x00000007
+
+#define CAP_LOCALMASK 0x0FFFE008
+
+/* how much to shift between capability and network attributes var */
+#define CAP_SHIFT_WPS 3
+#define CAP_SHIFT_ALGORITHM 20
+#define CAP_SHIFT_WPA2 1
+#define CAP_SHIFT_METHOD 1
+#define CAP_SHIFT_MODE 0
+#define CAP_SHIFT_ALWAYS_ONLINE 26
+
+/* ------------------------------------------------------------------------- */
+/* From combined to capability */
+static inline dbus_uint32_t nwattr2cap(guint nwattrs, dbus_uint32_t *cap)
+{
+ guint oldval = *cap;
+
+ *cap &= CAP_LOCALMASK; /* clear old capabilities */
+ *cap |=
+ ((nwattrs & ICD_NW_ATTR_ALWAYS_ONLINE) >> CAP_SHIFT_ALWAYS_ONLINE) |
+ ((nwattrs & NWATTR_WPS_MASK) >> CAP_SHIFT_WPS) |
+ ((nwattrs & NWATTR_ALGORITHM_MASK) << CAP_SHIFT_ALGORITHM) |
+ ((nwattrs & NWATTR_WPA2_MASK) << CAP_SHIFT_WPA2) |
+ ((nwattrs & NWATTR_METHOD_MASK) << CAP_SHIFT_METHOD) |
+ (nwattrs & NWATTR_MODE_MASK);
+
+ return oldval;
+}
+
+
+/* ------------------------------------------------------------------------- */
+/* From capability to combined */
+static inline guint cap2nwattr(dbus_uint32_t cap, guint *nwattrs)
+{
+ guint oldval = *nwattrs;
+
+ *nwattrs &= ~ICD_NW_ATTR_LOCALMASK; /* clear old capabilities */
+ *nwattrs |=
+#ifdef WLANCOND_WPS_MASK
+ ((cap & WLANCOND_WPS_MASK) << CAP_SHIFT_WPS) |
+#endif
+ ((cap & (WLANCOND_ENCRYPT_ALG_MASK |
+ WLANCOND_ENCRYPT_GROUP_ALG_MASK)) >> CAP_SHIFT_ALGORITHM)|
+ ((cap & WLANCOND_ENCRYPT_WPA2_MASK) >> CAP_SHIFT_WPA2) |
+ ((cap & WLANCOND_ENCRYPT_METHOD_MASK) >> CAP_SHIFT_METHOD) |
+ (cap & WLANCOND_MODE_MASK);
+
+ return oldval;
+}
+
+
+#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.h b/src/plugins/graphicssystems/meego/qmeegoextensions.h
index 7f219de..ee20bd8 100644
--- a/src/plugins/graphicssystems/meego/qmeegoextensions.h
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.h
@@ -42,13 +42,12 @@
#ifndef MEXTENSIONS_H
#define MEXTENSIONS_H
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
#include <private/qgl_p.h>
#include <private/qeglcontext_p.h>
#include <private/qpixmapdata_gl_p.h>
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
/* Extensions decls */
diff --git a/src/plugins/imageformats/jpeg/jpeg.pro b/src/plugins/imageformats/jpeg/jpeg.pro
index c5671c3..fb254b8 100644
--- a/src/plugins/imageformats/jpeg/jpeg.pro
+++ b/src/plugins/imageformats/jpeg/jpeg.pro
@@ -3,20 +3,6 @@ include(../../qpluginbase.pri)
QTDIR_build:REQUIRES = "!contains(QT_CONFIG, no-jpeg)"
-wince*: {
- DEFINES += NO_GETENV
- contains(CE_ARCH,x86):CONFIG -= stl exceptions
- contains(CE_ARCH,x86):CONFIG += exceptions_off
-}
-
-#Disable warnings in 3rdparty code due to unused arguments
-symbian: {
- QMAKE_CXXFLAGS.CW += -W nounusedarg
- TARGET.UID3=0x2001E61B
-} else:contains(QMAKE_CC, gcc): {
- QMAKE_CFLAGS_WARN_ON += -Wno-unused-parameter -Wno-main
-}
-
include(../../../gui/image/qjpeghandler.pri)
SOURCES += main.cpp
diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri
index 8b119b5..84009d8 100644
--- a/src/plugins/qpluginbase.pri
+++ b/src/plugins/qpluginbase.pri
@@ -1,6 +1,6 @@
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.7.0
+ VERSION=4.7.1
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/src/qbase.pri b/src/qbase.pri
index f6af22f..b431ade 100644
--- a/src/qbase.pri
+++ b/src/qbase.pri
@@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat
isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.7.0
+ VERSION=4.7.1
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
@@ -183,3 +183,20 @@ QMAKE_PKGCONFIG_VARIABLES += moc_dir uic_dir rcc_dir lupdate_dir lrelease_dir
include(qt_targets.pri)
win32:DEFINES+=_USE_MATH_DEFINES
+
+symbian {
+ # Partial upgrade SIS file
+ vendorinfo = \
+ "; Localised Vendor name" \
+ "%{\"Nokia, Qt\"}" \
+ " " \
+ "; Unique Vendor name" \
+ ":\"Nokia, Qt\"" \
+ " "
+ pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \
+ "$${LITERAL_HASH}{\"$${TARGET}\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
+ partial_upgrade.pkg_prerules = pu_header vendorinfo
+ partial_upgrade.sources = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
+ partial_upgrade.path = c:/sys/bin
+ DEPLOYMENT += partial_upgrade
+}
diff --git a/src/qt3support/dialogs/q3filedialog.cpp b/src/qt3support/dialogs/q3filedialog.cpp
index 35f7890..f9dfaa1 100644
--- a/src/qt3support/dialogs/q3filedialog.cpp
+++ b/src/qt3support/dialogs/q3filedialog.cpp
@@ -106,7 +106,6 @@
#ifdef Q_WS_MAC
#include "qmacstyle_mac.h"
#include "private/qt_mac_p.h"
-#include "private/qunicodetables_p.h"
#undef check
#endif
diff --git a/src/qt3support/text/q3richtext.cpp b/src/qt3support/text/q3richtext.cpp
index 8614076..d82d0f0 100644
--- a/src/qt3support/text/q3richtext.cpp
+++ b/src/qt3support/text/q3richtext.cpp
@@ -64,7 +64,6 @@
#include "q3stylesheet.h"
#include "qtextstream.h"
#include <private/qtextengine_p.h>
-#include <private/qunicodetables_p.h>
#include <stdlib.h>
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 1a79f63..0f66d72 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -1440,8 +1440,8 @@ EXPORTS
?d_func@QBuffer@@ABEPBVQBufferPrivate@@XZ @ 1439 NONAME ; class QBufferPrivate const * QBuffer::d_func(void) const
?d_func@QCoreApplication@@AAEPAVQCoreApplicationPrivate@@XZ @ 1440 NONAME ; class QCoreApplicationPrivate * QCoreApplication::d_func(void)
?d_func@QCoreApplication@@ABEPBVQCoreApplicationPrivate@@XZ @ 1441 NONAME ; class QCoreApplicationPrivate const * QCoreApplication::d_func(void) const
- ?d_func@QDir@@AAEPAVQDirPrivate@@XZ @ 1442 NONAME ; class QDirPrivate * QDir::d_func(void)
- ?d_func@QDir@@ABEPBVQDirPrivate@@XZ @ 1443 NONAME ; class QDirPrivate const * QDir::d_func(void) const
+ ?d_func@QDir@@AAEPAVQDirPrivate@@XZ @ 1442 NONAME ABSENT ; class QDirPrivate * QDir::d_func(void)
+ ?d_func@QDir@@ABEPBVQDirPrivate@@XZ @ 1443 NONAME ABSENT ; class QDirPrivate const * QDir::d_func(void) const
?d_func@QEventDispatcherSymbian@@AAEPAVQAbstractEventDispatcherPrivate@@XZ @ 1444 NONAME ; class QAbstractEventDispatcherPrivate * QEventDispatcherSymbian::d_func(void)
?d_func@QEventDispatcherSymbian@@ABEPBVQAbstractEventDispatcherPrivate@@XZ @ 1445 NONAME ; class QAbstractEventDispatcherPrivate const * QEventDispatcherSymbian::d_func(void) const
?d_func@QEventLoop@@AAEPAVQEventLoopPrivate@@XZ @ 1446 NONAME ; class QEventLoopPrivate * QEventLoop::d_func(void)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index 0193381..f417892 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -215,7 +215,7 @@ EXPORTS
?clear@QDeclarativeListReference@@QBE_NXZ @ 214 NONAME ; bool QDeclarativeListReference::clear(void) const
?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 215 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *)
?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 216 NONAME ; int QDeclarativeDebugFileReference::columnNumber(void) const
- ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *)
+ ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *)
?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 218 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *)
?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 219 NONAME ; bool QDeclarativeDomProperty::isValid(void) const
?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 220 NONAME ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *)
@@ -242,7 +242,7 @@ EXPORTS
?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 241 NONAME ; class QString QDeclarativeDebugObjectReference::idString(void) const
?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 242 NONAME ; class QByteArray QDeclarativeDomObject::customTypeData(void) const
?stop@QDeclarativeTransition@@QAEXXZ @ 243 NONAME ; void QDeclarativeTransition::stop(void)
- ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 244 NONAME ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const
+ ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 244 NONAME ABSENT ; class QHash<int, class QVariant> QDeclarativeListModel::data(int, class QList<int> const &) const
?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 245 NONAME ; float QDeclarativeAnchors::verticalCenterOffset(void) const
?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 246 NONAME ; struct QMetaObject const * QDeclarativeText::metaObject(void) const
??0QDeclarativeComponent@@QAE@PAVQDeclarativeEngine@@PAVQObject@@@Z @ 247 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QObject *)
@@ -608,7 +608,7 @@ EXPORTS
??_EQDeclarativeDebugObjectExpressionWatch@@UAE@I@Z @ 607 NONAME ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(unsigned int)
?computeTransformOrigin@QDeclarativeItemPrivate@@QBE?AVQPointF@@XZ @ 608 NONAME ; class QPointF QDeclarativeItemPrivate::computeTransformOrigin(void) const
??0QDeclarativeListReference@@QAE@PAVQObject@@PBDPAVQDeclarativeEngine@@@Z @ 609 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QObject *, char const *, class QDeclarativeEngine *)
- ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 610 NONAME ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &)
+ ?setData@QListModelInterface@@UAE_NHABV?$QHash@HVQVariant@@@@@Z @ 610 NONAME ABSENT ; bool QListModelInterface::setData(int, class QHash<int, class QVariant> const &)
??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 611 NONAME ; QDeclarativePen::QDeclarativePen(class QObject *)
?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 612 NONAME ; class QString QPacketProtocol::trUtf8(char const *, char const *, int)
?setContextObject@QDeclarativeContext@@QAEXPAVQObject@@@Z @ 613 NONAME ; void QDeclarativeContext::setContextObject(class QObject *)
@@ -1712,4 +1712,92 @@ EXPORTS
?setScript@QDeclarativeScriptAction@@QAEXABVQDeclarativeScriptString@@@Z @ 1711 NONAME ; void QDeclarativeScriptAction::setScript(class QDeclarativeScriptString const &)
?metaObject@QDeclarativeScriptAction@@UBEPBUQMetaObject@@XZ @ 1712 NONAME ; struct QMetaObject const * QDeclarativeScriptAction::metaObject(void) const
?getPointer@QDeclarativeAbstractBinding@@SA?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@PAV1@@Z @ 1713 NONAME ; class QWeakPointer<class QDeclarativeAbstractBinding> QDeclarativeAbstractBinding::getPointer(class QDeclarativeAbstractBinding *)
+ ??0QDeclarativeListModel@@AAE@PBV0@PAVQDeclarativeListModelWorkerAgent@@@Z @ 1714 NONAME ; QDeclarativeListModel::QDeclarativeListModel(class QDeclarativeListModel const *, class QDeclarativeListModelWorkerAgent *)
+ ?inWorkerThread@QDeclarativeListModel@@ABE_NXZ @ 1715 NONAME ; bool QDeclarativeListModel::inWorkerThread(void) const
+ ?canMove@QDeclarativeListModel@@ABE_NHHH@Z @ 1716 NONAME ; bool QDeclarativeListModel::canMove(int, int, int) const
+ ?setLoops@QDeclarativeAbstractAnimation@@QAEXH@Z @ 1717 NONAME ; void QDeclarativeAbstractAnimation::setLoops(int)
+ ?trUtf8@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0@Z @ 1718 NONAME ; class QString QDeclarativeAbstractAnimation::trUtf8(char const *, char const *)
+ ?staticMetaObject@QDeclarativeAbstractAnimation@@2UQMetaObject@@B @ 1719 NONAME ; struct QMetaObject const QDeclarativeAbstractAnimation::staticMetaObject
+ ?setRunning@QDeclarativeTimer@@QAEX_N@Z @ 1720 NONAME ; void QDeclarativeTimer::setRunning(bool)
+ ?tr@QDeclarativeTimer@@SA?AVQString@@PBD0@Z @ 1721 NONAME ; class QString QDeclarativeTimer::tr(char const *, char const *)
+ ?qt_metacall@QDeclarativeTimer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1722 NONAME ; int QDeclarativeTimer::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setPaused@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1723 NONAME ; void QDeclarativeAbstractAnimation::setPaused(bool)
+ ?setRepeating@QDeclarativeTimer@@QAEX_N@Z @ 1724 NONAME ; void QDeclarativeTimer::setRepeating(bool)
+ ?interval@QDeclarativeTimer@@QBEHXZ @ 1725 NONAME ; int QDeclarativeTimer::interval(void) const
+ ?start@QDeclarativeTimer@@QAEXXZ @ 1726 NONAME ; void QDeclarativeTimer::start(void)
+ ?transition@QDeclarativeAbstractAnimation@@UAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@W4TransitionDirection@1@@Z @ 1727 NONAME ; void QDeclarativeAbstractAnimation::transition(class QList<class QDeclarativeAction> &, class QList<class QDeclarativeProperty> &, enum QDeclarativeAbstractAnimation::TransitionDirection)
+ ?componentComplete@QDeclarativeAbstractAnimation@@UAEXXZ @ 1728 NONAME ; void QDeclarativeAbstractAnimation::componentComplete(void)
+ ?runningChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1729 NONAME ; void QDeclarativeAbstractAnimation::runningChanged(bool)
+ ?trUtf8@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0H@Z @ 1730 NONAME ; class QString QDeclarativeAbstractAnimation::trUtf8(char const *, char const *, int)
+ ?metaObject@QDeclarativeTimer@@UBEPBUQMetaObject@@XZ @ 1731 NONAME ; struct QMetaObject const * QDeclarativeTimer::metaObject(void) const
+ ?setGroup@QDeclarativeAbstractAnimation@@QAEXPAVQDeclarativeAnimationGroup@@@Z @ 1732 NONAME ; void QDeclarativeAbstractAnimation::setGroup(class QDeclarativeAnimationGroup *)
+ ?isRepeating@QDeclarativeTimer@@QBE_NXZ @ 1733 NONAME ; bool QDeclarativeTimer::isRepeating(void) const
+ ?setTriggeredOnStart@QDeclarativeTimer@@QAEX_N@Z @ 1734 NONAME ; void QDeclarativeTimer::setTriggeredOnStart(bool)
+ ?currentTime@QDeclarativeAbstractAnimation@@QAEHXZ @ 1735 NONAME ; int QDeclarativeAbstractAnimation::currentTime(void)
+ ??1QDeclarativeAbstractAnimation@@UAE@XZ @ 1736 NONAME ; QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation(void)
+ ?triggered@QDeclarativeTimer@@IAEXXZ @ 1737 NONAME ; void QDeclarativeTimer::triggered(void)
+ ?finished@QDeclarativeTimer@@AAEXXZ @ 1738 NONAME ; void QDeclarativeTimer::finished(void)
+ ?pausedChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1739 NONAME ; void QDeclarativeAbstractAnimation::pausedChanged(bool)
+ ?complete@QDeclarativeAbstractAnimation@@QAEXXZ @ 1740 NONAME ; void QDeclarativeAbstractAnimation::complete(void)
+ ?setRunning@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1741 NONAME ; void QDeclarativeAbstractAnimation::setRunning(bool)
+ ?completed@QDeclarativeAbstractAnimation@@IAEXXZ @ 1742 NONAME ; void QDeclarativeAbstractAnimation::completed(void)
+ ?trUtf8@QDeclarativeTimer@@SA?AVQString@@PBD0@Z @ 1743 NONAME ; class QString QDeclarativeTimer::trUtf8(char const *, char const *)
+ ?loopCountChanged@QDeclarativeAbstractAnimation@@IAEXH@Z @ 1744 NONAME ; void QDeclarativeAbstractAnimation::loopCountChanged(int)
+ ?repeatChanged@QDeclarativeTimer@@IAEXXZ @ 1745 NONAME ; void QDeclarativeTimer::repeatChanged(void)
+ ?setDisableUserControl@QDeclarativeAbstractAnimation@@QAEXXZ @ 1746 NONAME ; void QDeclarativeAbstractAnimation::setDisableUserControl(void)
+ ?setDefaultTarget@QDeclarativeAbstractAnimation@@QAEXABVQDeclarativeProperty@@@Z @ 1747 NONAME ; void QDeclarativeAbstractAnimation::setDefaultTarget(class QDeclarativeProperty const &)
+ ?triggeredOnStart@QDeclarativeTimer@@QBE_NXZ @ 1748 NONAME ; bool QDeclarativeTimer::triggeredOnStart(void) const
+ ?notifyRunningChanged@QDeclarativeAbstractAnimation@@AAEX_N@Z @ 1749 NONAME ; void QDeclarativeAbstractAnimation::notifyRunningChanged(bool)
+ ?componentComplete@QDeclarativeTimer@@MAEXXZ @ 1750 NONAME ; void QDeclarativeTimer::componentComplete(void)
+ ?tr@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0@Z @ 1751 NONAME ; class QString QDeclarativeAbstractAnimation::tr(char const *, char const *)
+ ?isRunning@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1752 NONAME ; bool QDeclarativeAbstractAnimation::isRunning(void) const
+ ?d_func@QDeclarativeAbstractAnimation@@ABEPBVQDeclarativeAbstractAnimationPrivate@@XZ @ 1753 NONAME ; class QDeclarativeAbstractAnimationPrivate const * QDeclarativeAbstractAnimation::d_func(void) const
+ ??_EQDeclarativeAbstractAnimation@@UAE@I@Z @ 1754 NONAME ; QDeclarativeAbstractAnimation::~QDeclarativeAbstractAnimation(unsigned int)
+ ?d_func@QDeclarativeAbstractAnimation@@AAEPAVQDeclarativeAbstractAnimationPrivate@@XZ @ 1755 NONAME ; class QDeclarativeAbstractAnimationPrivate * QDeclarativeAbstractAnimation::d_func(void)
+ ?componentFinalized@QDeclarativeAbstractAnimation@@AAEXXZ @ 1756 NONAME ; void QDeclarativeAbstractAnimation::componentFinalized(void)
+ ??_EQDeclarativeTimer@@UAE@I@Z @ 1757 NONAME ; QDeclarativeTimer::~QDeclarativeTimer(unsigned int)
+ ?pause@QDeclarativeAbstractAnimation@@QAEXXZ @ 1758 NONAME ; void QDeclarativeAbstractAnimation::pause(void)
+ ?stop@QDeclarativeTimer@@QAEXXZ @ 1759 NONAME ; void QDeclarativeTimer::stop(void)
+ ?timelineComplete@QDeclarativeAbstractAnimation@@AAEXXZ @ 1760 NONAME ; void QDeclarativeAbstractAnimation::timelineComplete(void)
+ ?setAlwaysRunToEnd@QDeclarativeAbstractAnimation@@QAEX_N@Z @ 1761 NONAME ; void QDeclarativeAbstractAnimation::setAlwaysRunToEnd(bool)
+ ?classBegin@QDeclarativeAbstractAnimation@@UAEXXZ @ 1762 NONAME ; void QDeclarativeAbstractAnimation::classBegin(void)
+ ?d_func@QDeclarativeTimer@@AAEPAVQDeclarativeTimerPrivate@@XZ @ 1763 NONAME ; class QDeclarativeTimerPrivate * QDeclarativeTimer::d_func(void)
+ ??0QDeclarativeAbstractAnimation@@QAE@PAVQObject@@@Z @ 1764 NONAME ; QDeclarativeAbstractAnimation::QDeclarativeAbstractAnimation(class QObject *)
+ ?metaObject@QDeclarativeAbstractAnimation@@UBEPBUQMetaObject@@XZ @ 1765 NONAME ; struct QMetaObject const * QDeclarativeAbstractAnimation::metaObject(void) const
+ ?tr@QDeclarativeAbstractAnimation@@SA?AVQString@@PBD0H@Z @ 1766 NONAME ; class QString QDeclarativeAbstractAnimation::tr(char const *, char const *, int)
+ ?started@QDeclarativeAbstractAnimation@@IAEXXZ @ 1767 NONAME ; void QDeclarativeAbstractAnimation::started(void)
+ ?setInterval@QDeclarativeTimer@@QAEXH@Z @ 1768 NONAME ; void QDeclarativeTimer::setInterval(int)
+ ?d_func@QDeclarativeTimer@@ABEPBVQDeclarativeTimerPrivate@@XZ @ 1769 NONAME ; class QDeclarativeTimerPrivate const * QDeclarativeTimer::d_func(void) const
+ ?staticMetaObject@QDeclarativeTimer@@2UQMetaObject@@B @ 1770 NONAME ; struct QMetaObject const QDeclarativeTimer::staticMetaObject
+ ?qt_metacast@QDeclarativeAbstractAnimation@@UAEPAXPBD@Z @ 1771 NONAME ; void * QDeclarativeAbstractAnimation::qt_metacast(char const *)
+ ?setCurrentTime@QDeclarativeAbstractAnimation@@QAEXH@Z @ 1772 NONAME ; void QDeclarativeAbstractAnimation::setCurrentTime(int)
+ ?restart@QDeclarativeAbstractAnimation@@QAEXXZ @ 1773 NONAME ; void QDeclarativeAbstractAnimation::restart(void)
+ ??0QDeclarativeAbstractAnimation@@IAE@AAVQDeclarativeAbstractAnimationPrivate@@PAVQObject@@@Z @ 1774 NONAME ; QDeclarativeAbstractAnimation::QDeclarativeAbstractAnimation(class QDeclarativeAbstractAnimationPrivate &, class QObject *)
+ ?resume@QDeclarativeAbstractAnimation@@QAEXXZ @ 1775 NONAME ; void QDeclarativeAbstractAnimation::resume(void)
+ ?runningChanged@QDeclarativeTimer@@IAEXXZ @ 1776 NONAME ; void QDeclarativeTimer::runningChanged(void)
+ ?ticked@QDeclarativeTimer@@AAEXXZ @ 1777 NONAME ; void QDeclarativeTimer::ticked(void)
+ ?trUtf8@QDeclarativeTimer@@SA?AVQString@@PBD0H@Z @ 1778 NONAME ; class QString QDeclarativeTimer::trUtf8(char const *, char const *, int)
+ ??0QDeclarativeTimer@@QAE@PAVQObject@@@Z @ 1779 NONAME ; QDeclarativeTimer::QDeclarativeTimer(class QObject *)
+ ?loops@QDeclarativeAbstractAnimation@@QBEHXZ @ 1780 NONAME ; int QDeclarativeAbstractAnimation::loops(void) const
+ ?setTarget@QDeclarativeAbstractAnimation@@EAEXABVQDeclarativeProperty@@@Z @ 1781 NONAME ; void QDeclarativeAbstractAnimation::setTarget(class QDeclarativeProperty const &)
+ ?alwaysRunToEnd@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1782 NONAME ; bool QDeclarativeAbstractAnimation::alwaysRunToEnd(void) const
+ ?tr@QDeclarativeTimer@@SA?AVQString@@PBD0H@Z @ 1783 NONAME ; class QString QDeclarativeTimer::tr(char const *, char const *, int)
+ ?intervalChanged@QDeclarativeTimer@@IAEXXZ @ 1784 NONAME ; void QDeclarativeTimer::intervalChanged(void)
+ ?isPaused@QDeclarativeAbstractAnimation@@QBE_NXZ @ 1785 NONAME ; bool QDeclarativeAbstractAnimation::isPaused(void) const
+ ?getStaticMetaObject@QDeclarativeAbstractAnimation@@SAABUQMetaObject@@XZ @ 1786 NONAME ; struct QMetaObject const & QDeclarativeAbstractAnimation::getStaticMetaObject(void)
+ ?group@QDeclarativeAbstractAnimation@@QBEPAVQDeclarativeAnimationGroup@@XZ @ 1787 NONAME ; class QDeclarativeAnimationGroup * QDeclarativeAbstractAnimation::group(void) const
+ ?classBegin@QDeclarativeTimer@@MAEXXZ @ 1788 NONAME ; void QDeclarativeTimer::classBegin(void)
+ ?restart@QDeclarativeTimer@@QAEXXZ @ 1789 NONAME ; void QDeclarativeTimer::restart(void)
+ ??1QDeclarativeTimer@@UAE@XZ @ 1790 NONAME ; QDeclarativeTimer::~QDeclarativeTimer(void)
+ ?getStaticMetaObject@QDeclarativeTimer@@SAABUQMetaObject@@XZ @ 1791 NONAME ; struct QMetaObject const & QDeclarativeTimer::getStaticMetaObject(void)
+ ?qt_metacast@QDeclarativeTimer@@UAEPAXPBD@Z @ 1792 NONAME ; void * QDeclarativeTimer::qt_metacast(char const *)
+ ?alwaysRunToEndChanged@QDeclarativeAbstractAnimation@@IAEX_N@Z @ 1793 NONAME ; void QDeclarativeAbstractAnimation::alwaysRunToEndChanged(bool)
+ ?triggeredOnStartChanged@QDeclarativeTimer@@IAEXXZ @ 1794 NONAME ; void QDeclarativeTimer::triggeredOnStartChanged(void)
+ ?isRunning@QDeclarativeTimer@@QBE_NXZ @ 1795 NONAME ; bool QDeclarativeTimer::isRunning(void) const
+ ?update@QDeclarativeTimer@@AAEXXZ @ 1796 NONAME ; void QDeclarativeTimer::update(void)
+ ?stop@QDeclarativeAbstractAnimation@@QAEXXZ @ 1797 NONAME ; void QDeclarativeAbstractAnimation::stop(void)
+ ?start@QDeclarativeAbstractAnimation@@QAEXXZ @ 1798 NONAME ; void QDeclarativeAbstractAnimation::start(void)
+ ?qt_metacall@QDeclarativeAbstractAnimation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1799 NONAME ; int QDeclarativeAbstractAnimation::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?getScriptEngine@QDeclarativeDebugHelper@@SAPAVQScriptEngine@@PAVQDeclarativeEngine@@@Z @ 1800 NONAME ; class QScriptEngine * QDeclarativeDebugHelper::getScriptEngine(class QDeclarativeEngine *)
+ ?setAnimationSlowDownFactor@QDeclarativeDebugHelper@@SAXM@Z @ 1801 NONAME ; void QDeclarativeDebugHelper::setAnimationSlowDownFactor(float)
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index f9e88d7..7805dae 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -2645,7 +2645,7 @@ EXPORTS
?childItems@QGraphicsItem@@QBE?AV?$QList@PAVQGraphicsItem@@@@XZ @ 2644 NONAME ; class QList<class QGraphicsItem *> QGraphicsItem::childItems(void) const
?children@QGraphicsItem@@QBE?AV?$QList@PAVQGraphicsItem@@@@XZ @ 2645 NONAME ; class QList<class QGraphicsItem *> QGraphicsItem::children(void) const
?childrenBoundingRect@QGraphicsItem@@QBE?AVQRectF@@XZ @ 2646 NONAME ; class QRectF QGraphicsItem::childrenBoundingRect(void) const
- ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@@Z @ 2647 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *)
+ ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@@Z @ 2647 NONAME ABSENT ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *)
?childrenCheckState@QTreeWidgetItem@@ABE?AVQVariant@@H@Z @ 2648 NONAME ; class QVariant QTreeWidgetItem::childrenCheckState(int) const
?childrenClippedToShape@QGraphicsItemPrivate@@QBE_NXZ @ 2649 NONAME ; bool QGraphicsItemPrivate::childrenClippedToShape(void) const
?childrenCollapsible@QSplitter@@QBE_NXZ @ 2650 NONAME ; bool QSplitter::childrenCollapsible(void) const
@@ -4078,7 +4078,7 @@ EXPORTS
?editorEvent@QAbstractItemDelegate@@UAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4077 NONAME ; bool QAbstractItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
?editorEvent@QItemDelegate@@MAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4078 NONAME ; bool QItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
?editorEvent@QStyledItemDelegate@@MAE_NPAVQEvent@@PAVQAbstractItemModel@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 4079 NONAME ; bool QStyledItemDelegate::editorEvent(class QEvent *, class QAbstractItemModel *, class QStyleOptionViewItem const &, class QModelIndex const &)
- ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@XZ @ 4080 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(void) const
+ ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@XZ @ 4080 NONAME ABSENT ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(void) const
?effectiveOpacity@QGraphicsItem@@QBEMXZ @ 4081 NONAME ; float QGraphicsItem::effectiveOpacity(void) const
?effectiveOpacity@QGraphicsItemPrivate@@QBEMXZ @ 4082 NONAME ; float QGraphicsItemPrivate::effectiveOpacity(void) const
?effectiveRectFor@QWidgetPrivate@@QBE?AVQRect@@ABV2@@Z @ 4083 NONAME ; class QRect QWidgetPrivate::effectiveRectFor(class QRect const &) const
@@ -12886,4 +12886,10 @@ EXPORTS
?flushDetachedPixmaps@QPixmapCache@@SAXXZ @ 12885 NONAME ; void QPixmapCache::flushDetachedPixmaps(void)
?replayLastMouseEvent@QGraphicsViewPrivate@@QAEXXZ @ 12886 NONAME ; void QGraphicsViewPrivate::replayLastMouseEvent(void)
?children_clear@QGraphicsItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsObject@@@@@Z @ 12887 NONAME ; void QGraphicsItemPrivate::children_clear(class QDeclarativeListProperty<class QGraphicsObject> *)
+ ?timeout@QTapAndHoldGesture@@SAHXZ @ 12888 NONAME ; int QTapAndHoldGesture::timeout(void)
+ ?lastRightBearing@QFontEngine@@IAE?AUQFixed@@ABUQGlyphLayout@@_N@Z @ 12889 NONAME ; struct QFixed QFontEngine::lastRightBearing(struct QGlyphLayout const &, bool)
+ ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@PAVQGraphicsItem@@@Z @ 12890 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, class QGraphicsItem *)
+ ?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12891 NONAME ; void QTapAndHoldGesture::setTimeout(int)
+ ?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ; class QString QApplicationPrivate::qmljsDebugArguments
+ ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@PAVQGraphicsItem@@@Z @ 12893 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(class QGraphicsItem *) const
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index 2016ec7..c4cd9b6 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -552,9 +552,9 @@ EXPORTS
_ZN21QDeclarativeListModel6removeEi @ 551 NONAME
_ZN21QDeclarativeListModel7flattenEv @ 552 NONAME
_ZN21QDeclarativeListModelC1EP7QObject @ 553 NONAME
- _ZN21QDeclarativeListModelC1EbP7QObject @ 554 NONAME
+ _ZN21QDeclarativeListModelC1EbP7QObject @ 554 NONAME ABSENT
_ZN21QDeclarativeListModelC2EP7QObject @ 555 NONAME
- _ZN21QDeclarativeListModelC2EbP7QObject @ 556 NONAME
+ _ZN21QDeclarativeListModelC2EbP7QObject @ 556 NONAME ABSENT
_ZN21QDeclarativeListModelD0Ev @ 557 NONAME
_ZN21QDeclarativeListModelD1Ev @ 558 NONAME
_ZN21QDeclarativeListModelD2Ev @ 559 NONAME
@@ -1351,7 +1351,7 @@ EXPORTS
_ZNK21QDeclarativeDomObject8propertyERK10QByteArray @ 1350 NONAME
_ZNK21QDeclarativeListModel10metaObjectEv @ 1351 NONAME
_ZNK21QDeclarativeListModel3getEi @ 1352 NONAME
- _ZNK21QDeclarativeListModel4dataEiRK5QListIiE @ 1353 NONAME
+ _ZNK21QDeclarativeListModel4dataEiRK5QListIiE @ 1353 NONAME ABSENT
_ZNK21QDeclarativeListModel4dataEii @ 1354 NONAME
_ZNK21QDeclarativeListModel5countEv @ 1355 NONAME
_ZNK21QDeclarativeListModel5rolesEv @ 1356 NONAME
@@ -1744,4 +1744,93 @@ EXPORTS
_ZThn12_N24QDeclarativeScriptActionD1Ev @ 1743 NONAME
_ZThn8_N24QDeclarativeScriptActionD0Ev @ 1744 NONAME
_ZThn8_N24QDeclarativeScriptActionD1Ev @ 1745 NONAME
+ _ZN21QDeclarativeListModelC1EPKS_P32QDeclarativeListModelWorkerAgent @ 1746 NONAME
+ _ZN21QDeclarativeListModelC2EPKS_P32QDeclarativeListModelWorkerAgent @ 1747 NONAME
+ _ZNK21QDeclarativeListModel14inWorkerThreadEv @ 1748 NONAME
+ _ZN17QDeclarativeTimer10classBeginEv @ 1749 NONAME
+ _ZN17QDeclarativeTimer10setRunningEb @ 1750 NONAME
+ _ZN17QDeclarativeTimer11qt_metacallEN11QMetaObject4CallEiPPv @ 1751 NONAME
+ _ZN17QDeclarativeTimer11qt_metacastEPKc @ 1752 NONAME
+ _ZN17QDeclarativeTimer11setIntervalEi @ 1753 NONAME
+ _ZN17QDeclarativeTimer12setRepeatingEb @ 1754 NONAME
+ _ZN17QDeclarativeTimer13repeatChangedEv @ 1755 NONAME
+ _ZN17QDeclarativeTimer14runningChangedEv @ 1756 NONAME
+ _ZN17QDeclarativeTimer15intervalChangedEv @ 1757 NONAME
+ _ZN17QDeclarativeTimer16staticMetaObjectE @ 1758 NONAME DATA 16
+ _ZN17QDeclarativeTimer17componentCompleteEv @ 1759 NONAME
+ _ZN17QDeclarativeTimer19getStaticMetaObjectEv @ 1760 NONAME
+ _ZN17QDeclarativeTimer19setTriggeredOnStartEb @ 1761 NONAME
+ _ZN17QDeclarativeTimer23triggeredOnStartChangedEv @ 1762 NONAME
+ _ZN17QDeclarativeTimer4stopEv @ 1763 NONAME
+ _ZN17QDeclarativeTimer5startEv @ 1764 NONAME
+ _ZN17QDeclarativeTimer6tickedEv @ 1765 NONAME
+ _ZN17QDeclarativeTimer6updateEv @ 1766 NONAME
+ _ZN17QDeclarativeTimer7restartEv @ 1767 NONAME
+ _ZN17QDeclarativeTimer8finishedEv @ 1768 NONAME
+ _ZN17QDeclarativeTimer9triggeredEv @ 1769 NONAME
+ _ZN17QDeclarativeTimerC1EP7QObject @ 1770 NONAME
+ _ZN17QDeclarativeTimerC2EP7QObject @ 1771 NONAME
+ _ZN29QDeclarativeAbstractAnimation10classBeginEv @ 1772 NONAME
+ _ZN29QDeclarativeAbstractAnimation10setRunningEb @ 1773 NONAME
+ _ZN29QDeclarativeAbstractAnimation10transitionER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyENS_19TransitionDirectionE @ 1774 NONAME
+ _ZN29QDeclarativeAbstractAnimation11currentTimeEv @ 1775 NONAME
+ _ZN29QDeclarativeAbstractAnimation11qt_metacallEN11QMetaObject4CallEiPPv @ 1776 NONAME
+ _ZN29QDeclarativeAbstractAnimation11qt_metacastEPKc @ 1777 NONAME
+ _ZN29QDeclarativeAbstractAnimation13pausedChangedEb @ 1778 NONAME
+ _ZN29QDeclarativeAbstractAnimation14runningChangedEb @ 1779 NONAME
+ _ZN29QDeclarativeAbstractAnimation14setCurrentTimeEi @ 1780 NONAME
+ _ZN29QDeclarativeAbstractAnimation16loopCountChangedEi @ 1781 NONAME
+ _ZN29QDeclarativeAbstractAnimation16setDefaultTargetERK20QDeclarativeProperty @ 1782 NONAME
+ _ZN29QDeclarativeAbstractAnimation16staticMetaObjectE @ 1783 NONAME DATA 16
+ _ZN29QDeclarativeAbstractAnimation16timelineCompleteEv @ 1784 NONAME
+ _ZN29QDeclarativeAbstractAnimation17componentCompleteEv @ 1785 NONAME
+ _ZN29QDeclarativeAbstractAnimation17setAlwaysRunToEndEb @ 1786 NONAME
+ _ZN29QDeclarativeAbstractAnimation18componentFinalizedEv @ 1787 NONAME
+ _ZN29QDeclarativeAbstractAnimation19getStaticMetaObjectEv @ 1788 NONAME
+ _ZN29QDeclarativeAbstractAnimation20notifyRunningChangedEb @ 1789 NONAME
+ _ZN29QDeclarativeAbstractAnimation21alwaysRunToEndChangedEb @ 1790 NONAME
+ _ZN29QDeclarativeAbstractAnimation21setDisableUserControlEv @ 1791 NONAME
+ _ZN29QDeclarativeAbstractAnimation4stopEv @ 1792 NONAME
+ _ZN29QDeclarativeAbstractAnimation5pauseEv @ 1793 NONAME
+ _ZN29QDeclarativeAbstractAnimation5startEv @ 1794 NONAME
+ _ZN29QDeclarativeAbstractAnimation6resumeEv @ 1795 NONAME
+ _ZN29QDeclarativeAbstractAnimation7restartEv @ 1796 NONAME
+ _ZN29QDeclarativeAbstractAnimation7startedEv @ 1797 NONAME
+ _ZN29QDeclarativeAbstractAnimation8completeEv @ 1798 NONAME
+ _ZN29QDeclarativeAbstractAnimation8setGroupEP26QDeclarativeAnimationGroup @ 1799 NONAME
+ _ZN29QDeclarativeAbstractAnimation8setLoopsEi @ 1800 NONAME
+ _ZN29QDeclarativeAbstractAnimation9completedEv @ 1801 NONAME
+ _ZN29QDeclarativeAbstractAnimation9setPausedEb @ 1802 NONAME
+ _ZN29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1803 NONAME
+ _ZN29QDeclarativeAbstractAnimationC2EP7QObject @ 1804 NONAME
+ _ZN29QDeclarativeAbstractAnimationC2ER36QDeclarativeAbstractAnimationPrivateP7QObject @ 1805 NONAME
+ _ZN29QDeclarativeAbstractAnimationD0Ev @ 1806 NONAME
+ _ZN29QDeclarativeAbstractAnimationD1Ev @ 1807 NONAME
+ _ZN29QDeclarativeAbstractAnimationD2Ev @ 1808 NONAME
+ _ZNK17QDeclarativeTimer10metaObjectEv @ 1809 NONAME
+ _ZNK17QDeclarativeTimer11isRepeatingEv @ 1810 NONAME
+ _ZNK17QDeclarativeTimer16triggeredOnStartEv @ 1811 NONAME
+ _ZNK17QDeclarativeTimer8intervalEv @ 1812 NONAME
+ _ZNK17QDeclarativeTimer9isRunningEv @ 1813 NONAME
+ _ZNK29QDeclarativeAbstractAnimation10metaObjectEv @ 1814 NONAME
+ _ZNK29QDeclarativeAbstractAnimation14alwaysRunToEndEv @ 1815 NONAME
+ _ZNK29QDeclarativeAbstractAnimation5groupEv @ 1816 NONAME
+ _ZNK29QDeclarativeAbstractAnimation5loopsEv @ 1817 NONAME
+ _ZNK29QDeclarativeAbstractAnimation8isPausedEv @ 1818 NONAME
+ _ZNK29QDeclarativeAbstractAnimation9isRunningEv @ 1819 NONAME
+ _ZTI17QDeclarativeTimer @ 1820 NONAME
+ _ZTI29QDeclarativeAbstractAnimation @ 1821 NONAME
+ _ZTV17QDeclarativeTimer @ 1822 NONAME
+ _ZTV29QDeclarativeAbstractAnimation @ 1823 NONAME
+ _ZThn12_N29QDeclarativeAbstractAnimation10classBeginEv @ 1824 NONAME
+ _ZThn12_N29QDeclarativeAbstractAnimation17componentCompleteEv @ 1825 NONAME
+ _ZThn12_N29QDeclarativeAbstractAnimationD0Ev @ 1826 NONAME
+ _ZThn12_N29QDeclarativeAbstractAnimationD1Ev @ 1827 NONAME
+ _ZThn8_N17QDeclarativeTimer10classBeginEv @ 1828 NONAME
+ _ZThn8_N17QDeclarativeTimer17componentCompleteEv @ 1829 NONAME
+ _ZThn8_N29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1830 NONAME
+ _ZThn8_N29QDeclarativeAbstractAnimationD0Ev @ 1831 NONAME
+ _ZThn8_N29QDeclarativeAbstractAnimationD1Ev @ 1832 NONAME
+ _ZN23QDeclarativeDebugHelper15getScriptEngineEP18QDeclarativeEngine @ 1833 NONAME
+ _ZN23QDeclarativeDebugHelper26setAnimationSlowDownFactorEf @ 1834 NONAME
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 47e893b..4442d33 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -12094,4 +12094,7 @@ EXPORTS
_ZN18QTapAndHoldGesture7timeoutEv @ 12093 NONAME
_ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12094 NONAME ABSENT
_ZN20QGraphicsItemPrivate14children_clearEP24QDeclarativeListPropertyI15QGraphicsObjectE @ 12095 NONAME
+ _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4
+ _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME
+ _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME
diff --git a/src/src.pro b/src/src.pro
index f856a0c..9a8b70fc 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -110,7 +110,8 @@ src_webkit_declarative.target = sub-webkitdeclarative
contains(QT_CONFIG, opengl):src_multimedia.depends += src_opengl
src_tools_activeqt.depends = src_tools_idc src_gui
src_declarative.depends = src_gui src_script src_network
- src_plugins.depends = src_gui src_sql src_svg src_multimedia
+ src_plugins.depends = src_gui src_sql src_svg
+ contains(QT_CONFIG, multimedia):src_plugins.depends += src_multimedia
src_s60installs.depends = $$TOOLS_SUBDIRS $$SRC_SUBDIRS
src_s60installs.depends -= src_s60installs
src_imports.depends = src_gui src_declarative
diff --git a/src/xmlpatterns/schema/qxsdtypechecker.cpp b/src/xmlpatterns/schema/qxsdtypechecker.cpp
index 4bb03f5..217932e 100644
--- a/src/xmlpatterns/schema/qxsdtypechecker.cpp
+++ b/src/xmlpatterns/schema/qxsdtypechecker.cpp
@@ -171,6 +171,7 @@ XsdTypeChecker::XsdTypeChecker(const XsdSchemaContext::Ptr &context, const QVect
XsdTypeChecker::~XsdTypeChecker()
{
+ delete m_reflection;
}
QString XsdTypeChecker::normalizedValue(const QString &value, const XsdFacet::Hash &facets)
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/error-object.qml b/tests/auto/declarative/qdeclarativeconnection/data/error-object.qml
new file mode 100644
index 0000000..a8127a4
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeconnection/data/error-object.qml
@@ -0,0 +1,7 @@
+import Qt 4.7
+
+Item {
+ Connections {
+ onClicked: Item {}
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/error-property.qml b/tests/auto/declarative/qdeclarativeconnection/data/error-property.qml
new file mode 100644
index 0000000..2791f56
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeconnection/data/error-property.qml
@@ -0,0 +1,5 @@
+import Qt 4.7
+
+Item {
+ Connections { fakeProperty: {} }
+}
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/error-property2.qml b/tests/auto/declarative/qdeclarativeconnection/data/error-property2.qml
new file mode 100644
index 0000000..0205c0a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeconnection/data/error-property2.qml
@@ -0,0 +1,5 @@
+import Qt 4.7
+
+Item {
+ Connections { onfakeProperty: {} }
+}
diff --git a/tests/auto/declarative/qdeclarativeconnection/data/error-syntax.qml b/tests/auto/declarative/qdeclarativeconnection/data/error-syntax.qml
new file mode 100644
index 0000000..867e4e2
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeconnection/data/error-syntax.qml
@@ -0,0 +1,9 @@
+import Qt 4.7
+
+Item {
+ Connections {
+ onClicked {
+ onPressed: {}
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
index d384372..a623e96 100644
--- a/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
+++ b/tests/auto/declarative/qdeclarativeconnection/tst_qdeclarativeconnection.cpp
@@ -66,6 +66,8 @@ private slots:
void targetChanged();
void unknownSignals_data();
void unknownSignals();
+ void errors_data();
+ void errors();
private:
QDeclarativeEngine engine;
@@ -195,9 +197,38 @@ void tst_qdeclarativeconnection::unknownSignals()
QDeclarativeConnections *connections = item->findChild<QDeclarativeConnections*>("connections");
QVERIFY(connections);
+ if (file == "connection-unknownsignals-ignored.qml")
+ QVERIFY(connections->ignoreUnknownSignals());
+
delete item;
}
+void tst_qdeclarativeconnection::errors_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::addColumn<QString>("error");
+
+ QTest::newRow("no \"on\"") << "error-property.qml" << "Cannot assign to non-existent property \"fakeProperty\"";
+ QTest::newRow("3rd letter lowercase") << "error-property2.qml" << "Cannot assign to non-existent property \"onfakeProperty\"";
+ QTest::newRow("child object") << "error-object.qml" << "Connections: nested objects not allowed";
+ QTest::newRow("grouped object") << "error-syntax.qml" << "Connections: syntax error";
+}
+
+void tst_qdeclarativeconnection::errors()
+{
+ QFETCH(QString, file);
+ QFETCH(QString, error);
+
+ QUrl url = QUrl::fromLocalFile(SRCDIR "/data/" + file);
+
+ QDeclarativeEngine engine;
+ QDeclarativeComponent c(&engine, url);
+ QVERIFY(c.isError() == true);
+ QList<QDeclarativeError> errors = c.errors();
+ QVERIFY(errors.count() == 1);
+ QCOMPARE(errors.at(0).description(), error);
+}
+
QTEST_MAIN(tst_qdeclarativeconnection)
#include "tst_qdeclarativeconnection.moc"
diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
index 20ccccb..adba190 100644
--- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
+++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
@@ -279,7 +279,7 @@ void tst_QDeclarativeDebug::initTestCase()
qRegisterMetaType<QDeclarativeDebugWatch::State>();
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768...");
- qputenv("QML_DEBUG_SERVER_PORT", "3768");
+
m_engine = new QDeclarativeEngine(this);
QList<QByteArray> qml;
@@ -891,6 +891,18 @@ void tst_QDeclarativeDebug::tst_QDeclarativeDebugPropertyReference()
compareProperties(r, ref);
}
-QTEST_MAIN(tst_QDeclarativeDebug)
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3768";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebug tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebug.moc"
diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
index a19c2c2..7db0e60 100644
--- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
+++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp
@@ -76,7 +76,6 @@ void tst_QDeclarativeDebugClient::initTestCase()
{
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770...");
- qputenv("QML_DEBUG_SERVER_PORT", "3770");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
@@ -151,7 +150,19 @@ void tst_QDeclarativeDebugClient::sendMessage()
QCOMPARE(resp, msg);
}
-QTEST_MAIN(tst_QDeclarativeDebugClient)
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3770";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebugClient tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebugclient.moc"
diff --git a/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h b/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h
new file mode 100644
index 0000000..c9cb839
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativedebughelper/private_headers/qdeclarativedebughelper_p.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** 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 QDECLARATIVEDEBUGHELPER_P_H
+#define QDECLARATIVEDEBUGHELPER_P_H
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QScriptEngine;
+class QDeclarativeEngine;
+
+// Helper methods to access private API through a stable interface
+// This is used in the qmljsdebugger library of QtCreator.
+class Q_DECLARATIVE_EXPORT QDeclarativeDebugHelper
+{
+public:
+ static QScriptEngine *getScriptEngine(QDeclarativeEngine *engine);
+ static void setAnimationSlowDownFactor(qreal factor);
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QDECLARATIVEDEBUGHELPER_P_H
diff --git a/tests/auto/declarative/qdeclarativedebughelper/qdeclarativedebughelper.pro b/tests/auto/declarative/qdeclarativedebughelper/qdeclarativedebughelper.pro
new file mode 100644
index 0000000..c52c652
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativedebughelper/qdeclarativedebughelper.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+contains(QT_CONFIG,declarative): QT += network declarative script
+macx:CONFIG -= app_bundle
+
+SOURCES += tst_qdeclarativedebughelper.cpp
diff --git a/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp b/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp
new file mode 100644
index 0000000..36f2222
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativedebughelper/tst_qdeclarativedebughelper.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <qtest.h>
+
+#include <QDeclarativeEngine>
+#include <private/qdeclarativeengine_p.h>
+#include <QAbstractAnimation>
+#include <private/qabstractanimation_p.h>
+
+// We have copied the header which is used in the qmljsdebugger (part of QtCreator)
+// to catch BC changes. Don't update it unless you know what you are doing!
+#include "private_headers/qdeclarativedebughelper_p.h"
+
+class tst_qdeclarativedebughelper : public QObject {
+ Q_OBJECT
+private slots:
+ void getScriptEngine();
+ void setAnimationSlowDownFactor();
+};
+
+class TestAnimation : public QAbstractAnimation {
+public:
+ int updateCalled;
+
+ TestAnimation() : updateCalled(0) {}
+
+ virtual void updateCurrentTime(int /*currentTime*/) {
+ updateCalled++;
+ }
+ virtual int duration() const {
+ return 100;
+ }
+};
+
+void tst_qdeclarativedebughelper::getScriptEngine()
+{
+ QDeclarativeEngine engine;
+
+ QScriptEngine *scriptEngine = QDeclarativeDebugHelper::getScriptEngine(&engine);
+ QVERIFY(scriptEngine);
+ QCOMPARE(scriptEngine, QDeclarativeEnginePrivate::getScriptEngine(&engine));
+}
+
+void tst_qdeclarativedebughelper::setAnimationSlowDownFactor()
+{
+ TestAnimation animation;
+
+ // first check whether setup works
+ QCOMPARE(animation.updateCalled, 0);
+ animation.start();
+ QTest::qWait(animation.totalDuration() + 50);
+#ifdef Q_OS_WIN
+ if (animation.state() != QAbstractAnimation::Stopped)
+ QEXPECT_FAIL("", "On windows, consistent timing is not working properly due to bad timer resolution", Abort);
+#endif
+ QCOMPARE(animation.state(), QAbstractAnimation::Stopped);
+ QVERIFY(animation.updateCalled > 1);
+
+ // check if we can pause all animations
+ animation.updateCalled = 0;
+ QDeclarativeDebugHelper::setAnimationSlowDownFactor(0.0);
+ animation.start();
+ QTest::qWait(animation.totalDuration() + 50);
+ QVERIFY(animation.updateCalled <= 1); // updateCurrentTime seems to be called at least once
+
+ // now run them again
+ animation.updateCalled = 0;
+ QDeclarativeDebugHelper::setAnimationSlowDownFactor(2.0);
+ animation.start();
+ QTest::qWait(animation.totalDuration() + 50);
+ QVERIFY(animation.updateCalled > 1);
+}
+
+QTEST_MAIN(tst_qdeclarativedebughelper)
+
+#include "tst_qdeclarativedebughelper.moc"
+
diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
index 9ebbbaf..4683199 100644
--- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
+++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp
@@ -77,7 +77,6 @@ private slots:
void tst_QDeclarativeDebugService::initTestCase()
{
QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3769...");
- qputenv("QML_DEBUG_SERVER_PORT", "3769");
new QDeclarativeEngine(this);
m_conn = new QDeclarativeDebugConnection(this);
@@ -184,6 +183,19 @@ void tst_QDeclarativeDebugService::objectToString()
delete obj;
}
-QTEST_MAIN(tst_QDeclarativeDebugService)
+
+int main(int argc, char *argv[])
+{
+ int _argc = argc + 1;
+ char **_argv = new char*[_argc];
+ for (int i = 0; i < argc; ++i)
+ _argv[i] = argv[i];
+ _argv[_argc - 1] = "-qmljsdebugger=port:3769";
+
+ QApplication app(_argc, _argv);
+ tst_QDeclarativeDebugService tc;
+ return QTest::qExec(&tc, _argc, _argv);
+ delete _argv;
+}
#include "tst_qdeclarativedebugservice.moc"
diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
index dca5205..e1b4c1c 100644
--- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
+++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp
@@ -493,9 +493,11 @@ void tst_qdeclarativedom::loadDynamicProperty()
{
QByteArray qml = "import Qt 4.7\n"
"Item {\n"
+ " id: item\n"
" property int a: 12\n"
" property int b: a + 6\n"
" default property QtObject c\n"
+ " property alias d: item.a\n"
"}\n";
QDeclarativeDomDocument document;
@@ -504,11 +506,12 @@ void tst_qdeclarativedom::loadDynamicProperty()
QDeclarativeDomObject rootObject = document.rootObject();
QVERIFY(rootObject.isValid());
- QCOMPARE(rootObject.dynamicProperties().count(), 3);
+ QCOMPARE(rootObject.dynamicProperties().count(), 4);
{
QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(0);
QVERIFY(d.isDefaultProperty() == false);
+ QVERIFY(d.isAlias() == false);
QVERIFY(d.defaultValue().isValid());
QVERIFY(d.defaultValue().propertyName() == "a");
QVERIFY(d.defaultValue().value().isLiteral());
@@ -517,6 +520,7 @@ void tst_qdeclarativedom::loadDynamicProperty()
{
QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(1);
QVERIFY(d.isDefaultProperty() == false);
+ QVERIFY(d.isAlias() == false);
QVERIFY(d.defaultValue().isValid());
QVERIFY(d.defaultValue().propertyName() == "b");
QVERIFY(d.defaultValue().value().isBinding());
@@ -525,8 +529,15 @@ void tst_qdeclarativedom::loadDynamicProperty()
{
QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(2);
QVERIFY(d.isDefaultProperty() == true);
+ QVERIFY(d.isAlias() == false);
QVERIFY(d.defaultValue().isValid() == false);
}
+
+ {
+ QDeclarativeDomDynamicProperty d = rootObject.dynamicProperties().at(3);
+ QVERIFY(d.isDefaultProperty() == false);
+ QVERIFY(d.isAlias() == true);
+ }
}
}
diff --git a/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf b/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf
new file mode 100644
index 0000000..aae50d5
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
index ae23017..8765426 100644
--- a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
+++ b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp
@@ -39,8 +39,10 @@
**
****************************************************************************/
#include <qtest.h>
+#include <QtTest/QSignalSpy>
#include <QtDeclarative/qdeclarativeengine.h>
#include <QtDeclarative/qdeclarativecomponent.h>
+#include <QtDeclarative/qdeclarativecontext.h>
#include <private/qdeclarativefontloader_p.h>
#include "../../../shared/util.h"
#include "../shared/testhttpserver.h"
@@ -67,6 +69,7 @@ private slots:
void webFont();
void redirWebFont();
void failWebFont();
+ void changeFont();
private slots:
@@ -181,6 +184,45 @@ void tst_qdeclarativefontloader::failWebFont()
QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
}
+void tst_qdeclarativefontloader::changeFont()
+{
+ QString componentStr = "import Qt 4.7\nFontLoader { source: font }";
+ QDeclarativeContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
+
+ QVERIFY(fontObject != 0);
+
+ QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged()));
+ QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged()));
+
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 0);
+ QCOMPARE(statusSpy.count(), 0);
+ QTRY_COMPARE(fontObject->name(), QString("OCRA"));
+
+ ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Loading);
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 1);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("Daniel"));
+
+ ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 2);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("OCRA"));
+
+ ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
+ QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
+ QCOMPARE(nameSpy.count(), 3);
+ QCOMPARE(statusSpy.count(), 2);
+ QTRY_COMPARE(fontObject->name(), QString("Daniel"));
+}
+
QTEST_MAIN(tst_qdeclarativefontloader)
#include "tst_qdeclarativefontloader.moc"
diff --git a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp
index 03df71f..7fd6279 100644
--- a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp
+++ b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp
@@ -63,6 +63,8 @@ private slots:
void nonQmlObject();
void nullObject();
void nonQmlContextedObject();
+ void types();
+ void chaining();
private:
QDeclarativeEngine engine;
@@ -139,6 +141,68 @@ void tst_qdeclarativeinfo::nonQmlContextedObject()
qmlInfo(&object) << "Test Message";
}
+void tst_qdeclarativeinfo::types()
+{
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: false");
+ qmlInfo(0) << false;
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: 1.1");
+ qmlInfo(0) << 1.1;
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: 1.2");
+ qmlInfo(0) << 1.2f;
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: 15");
+ qmlInfo(0) << 15;
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: 'b'");
+ qmlInfo(0) << QChar('b');
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: \"Qt\"");
+ qmlInfo(0) << QByteArray("Qt");
+
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: true");
+ qmlInfo(0) << QBool(true);
+
+ //### do we actually want QUrl to show up in the output?
+ //### why the extra space at the end?
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QUrl(\"http://qt.nokia.com\") ");
+ qmlInfo(0) << QUrl("http://qt.nokia.com");
+
+ //### should this be quoted?
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: hello");
+ qmlInfo(0) << QLatin1String("hello");
+
+ //### should this be quoted?
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: World");
+ QString str("Hello World");
+ QStringRef ref(&str, 6, 5);
+ qmlInfo(0) << ref;
+
+ //### should this be quoted?
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Quick");
+ qmlInfo(0) << QString ("Quick");
+}
+
+void tst_qdeclarativeinfo::chaining()
+{
+ //### should more of these be automatically inserting spaces?
+ QString str("Hello World");
+ QStringRef ref(&str, 6, 5);
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: false 1.1 1.2 15 hello 'b' QUrl(\"http://qt.nokia.com\") World \"Qt\" true Quick ");
+ qmlInfo(0) << false << ' '
+ << 1.1 << ' '
+ << 1.2f << ' '
+ << 15 << ' '
+ << QLatin1String("hello") << ' '
+ << QChar('b') << ' '
+ << QUrl("http://qt.nokia.com")
+ << ref
+ << QByteArray("Qt")
+ << QBool(true)
+ << QString ("Quick");
+}
+
QTEST_MAIN(tst_qdeclarativeinfo)
#include "tst_qdeclarativeinfo.moc"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt
new file mode 100644
index 0000000..af95a53
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.errors.txt
@@ -0,0 +1 @@
+3:1:UnavailableType is unavailable for testing
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml
new file mode 100644
index 0000000..7c3c7ee
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/notAvailable.qml
@@ -0,0 +1,4 @@
+import Test 1.0
+
+UnavailableType {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
index 20cd976..e697aeb 100644
--- a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp
@@ -54,6 +54,8 @@ void registerTypes()
qmlRegisterType<MyGroupedObject>();
qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", new MyCustomParserTypeParser);
+
+ qmlRegisterTypeNotAvailable("Test",1,0,"UnavailableType", "UnavailableType is unavailable for testing");
}
QVariant myCustomVariantTypeConverter(const QString &data)
diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
index ac55bae..2b23a49 100644
--- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h
+++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h
@@ -508,6 +508,12 @@ public:
}
};
+class UnavailableType : public QObject
+{
+ Q_OBJECT
+public:
+ UnavailableType() {}
+};
class MyDotPropertyObject : public QObject
{
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 1825991..37e074b 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -376,6 +376,7 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidOn") << "invalidOn.qml" << "invalidOn.errors.txt" << false;
QTest::newRow("invalidProperty") << "invalidProperty.qml" << "invalidProperty.errors.txt" << false;
QTest::newRow("nonScriptableProperty") << "nonScriptableProperty.qml" << "nonScriptableProperty.errors.txt" << false;
+ QTest::newRow("notAvailable") << "notAvailable.qml" << "notAvailable.errors.txt" << false;
}
diff --git a/tests/auto/declarative/qdeclarativelistmodel/data/multipleroles.qml b/tests/auto/declarative/qdeclarativelistmodel/data/multipleroles.qml
new file mode 100644
index 0000000..b8f2f32
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelistmodel/data/multipleroles.qml
@@ -0,0 +1,25 @@
+import Qt 4.7
+ListView {
+ width: 100
+ height: 250
+ delegate: Rectangle {
+ width: 100
+ height: 50
+ color: black ? "black": "white"
+ }
+ model: ListModel {
+ objectName: "listModel"
+ ListElement {
+ black: false
+ rounded: false
+ }
+ ListElement {
+ black: true
+ rounded: false
+ }
+ ListElement {
+ black: true
+ rounded: false
+ }
+ }
+} \ No newline at end of file
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index 10805b4..f8d2411 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -49,6 +49,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qdebug.h>
#include <QtCore/qtranslator.h>
+#include <QSignalSpy>
#include "../../../shared/util.h"
@@ -57,6 +58,8 @@
#define SRCDIR "."
#endif
+Q_DECLARE_METATYPE(QList<int>)
+
class tst_qdeclarativelistmodel : public QObject
{
Q_OBJECT
@@ -64,6 +67,7 @@ public:
tst_qdeclarativelistmodel() {}
private:
+ int roleFromName(const QDeclarativeListModel *model, const QString &roleName);
QScriptValue nestedListValue(QScriptEngine *eng) const;
QDeclarativeItem *createWorkerTest(QDeclarativeEngine *eng, QDeclarativeComponent *component, QDeclarativeListModel *model);
void waitForWorker(QDeclarativeItem *item);
@@ -78,6 +82,8 @@ private slots:
void dynamic();
void dynamic_worker_data();
void dynamic_worker();
+ void dynamic_worker_sync_data();
+ void dynamic_worker_sync();
void convertNestedToFlat_fail();
void convertNestedToFlat_fail_data();
void convertNestedToFlat_ok();
@@ -85,8 +91,26 @@ private slots:
void enumerate();
void error_data();
void error();
+ void syncError();
void set();
+ void get();
+ void get_data();
+ void get_worker();
+ void get_worker_data();
+ void get_nested();
+ void get_nested_data();
+ void crash_model_with_multiple_roles();
};
+int tst_qdeclarativelistmodel::roleFromName(const QDeclarativeListModel *model, const QString &roleName)
+{
+ QList<int> roles = model->roles();
+ for (int i=0; i<roles.count(); i++) {
+ if (model->toString(roles[i]) == roleName)
+ return roles[i];
+ }
+ Q_ASSERT(false);
+ return -1;
+}
QScriptValue tst_qdeclarativelistmodel::nestedListValue(QScriptEngine *eng) const
{
@@ -196,6 +220,10 @@ void tst_qdeclarativelistmodel::dynamic_data()
QTest::newRow("get1") << "{get(0) === undefined}" << 1 << "";
QTest::newRow("get2") << "{get(-1) === undefined}" << 1 << "";
QTest::newRow("get3") << "{append({'foo':123});get(0) != undefined}" << 1 << "";
+ QTest::newRow("get4") << "{append({'foo':123});get(0).foo}" << 123 << "";
+
+ QTest::newRow("get-modify1") << "{append({'foo':123,'bar':456});get(0).foo = 333;get(0).foo}" << 333 << "";
+ QTest::newRow("get-modify2") << "{append({'z':1});append({'foo':123,'bar':456});get(1).bar = 999;get(1).bar}" << 999 << "";
QTest::newRow("append1") << "{append({'foo':123});count}" << 1 << "";
QTest::newRow("append2") << "{append({'foo':123,'bar':456});count}" << 1 << "";
@@ -233,7 +261,7 @@ void tst_qdeclarativelistmodel::dynamic_data()
QTest::newRow("set2") << "{append({'foo':123});set(0,{'foo':456});get(0).foo}" << 456 << "";
QTest::newRow("set3a") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).foo}" << 999 << "";
QTest::newRow("set3b") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).bar}" << 456 << "";
- QTest::newRow("set4a") << "{set(0,{'foo':456})}" << 0 << "<Unknown File>: QML ListModel: set: index 0 out of range";
+ QTest::newRow("set4a") << "{set(0,{'foo':456});count}" << 1 << "";
QTest::newRow("set4c") << "{set(-1,{'foo':456})}" << 0 << "<Unknown File>: QML ListModel: set: index -1 out of range";
QTest::newRow("set5a") << "{append({'foo':123,'bar':456});set(0,123);count}" << 1 << "<Unknown File>: QML ListModel: set: value is not an object";
QTest::newRow("set5b") << "{append({'foo':123,'bar':456});set(0,[1,2,3]);count}" << 1 << "<Unknown File>: QML ListModel: set: value is not an object";
@@ -310,8 +338,12 @@ void tst_qdeclarativelistmodel::dynamic_worker()
QFETCH(int, result);
QFETCH(QString, warning);
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ return;
+
// This is same as dynamic() except it applies the test to a ListModel called
- // from a WorkerScript (i.e. testing the internal NestedListModel class)
+ // from a WorkerScript (i.e. testing the internal FlatListModel that is created
+ // by the WorkerListModelAgent)
QDeclarativeListModel model;
QDeclarativeEngine eng;
@@ -330,27 +362,62 @@ void tst_qdeclarativelistmodel::dynamic_worker()
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
- if (operations.count() == 1) {
- // test count(), get() return the correct default values in the worker list model
- QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
- Q_ARG(QVariant, operations)));
- waitForWorker(item);
- QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
- } else {
- // execute a set of commands on the worker list model, then check the
- // changes are reflected in the list model in the main thread
- if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script");
-
- QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
- Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
- waitForWorker(item);
-
- QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString());
- if (!QByteArray(QTest::currentDataTag()).startsWith("nested"))
- QCOMPARE(e.evaluate().toInt(), result);
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations)));
+ waitForWorker(item);
+ QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
+
+ delete item;
+ qApp->processEvents();
+}
+
+
+
+void tst_qdeclarativelistmodel::dynamic_worker_sync_data()
+{
+ dynamic_data();
+}
+
+void tst_qdeclarativelistmodel::dynamic_worker_sync()
+{
+ QFETCH(QString, script);
+ QFETCH(int, result);
+ QFETCH(QString, warning);
+
+ // This is the same as dynamic_worker() except that it executes a set of list operations
+ // from the worker script, calls sync(), and tests the changes are reflected in the
+ // list in the main thread
+
+ QDeclarativeListModel model;
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
+ QVERIFY(item != 0);
+
+ if (script[0] == QLatin1Char('{') && script[script.length()-1] == QLatin1Char('}'))
+ script = script.mid(1, script.length() - 2);
+ QVariantList operations;
+ foreach (const QString &s, script.split(';')) {
+ if (!s.isEmpty())
+ operations << s;
}
+ if (!warning.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+
+ // execute a set of commands on the worker list model, then check the
+ // changes are reflected in the list model in the main thread
+ if (QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script");
+
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, operations.mid(0, operations.length()-1))));
+ waitForWorker(item);
+
+ QDeclarativeExpression e(eng.rootContext(), &model, operations.last().toString());
+ if (!QByteArray(QTest::currentDataTag()).startsWith("nested"))
+ QCOMPARE(e.evaluate().toInt(), result);
+
delete item;
qApp->processEvents();
}
@@ -374,7 +441,7 @@ void tst_qdeclarativelistmodel::convertNestedToFlat_fail()
model.append(nestedListValue(&s_eng));
QCOMPARE(model.count(), 2);
- QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: List contains nested list values and cannot be used from a worker script");
+ QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: List contains list-type data and cannot be used from a worker script");
QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, script)));
waitForWorker(item);
@@ -426,7 +493,7 @@ void tst_qdeclarativelistmodel::convertNestedToFlat_ok()
QCOMPARE(model.count(), count+1);
QScriptValue nested = nestedListValue(&s_eng);
- const char *warning = "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script";
+ const char *warning = "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script";
QTest::ignoreMessage(QtWarningMsg, warning);
model.append(nested);
@@ -595,6 +662,24 @@ void tst_qdeclarativelistmodel::error()
}
}
+void tst_qdeclarativelistmodel::syncError()
+{
+ QString qml = "import Qt 4.7\nListModel { id: lm; Component.onCompleted: lm.sync() }";
+ QString error = "file:dummy.qml:2:1: QML ListModel: List sync() can only be called from a WorkerScript";
+
+ QDeclarativeEngine engine;
+ QDeclarativeComponent component(&engine);
+ component.setData(qml.toUtf8(),
+ QUrl::fromLocalFile(QString("dummy.qml")));
+ QTest::ignoreMessage(QtWarningMsg,error.toUtf8());
+ QObject *obj = component.create();
+ QVERIFY(obj);
+ delete obj;
+}
+
+/*
+ Test model changes from set() are available to the view
+*/
void tst_qdeclarativelistmodel::set()
{
QDeclarativeEngine engine;
@@ -618,6 +703,220 @@ void tst_qdeclarativelistmodel::set()
QCOMPARE(model.data(0, model.roles()[0]), qVariantFromValue(false));
}
+/*
+ Test model changes on values returned by get() are available to the view
+*/
+void tst_qdeclarativelistmodel::get()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng);
+ component.setData(
+ "import Qt 4.7\n"
+ "ListModel { \n"
+ "ListElement { roleA: 100 }\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "}", QUrl());
+ QDeclarativeListModel *model = qobject_cast<QDeclarativeListModel*>(component.create());
+ int role = roleFromName(model, roleName);
+
+ QSignalSpy spy(model, SIGNAL(itemsChanged(int, int, QList<int>)));
+ QDeclarativeExpression expr(eng.rootContext(), model, expression);
+ expr.evaluate();
+ QVERIFY(!expr.hasError());
+
+ QCOMPARE(model->data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QCOMPARE(spyResult.at(2).value<QList<int> >(), (QList<int>() << role));
+}
+
+void tst_qdeclarativelistmodel::get_data()
+{
+ QTest::addColumn<QString>("expression");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<QString>("roleName");
+ QTest::addColumn<QVariant>("roleValue");
+
+ QTest::newRow("simple value") << "get(0).roleA = 500" << 0 << "roleA" << QVariant(500);
+ QTest::newRow("simple value 2") << "get(1).roleB = 500" << 1 << "roleB" << QVariant(500);
+
+ QVariantMap map;
+ map["zzz"] = 123;
+ QTest::newRow("object value") << "get(1).roleB = {'zzz':123}" << 1 << "roleB" << QVariant::fromValue(map);
+
+ QVariantList list;
+ map.clear(); map["a"] = 50; map["b"] = 500;
+ list << map;
+ map.clear(); map["c"] = 1000;
+ list << map;
+ QTest::newRow("list of objects") << "get(2).roleB = [{'a': 50, 'b': 500}, {'c': 1000}]" << 2 << "roleB" << QVariant::fromValue(list);
+}
+
+void tst_qdeclarativelistmodel::get_worker()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeListModel model;
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/model.qml"));
+ QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
+ QVERIFY(item != 0);
+ QScriptEngine *seng = QDeclarativeEnginePrivate::getScriptEngine(&eng);
+
+ // Add some values like get() test
+ QScriptValue sv = seng->newObject();
+ sv.setProperty(QLatin1String("roleA"), seng->newVariant(QVariant::fromValue(100)));
+ model.append(sv);
+ sv = seng->newObject();
+ sv.setProperty(QLatin1String("roleA"), seng->newVariant(QVariant::fromValue(200)));
+ sv.setProperty(QLatin1String("roleB"), seng->newVariant(QVariant::fromValue(400)));
+ model.append(sv);
+ model.append(sv);
+ int role = roleFromName(&model, roleName);
+
+ const char *warning = "<Unknown File>: QML ListModel: Cannot add list-type data when modifying or after modification from a worker script";
+ if (roleValue.type() == QVariant::List || roleValue.type() == QVariant::Map)
+ QTest::ignoreMessage(QtWarningMsg, warning);
+ QSignalSpy spy(&model, SIGNAL(itemsChanged(int, int, QList<int>)));
+
+ // in the worker thread, change the model data and call sync()
+ QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker",
+ Q_ARG(QVariant, QStringList(expression))));
+ waitForWorker(item);
+
+ // see if we receive the model changes in the main thread's model
+ if (roleValue.type() == QVariant::List || roleValue.type() == QVariant::Map) {
+ QVERIFY(model.data(index, role) != roleValue);
+ QCOMPARE(spy.count(), 0);
+ } else {
+ QCOMPARE(model.data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QVERIFY(spyResult.at(2).value<QList<int> >().contains(role));
+ }
+}
+
+void tst_qdeclarativelistmodel::get_worker_data()
+{
+ get_data();
+}
+
+/*
+ Test that the tests run in get() also work for nested list data
+*/
+void tst_qdeclarativelistmodel::get_nested()
+{
+ QFETCH(QString, expression);
+ QFETCH(int, index);
+ QFETCH(QString, roleName);
+ QFETCH(QVariant, roleValue);
+
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng);
+ component.setData(
+ "import Qt 4.7\n"
+ "ListModel { \n"
+ "ListElement {\n"
+ "listRoleA: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "}\n"
+ "ListElement {\n"
+ "listRoleA: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "listRoleB: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "listRoleC: [\n"
+ "ListElement { roleA: 100 },\n"
+ "ListElement { roleA: 200; roleB: 400 },\n"
+ "ListElement { roleA: 200; roleB: 400 } \n"
+ "]\n"
+ "}\n"
+ "}", QUrl());
+ QDeclarativeListModel *model = qobject_cast<QDeclarativeListModel*>(component.create());
+ QVERIFY(component.errorString().isEmpty());
+ QDeclarativeListModel *childModel;
+
+ // Test setting the inner list data for:
+ // get(0).listRoleA
+ // get(1).listRoleA
+ // get(1).listRoleB
+ // get(1).listRoleC
+
+ QList<QPair<int, QString> > testData;
+ testData << qMakePair(0, QString("listRoleA"));
+ testData << qMakePair(1, QString("listRoleA"));
+ testData << qMakePair(1, QString("listRoleB"));
+ testData << qMakePair(1, QString("listRoleC"));
+
+ for (int i=0; i<testData.count(); i++) {
+ int outerListIndex = testData[i].first;
+ QString outerListRoleName = testData[i].second;
+ int outerListRole = roleFromName(model, outerListRoleName);
+
+ childModel = qobject_cast<QDeclarativeListModel*>(model->data(outerListIndex, outerListRole).value<QObject*>());
+ QVERIFY(childModel);
+
+ QString extendedExpression = QString("get(%1).%2.%3").arg(outerListIndex).arg(outerListRoleName).arg(expression);
+ QDeclarativeExpression expr(eng.rootContext(), model, extendedExpression);
+
+ QSignalSpy spy(childModel, SIGNAL(itemsChanged(int, int, QList<int>)));
+ expr.evaluate();
+ QVERIFY(!expr.hasError());
+
+ int role = roleFromName(childModel, roleName);
+ QCOMPARE(childModel->data(index, role), roleValue);
+ QCOMPARE(spy.count(), 1);
+
+ QList<QVariant> spyResult = spy.takeFirst();
+ QCOMPARE(spyResult.at(0).toInt(), index);
+ QCOMPARE(spyResult.at(1).toInt(), 1); // only 1 item is modified at a time
+ QCOMPARE(spyResult.at(2).value<QList<int> >(), (QList<int>() << role));
+ }
+}
+
+void tst_qdeclarativelistmodel::get_nested_data()
+{
+ get_data();
+}
+
+//QTBUG-13754
+void tst_qdeclarativelistmodel::crash_model_with_multiple_roles()
+{
+ QDeclarativeEngine eng;
+ QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/multipleroles.qml"));
+ QObject *rootItem = component.create();
+ QVERIFY(component.errorString().isEmpty());
+ QVERIFY(rootItem != 0);
+ QDeclarativeListModel *model = rootItem->findChild<QDeclarativeListModel*>("listModel");
+ QVERIFY(model != 0);
+
+ // used to cause a crash in QDeclarativeVisualDataModel
+ model->setProperty(0, "black", true);
+}
QTEST_MAIN(tst_qdeclarativelistmodel)
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
index 2081f0e..e1022e0 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
@@ -117,6 +117,7 @@ void tst_qdeclarativemoduleplugin::importsPlugin()
QObject *object = component.create();
QVERIFY(object != 0);
QCOMPARE(object->property("value").toInt(),123);
+ delete object;
}
QTEST_MAIN(tst_qdeclarativemoduleplugin)
diff --git a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
index a5c3772..fb3c910 100644
--- a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
+++ b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
@@ -21,6 +21,7 @@ PathView {
Rectangle {
id: wrapper
objectName: "wrapper"
+ property bool onPath: PathView.onPath
width: 20; height: 20; color: name
Text {
objectName: "myText"
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index 74d2f0a..cbfbfbd 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -152,27 +152,27 @@ public:
QString number(int index) const { return list.at(index).second; }
void addItem(const QString &name, const QString &number) {
- emit beginInsertRows(QModelIndex(), list.count(), list.count());
+ beginInsertRows(QModelIndex(), list.count(), list.count());
list.append(QPair<QString,QString>(name, number));
- emit endInsertRows();
+ endInsertRows();
}
void insertItem(int index, const QString &name, const QString &number) {
- emit beginInsertRows(QModelIndex(), index, index);
+ beginInsertRows(QModelIndex(), index, index);
list.insert(index, QPair<QString,QString>(name, number));
- emit endInsertRows();
+ endInsertRows();
}
void removeItem(int index) {
- emit beginRemoveRows(QModelIndex(), index, index);
+ beginRemoveRows(QModelIndex(), index, index);
list.removeAt(index);
- emit endRemoveRows();
+ endRemoveRows();
}
void moveItem(int from, int to) {
- emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
list.move(from, to);
- emit endMoveRows();
+ endMoveRows();
}
void modifyItem(int idx, const QString &name, const QString &number) {
@@ -411,6 +411,13 @@ void tst_QDeclarativePathView::dataModel()
QVERIFY(text);
QCOMPARE(text->text(), model.name(3));
+ model.moveItem(3, 5);
+ QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 5);
+ QList<QDeclarativeItem*> items = findItems<QDeclarativeItem>(pathview, "wrapper");
+ foreach (QDeclarativeItem *item, items) {
+ QVERIFY(item->property("onPath").toBool());
+ }
+
delete canvas;
}
diff --git a/tests/auto/declarative/qdeclarativeqt/data/quit.qml b/tests/auto/declarative/qdeclarativeqt/data/quit.qml
new file mode 100644
index 0000000..f4c8441
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeqt/data/quit.qml
@@ -0,0 +1,5 @@
+import Qt 4.7
+
+QtObject {
+ Component.onCompleted: Qt.quit()
+}
diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
index 895ee6c..739b10a 100644
--- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
+++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
@@ -50,6 +50,7 @@
#include <QVector3D>
#include <QCryptographicHash>
#include <QDeclarativeItem>
+#include <QSignalSpy>
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
@@ -84,6 +85,7 @@ private slots:
void btoa();
void atob();
void fontFamilies();
+ void quit();
private:
QDeclarativeEngine engine;
@@ -518,6 +520,18 @@ void tst_qdeclarativeqt::fontFamilies()
delete object;
}
+void tst_qdeclarativeqt::quit()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("quit.qml"));
+
+ QSignalSpy spy(&engine, SIGNAL(quit()));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(spy.count(), 1);
+
+ delete object;
+}
+
QTEST_MAIN(tst_qdeclarativeqt)
#include "tst_qdeclarativeqt.moc"
diff --git a/tests/auto/declarative/qdeclarativeview/data/error1.qml b/tests/auto/declarative/qdeclarativeview/data/error1.qml
new file mode 100644
index 0000000..c154716
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeview/data/error1.qml
@@ -0,0 +1,5 @@
+import Qt 4.7
+
+Rectangle {
+ nonExistentProperty: 5
+}
diff --git a/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp b/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp
index 6450e38..9ac79e4 100644
--- a/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp
+++ b/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp
@@ -62,6 +62,7 @@ public:
private slots:
void resizemodedeclarativeitem();
void resizemodegraphicswidget();
+ void errors();
private:
template<typename T>
@@ -255,6 +256,22 @@ void tst_QDeclarativeView::resizemodegraphicswidget()
delete canvas;
}
+static void silentErrorsMsgHandler(QtMsgType, const char *)
+{
+}
+
+void tst_QDeclarativeView::errors()
+{
+ QDeclarativeView *canvas = new QDeclarativeView;
+ QVERIFY(canvas);
+ QtMsgHandler old = qInstallMsgHandler(silentErrorsMsgHandler);
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/error1.qml"));
+ qInstallMsgHandler(old);
+ QVERIFY(canvas->status() == QDeclarativeView::Error);
+ QVERIFY(canvas->errors().count() == 1);
+ delete canvas;
+}
+
template<typename T>
T *tst_QDeclarativeView::findItem(QGraphicsObject *parent, const QString &objectName)
{
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
index 093610d..1eed403 100644
--- a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
@@ -1,4 +1,3 @@
-*.*Function 'eval' is not implemented
Updating 'project\.ts'\.\.\.
Found 3 source text\(s\) \(3 new and 0 already existing\)
Removed 5 obsolete entries
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 5ba6c52..e6d2135 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -122,12 +122,19 @@ static bool prepareMatch(const QString &expect, QString *tmpl, int *require, int
return true;
}
-void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn, bool err)
+void tst_lupdate::doCompare(const QStringList &_actual, const QString &expectedFn, bool err)
{
QFile file(expectedFn);
QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(expectedFn));
QStringList expected = QString(file.readAll()).split('\n');
+ QStringList actual;
+ actual.reserve(_actual.size());
+ QRegExp niRx(".*:Function '\\w+' is not implemented");
+ foreach (const QString &a, _actual)
+ if (!niRx.exactMatch(a))
+ actual << a;
+
int ei = 0, ai = 0, em = expected.size(), am = actual.size();
int oei = 0, oai = 0, oem = em, oam = am;
int require = 0, accept = 0;
diff --git a/tests/auto/qapplication/test/test.pro b/tests/auto/qapplication/test/test.pro
index 30eb751..2c54c37 100644
--- a/tests/auto/qapplication/test/test.pro
+++ b/tests/auto/qapplication/test/test.pro
@@ -12,7 +12,7 @@ wince* {
}
symbian: {
- additional.sources = ../desktopsettingsaware/desktopsettingsaware.exe
+ additional.sources = $$OUT_PWD/../desktopsettingsaware/desktopsettingsaware.exe
additional.path = desktopsettingsaware
someTest.sources = test.pro
someTest.path = test
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 4476084..25ec040 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -377,6 +377,7 @@ private slots:
void itemClipsChildrenToShape2();
void itemClipsChildrenToShape3();
void itemClipsChildrenToShape4();
+ void itemClipsChildrenToShape5();
void itemClipsTextChildToShape();
void itemClippingDiscovery();
void ancestorFlags();
@@ -5464,6 +5465,193 @@ void tst_QGraphicsItem::itemClipsChildrenToShape4()
QTRY_COMPARE(innerWidget->painted, true);
}
+//#define DEBUG_ITEM_CLIPS_CHILDREN_TO_SHAPE_5
+static inline void renderSceneToImage(QGraphicsScene *scene, QImage *image, const QString &filename)
+{
+ image->fill(0);
+ QPainter painter(image);
+ scene->render(&painter);
+ painter.end();
+#ifdef DEBUG_ITEM_CLIPS_CHILDREN_TO_SHAPE_5
+ image->save(filename);
+#else
+ Q_UNUSED(filename);
+#endif
+}
+
+void tst_QGraphicsItem::itemClipsChildrenToShape5()
+{
+ class ParentItem : public QGraphicsRectItem
+ {
+ public:
+ ParentItem(qreal x, qreal y, qreal width, qreal height)
+ : QGraphicsRectItem(x, y, width, height) {}
+
+ QPainterPath shape() const
+ {
+ QPainterPath path;
+ path.addRect(50, 50, 200, 200);
+ return path;
+ }
+ };
+
+ ParentItem *parent = new ParentItem(0, 0, 300, 300);
+ parent->setBrush(Qt::blue);
+ parent->setOpacity(0.5);
+
+ const QRegion parentRegion(0, 0, 300, 300);
+ const QRegion clippedParentRegion = parentRegion & QRect(50, 50, 200, 200);
+ QRegion childRegion;
+ QRegion grandChildRegion;
+
+ QGraphicsRectItem *topLeftChild = new QGraphicsRectItem(0, 0, 100, 100);
+ topLeftChild->setBrush(Qt::red);
+ topLeftChild->setParentItem(parent);
+ childRegion += QRect(0, 0, 100, 100);
+
+ QGraphicsRectItem *topRightChild = new QGraphicsRectItem(0, 0, 100, 100);
+ topRightChild->setBrush(Qt::red);
+ topRightChild->setParentItem(parent);
+ topRightChild->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
+ topRightChild->setPos(200, 0);
+ childRegion += QRect(200, 0, 100, 100);
+
+ QGraphicsRectItem *topRightGrandChild = new QGraphicsRectItem(0, 0, 100, 100);
+ topRightGrandChild->setBrush(Qt::green);
+ topRightGrandChild->setParentItem(topRightChild);
+ topRightGrandChild->setPos(-40, 40);
+ grandChildRegion += QRect(200 - 40, 0 + 40, 100, 100) & QRect(200, 0, 100, 100);
+
+ QGraphicsRectItem *bottomLeftChild = new QGraphicsRectItem(0, 0, 100, 100);
+ bottomLeftChild->setBrush(Qt::red);
+ bottomLeftChild->setParentItem(parent);
+ bottomLeftChild->setFlag(QGraphicsItem::ItemClipsToShape);
+ bottomLeftChild->setPos(0, 200);
+ childRegion += QRect(0, 200, 100, 100);
+
+ QGraphicsRectItem *bottomLeftGrandChild = new QGraphicsRectItem(0, 0, 160, 160);
+ bottomLeftGrandChild->setBrush(Qt::green);
+ bottomLeftGrandChild->setParentItem(bottomLeftChild);
+ bottomLeftGrandChild->setFlag(QGraphicsItem::ItemClipsToShape);
+ bottomLeftGrandChild->setPos(0, -60);
+ grandChildRegion += QRect(0, 200 - 60, 160, 160);
+
+ QGraphicsRectItem *bottomRightChild = new QGraphicsRectItem(0, 0, 100, 100);
+ bottomRightChild->setBrush(Qt::red);
+ bottomRightChild->setParentItem(parent);
+ bottomRightChild->setPos(200, 200);
+ childRegion += QRect(200, 200, 100, 100);
+
+ QPoint controlPoints[17] = {
+ QPoint(5, 5) , QPoint(95, 5) , QPoint(205, 5) , QPoint(295, 5) ,
+ QPoint(5, 95) , QPoint(95, 95) , QPoint(205, 95) , QPoint(295, 95) ,
+ QPoint(150, 150),
+ QPoint(5, 205), QPoint(95, 205), QPoint(205, 205), QPoint(295, 205),
+ QPoint(5, 295), QPoint(95, 295), QPoint(205, 295), QPoint(295, 295),
+ };
+
+ const QRegion clippedChildRegion = childRegion & QRect(50, 50, 200, 200);
+ const QRegion clippedGrandChildRegion = grandChildRegion & QRect(50, 50, 200, 200);
+
+ QGraphicsScene scene;
+ scene.addItem(parent);
+ QImage sceneImage(300, 300, QImage::Format_ARGB32);
+
+#define VERIFY_CONTROL_POINTS(pRegion, cRegion, gRegion) \
+ for (int i = 0; i < 17; ++i) { \
+ QPoint controlPoint = controlPoints[i]; \
+ QRgb pixel = sceneImage.pixel(controlPoint.x(), controlPoint.y()); \
+ if (pRegion.contains(controlPoint)) \
+ QVERIFY(qBlue(pixel) != 0); \
+ else \
+ QVERIFY(qBlue(pixel) == 0); \
+ if (cRegion.contains(controlPoint)) \
+ QVERIFY(qRed(pixel) != 0); \
+ else \
+ QVERIFY(qRed(pixel) == 0); \
+ if (gRegion.contains(controlPoint)) \
+ QVERIFY(qGreen(pixel) != 0); \
+ else \
+ QVERIFY(qGreen(pixel) == 0); \
+ }
+
+ const QList<QGraphicsItem *> children = parent->childItems();
+ const int childrenCount = children.count();
+
+ for (int i = 0; i < 5; ++i) {
+ QString clipString;
+ QString childString;
+ switch (i) {
+ case 0:
+ // All children stacked in front.
+ childString = QLatin1String("ChildrenInFront.png");
+ foreach (QGraphicsItem *child, children)
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, false);
+ break;
+ case 1:
+ // All children stacked behind.
+ childString = QLatin1String("ChildrenBehind.png");
+ foreach (QGraphicsItem *child, children)
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, true);
+ break;
+ case 2:
+ // First half of the children behind, second half in front.
+ childString = QLatin1String("FirstHalfBehind_SecondHalfInFront.png");
+ for (int j = 0; j < childrenCount; ++j) {
+ QGraphicsItem *child = children.at(j);
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, (j < childrenCount / 2));
+ }
+ break;
+ case 3:
+ // First half of the children in front, second half behind.
+ childString = QLatin1String("FirstHalfInFront_SecondHalfBehind.png");
+ for (int j = 0; j < childrenCount; ++j) {
+ QGraphicsItem *child = children.at(j);
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, (j >= childrenCount / 2));
+ }
+ break;
+ case 4:
+ // Child2 and child4 behind, rest in front.
+ childString = QLatin1String("Child2And4Behind_RestInFront.png");
+ for (int j = 0; j < childrenCount; ++j) {
+ QGraphicsItem *child = children.at(j);
+ if (j == 1 || j == 3)
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, true);
+ else
+ child->setFlag(QGraphicsItem::ItemStacksBehindParent, false);
+ }
+ break;
+ default:
+ qFatal("internal error");
+ }
+
+ // Nothing is clipped.
+ parent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
+ parent->setFlag(QGraphicsItem::ItemClipsToShape, false);
+ clipString = QLatin1String("nothingClipped_");
+ renderSceneToImage(&scene, &sceneImage, clipString + childString);
+ VERIFY_CONTROL_POINTS(parentRegion, childRegion, grandChildRegion);
+
+ // Parent clips children to shape.
+ parent->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
+ clipString = QLatin1String("parentClipsChildrenToShape_");
+ renderSceneToImage(&scene, &sceneImage, clipString + childString);
+ VERIFY_CONTROL_POINTS(parentRegion, clippedChildRegion, clippedGrandChildRegion);
+
+ // Parent clips itself and children to shape.
+ parent->setFlag(QGraphicsItem::ItemClipsToShape);
+ clipString = QLatin1String("parentClipsItselfAndChildrenToShape_");
+ renderSceneToImage(&scene, &sceneImage, clipString + childString);
+ VERIFY_CONTROL_POINTS(clippedParentRegion, clippedChildRegion, clippedGrandChildRegion);
+
+ // Parent clips itself to shape.
+ parent->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
+ clipString = QLatin1String("parentClipsItselfToShape_");
+ renderSceneToImage(&scene, &sceneImage, clipString + childString);
+ VERIFY_CONTROL_POINTS(clippedParentRegion, childRegion, grandChildRegion);
+ }
+}
+
void tst_QGraphicsItem::itemClipsTextChildToShape()
{
// Construct a scene with a rect that clips its children, with one text
diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
index 7b5ac7a..af02c55 100644
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
@@ -2492,25 +2492,31 @@ void tst_QGraphicsView::optimizationFlags_dontSavePainterState()
void tst_QGraphicsView::optimizationFlags_dontSavePainterState2_data()
{
QTest::addColumn<bool>("savePainter");
- QTest::newRow("With painter state protection") << true;
- QTest::newRow("Without painter state protection") << false;
+ QTest::addColumn<bool>("indirectPainting");
+ QTest::newRow("With painter state protection, without indirect painting") << true << false;
+ QTest::newRow("Without painter state protection, without indirect painting") << false << false;
+ QTest::newRow("With painter state protectionm, with indirect painting") << true << true;
+ QTest::newRow("Without painter state protection, with indirect painting") << false << true;
}
void tst_QGraphicsView::optimizationFlags_dontSavePainterState2()
{
QFETCH(bool, savePainter);
+ QFETCH(bool, indirectPainting);
class MyScene : public QGraphicsScene
{
public:
void drawBackground(QPainter *p, const QRectF &)
- { transformInDrawBackground = p->worldTransform(); }
+ { transformInDrawBackground = p->worldTransform(); opacityInDrawBackground = p->opacity(); }
void drawForeground(QPainter *p, const QRectF &)
- { transformInDrawForeground = p->worldTransform(); }
+ { transformInDrawForeground = p->worldTransform(); opacityInDrawForeground = p->opacity(); }
QTransform transformInDrawBackground;
QTransform transformInDrawForeground;
+ qreal opacityInDrawBackground;
+ qreal opacityInDrawForeground;
};
MyScene scene;
@@ -2518,9 +2524,13 @@ void tst_QGraphicsView::optimizationFlags_dontSavePainterState2()
scene.addRect(0, 0, 20, 20)->setTransform(QTransform::fromScale(2, 2));
scene.addRect(50, 50, 20, 20)->setTransform(QTransform::fromTranslate(200, 200));
+ foreach (QGraphicsItem *item, scene.items())
+ item->setOpacity(0.6);
+
CustomView view(&scene);
if (!savePainter)
view.setOptimizationFlag(QGraphicsView::DontSavePainterState);
+ view.setOptimizationFlag(QGraphicsView::IndirectPainting, indirectPainting);
view.rotate(45);
view.scale(1.5, 1.5);
view.show();
@@ -2534,10 +2544,38 @@ void tst_QGraphicsView::optimizationFlags_dontSavePainterState2()
QVERIFY(view.painted);
// Make sure the painter's world transform is preserved after drawItems.
- const QTransform expectedTransform = view.viewportTransform();
+ QTransform expectedTransform = view.viewportTransform();
QVERIFY(!expectedTransform.isIdentity());
QCOMPARE(scene.transformInDrawForeground, expectedTransform);
QCOMPARE(scene.transformInDrawBackground, expectedTransform);
+
+ qreal expectedOpacity = 1.0;
+ QCOMPARE(scene.opacityInDrawBackground, expectedOpacity);
+ QCOMPARE(scene.opacityInDrawForeground, expectedOpacity);
+
+ // Trigger more painting, this time from QGraphicsScene::render.
+ QImage image(scene.sceneRect().size().toSize(), QImage::Format_RGB32);
+ QPainter painter(&image);
+ scene.render(&painter);
+ painter.end();
+
+ expectedTransform = QTransform();
+ QCOMPARE(scene.transformInDrawForeground, expectedTransform);
+ QCOMPARE(scene.transformInDrawBackground, expectedTransform);
+ QCOMPARE(scene.opacityInDrawBackground, expectedOpacity);
+ QCOMPARE(scene.opacityInDrawForeground, expectedOpacity);
+
+ // Trigger more painting with another opacity on the painter.
+ painter.begin(&image);
+ painter.setOpacity(0.4);
+ expectedOpacity = 0.4;
+ scene.render(&painter);
+ painter.end();
+
+ QCOMPARE(scene.transformInDrawForeground, expectedTransform);
+ QCOMPARE(scene.transformInDrawBackground, expectedTransform);
+ QCOMPARE(scene.opacityInDrawBackground, expectedOpacity);
+ QCOMPARE(scene.opacityInDrawForeground, expectedOpacity);
}
class LodItem : public QGraphicsRectItem
diff --git a/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg b/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg
new file mode 100644
index 0000000..605e8a8
--- /dev/null
+++ b/tests/auto/qimagereader/images/qtbug13653-no_eoi.jpg
Binary files differ
diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc
index 1acc82f..5536b38 100644
--- a/tests/auto/qimagereader/qimagereader.qrc
+++ b/tests/auto/qimagereader/qimagereader.qrc
@@ -63,5 +63,6 @@
<file>images/rect.svgz</file>
<file>images/corrupt.svg</file>
<file>images/corrupt.svgz</file>
+ <file>images/qtbug13653-no_eoi.jpg</file>
</qresource>
</RCC>
diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp
index 5b30b04..3bee5d9 100644
--- a/tests/auto/qimagereader/tst_qimagereader.cpp
+++ b/tests/auto/qimagereader/tst_qimagereader.cpp
@@ -239,6 +239,7 @@ void tst_QImageReader::readImage_data()
#if defined QTEST_HAVE_JPEG
QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg");
+ QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg");
#endif
#if defined QTEST_HAVE_GIF
QTest::newRow("GIF: earth") << QString("earth.gif") << true << QByteArray("gif");
@@ -1039,6 +1040,7 @@ void tst_QImageReader::readFromDevice_data()
QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg");
QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg");
QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg");
+ QTest::newRow("jpeg-4") << QString("qtbug13653-no_eoi.jpg") << QByteArray("jpeg");
#endif // QTEST_HAVE_JPEG
#ifdef QTEST_HAVE_GIF
QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif");
@@ -1314,6 +1316,9 @@ void tst_QImageReader::readFromResources_data()
QTest::newRow("YCbCr_rgb.jpg") << QString("YCbCr_rgb.jpg")
<< QByteArray("jpg") << QSize(75, 50)
<< QString("");
+ QTest::newRow("qtbug13653-no_eoi.jpg") << QString("qtbug13653-no_eoi.jpg")
+ << QByteArray("jpg") << QSize(240, 180)
+ << QString("");
#endif
#ifdef QTEST_HAVE_MNG
QTest::newRow("corrupt.mng") << QString("corrupt.mng")
diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index f358681..45f5c3e 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -252,6 +252,8 @@ private slots:
void QTBUG5939_attachPainterPrivate();
+ void drawPointScaled();
+
private:
void fillData();
void setPenColor(QPainter& p);
@@ -3170,7 +3172,6 @@ void fpe_steepSlopes()
p.setRenderHint(QPainter::Antialiasing, antialiased);
p.setTransform(transform);
- QEXPECT_FAIL("steep line 3 aa", "needs to be fixed", Continue);
p.drawLine(line);
}
@@ -4522,6 +4523,26 @@ void tst_QPainter::QTBUG5939_attachPainterPrivate()
QCOMPARE(widget->deviceTransform, proxy->deviceTransform);
}
+void tst_QPainter::drawPointScaled()
+{
+ QImage image(32, 32, QImage::Format_RGB32);
+ image.fill(0xffffffff);
+
+ QPainter p(&image);
+
+ p.scale(0.1, 0.1);
+
+ QPen pen;
+ pen.setWidth(1000);
+ pen.setColor(Qt::red);
+
+ p.setPen(pen);
+ p.drawPoint(0, 0);
+ p.end();
+
+ QCOMPARE(image.pixel(16, 16), 0xffff0000);
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
index f0f087d..12d2c57 100644
--- a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
+++ b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp
@@ -72,6 +72,7 @@ private slots:
void convolutionBoundingRectFor();
void convolutionDrawSubRect();
void dropShadowBoundingRectFor();
+ void blurIndexed8();
void testDefaultImplementations();
};
@@ -423,6 +424,27 @@ void tst_QPixmapFilter::dropShadowBoundingRectFor()
QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta - 10, -delta - 10, 0, 0));
}
+QT_BEGIN_NAMESPACE
+void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+QT_END_NAMESPACE
+
+void tst_QPixmapFilter::blurIndexed8()
+{
+ QImage img(16, 32, QImage::Format_Indexed8);
+ img.setColorCount(256);
+ for (int i = 0; i < 256; ++i)
+ img.setColor(i, qRgb(i, i, i));
+
+ img.fill(255);
+
+ QImage original = img;
+ qt_blurImage(img, 10, true, false);
+ QCOMPARE(original.size(), img.size());
+
+ original = img;
+ qt_blurImage(img, 10, true, true);
+ QCOMPARE(original.size(), QSize(img.height(), img.width()));
+}
QTEST_MAIN(tst_QPixmapFilter)
#include "tst_qpixmapfilter.moc"
diff --git a/tests/auto/qsettings/qsettings.pro b/tests/auto/qsettings/qsettings.pro
index 115fb13..19513b3 100644
--- a/tests/auto/qsettings/qsettings.pro
+++ b/tests/auto/qsettings/qsettings.pro
@@ -5,3 +5,4 @@ RESOURCES += qsettings.qrc
contains(QT_CONFIG, qt3support):QT += qt3support
CONFIG -= debug
CONFIG += release
+win32-msvc*:LIBS += advapi32.lib
diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp
index 7a5b053..843749a 100644
--- a/tests/auto/qthread/tst_qthread.cpp
+++ b/tests/auto/qthread/tst_qthread.cpp
@@ -49,6 +49,7 @@
#include <qtimer.h>
#include <qwaitcondition.h>
#include <qdebug.h>
+#include <qmetaobject.h>
#ifdef Q_OS_UNIX
#include <pthread.h>
@@ -104,6 +105,8 @@ private slots:
void adoptedThreadFinished();
void adoptMultipleThreads();
+ void QTBUG13810_exitAndStart();
+
void stressTest();
};
@@ -934,6 +937,44 @@ void tst_QThread::stressTest()
}
}
+class Syncronizer : public QObject
+{ Q_OBJECT
+public slots:
+ void setProp(int p) {
+ if(m_prop != p) {
+ m_prop = p;
+ emit propChanged(p);
+ }
+ }
+signals:
+ void propChanged(int);
+public:
+ Syncronizer() : m_prop(42) {}
+ int m_prop;
+};
+
+void tst_QThread::QTBUG13810_exitAndStart()
+{
+ QThread thread;
+ thread.exit(555); //should do nothing
+
+ thread.start();
+
+ //test that the thread is running by executing queued connected signal there
+ Syncronizer sync1;
+ sync1.moveToThread(&thread);
+ Syncronizer sync2;
+ sync2.moveToThread(&thread);
+ connect(&sync2, SIGNAL(propChanged(int)), &sync1, SLOT(setProp(int)), Qt::QueuedConnection);
+ connect(&sync1, SIGNAL(propChanged(int)), &thread, SLOT(quit()), Qt::QueuedConnection);
+ QMetaObject::invokeMethod(&sync2, "setProp", Qt::QueuedConnection , Q_ARG(int, 89));
+ QTest::qWait(50);
+ while(!thread.wait(10))
+ QTest::qWait(10);
+ QCOMPARE(sync2.m_prop, 89);
+ QCOMPARE(sync1.m_prop, 89);
+}
+
QTEST_MAIN(tst_QThread)
#include "tst_qthread.moc"
diff --git a/tests/auto/qtimer/tst_qtimer.cpp b/tests/auto/qtimer/tst_qtimer.cpp
index f23d065..102308e 100644
--- a/tests/auto/qtimer/tst_qtimer.cpp
+++ b/tests/auto/qtimer/tst_qtimer.cpp
@@ -89,6 +89,7 @@ private slots:
void recurseOnTimeoutAndStopTimer();
void QTBUG13633_dontBlockEvents();
+ void postedEventsShouldNotStarveTimers();
};
class TimerHelper : public QObject
@@ -723,5 +724,31 @@ void tst_QTimer::QTBUG13633_dontBlockEvents()
QVERIFY(t.total > 2);
}
+class SlotRepeater : public QObject {
+ Q_OBJECT
+public:
+ SlotRepeater() {}
+
+public slots:
+ void repeatThisSlot()
+ {
+ QMetaObject::invokeMethod(this, "repeatThisSlot", Qt::QueuedConnection);
+ }
+};
+
+void tst_QTimer::postedEventsShouldNotStarveTimers()
+{
+ TimerHelper timerHelper;
+ QTimer timer;
+ connect(&timer, SIGNAL(timeout()), &timerHelper, SLOT(timeout()));
+ timer.setInterval(0);
+ timer.setSingleShot(false);
+ timer.start();
+ SlotRepeater slotRepeater;
+ slotRepeater.repeatThisSlot();
+ QTest::qWait(100);
+ QVERIFY(timerHelper.count > 5);
+}
+
QTEST_MAIN(tst_QTimer)
#include "tst_qtimer.moc"
diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp
index 7e2e800..c7b53e9 100644
--- a/tests/auto/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp
@@ -240,6 +240,7 @@ private slots:
void taskQTBUG_6450_selectAllWith1stColumnHidden();
void taskQTBUG_9216_setSizeAndUniformRowHeightsWrongRepaint();
void taskQTBUG_11466_keyboardNavigationRegression();
+ void taskQTBUG_13567_removeLastItemRegression();
};
class QtTestModel: public QAbstractItemModel
@@ -3910,5 +3911,26 @@ void tst_QTreeView::taskQTBUG_11466_keyboardNavigationRegression()
QTRY_COMPARE(treeView.currentIndex(), treeView.selectionModel()->selection().indexes().first());
}
+void tst_QTreeView::taskQTBUG_13567_removeLastItemRegression()
+{
+ QtTestModel model(200, 1);
+
+ QTreeView view;
+ view.setSelectionMode(QAbstractItemView::ExtendedSelection);
+ view.setModel(&model);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ view.scrollToBottom();
+ QTest::qWait(10);
+ CHECK_VISIBLE(199, 0);
+
+ view.setCurrentIndex(model.index(199, 0));
+ model.removeLastRow();
+ QTest::qWait(10);
+ QCOMPARE(view.currentIndex(), model.index(198, 0));
+ CHECK_VISIBLE(198, 0);
+}
+
QTEST_MAIN(tst_QTreeView)
#include "tst_qtreeview.moc"
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index 098ce3c..2f221d2 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -70,6 +70,7 @@
#include <qtoolbar.h>
#include <QtGui/qpaintengine.h>
#include <private/qbackingstore_p.h>
+#include <qmenubar.h>
#include <QtGui/QGraphicsView>
#include <QtGui/QGraphicsProxyWidget>
@@ -81,8 +82,14 @@
#include <avkon.hrh> // EEikStatusPaneUidTitle
#include <akntitle.h> // CAknTitlePane
#include <akncontext.h> // CAknContextPane
+#endif
+
+#ifdef Q_OS_SYMBIAN
#include <eikspane.h> // CEikStatusPane
#include <eikbtgpc.h> // CEikButtonGroupContainer
+#include <eikenv.h> // CEikonEnv
+#include <eikaufty.h> // MEikAppUiFactory
+#include <eikmenub.h> // CEikMenuBar
#endif
#ifdef Q_WS_QWS
@@ -387,6 +394,7 @@ private slots:
void maximizedWindowModeTransitions();
void minimizedWindowModeTransitions();
void normalWindowModeTransitions();
+ void focusSwitchClosesPopupMenu();
#endif
void focusProxyAndInputMethods();
@@ -10253,6 +10261,31 @@ void tst_QWidget::normalWindowModeTransitions()
QVERIFY(!buttonGroup->IsVisible());
QVERIFY(!statusPane->IsVisible());
}
+
+void tst_QWidget::focusSwitchClosesPopupMenu()
+{
+ QMainWindow mainWindow;
+ QAction action("Test action", &mainWindow);
+ mainWindow.menuBar()->addAction(&action);
+
+ mainWindow.show();
+ QT_TRAP_THROWING(CEikonEnv::Static()->AppUiFactory()->MenuBar()->TryDisplayMenuBarL());
+ QVERIFY(CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed());
+
+ // Close the popup by opening a new window.
+ QMainWindow mainWindow2;
+ QAction action2("Test action", &mainWindow2);
+ mainWindow2.menuBar()->addAction(&action2);
+ mainWindow2.show();
+ QVERIFY(!CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed());
+
+ QT_TRAP_THROWING(CEikonEnv::Static()->AppUiFactory()->MenuBar()->TryDisplayMenuBarL());
+ QVERIFY(CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed());
+
+ // Close the popup by switching focus.
+ mainWindow.activateWindow();
+ QVERIFY(!CEikonEnv::Static()->AppUiFactory()->MenuBar()->IsDisplayed());
+}
#endif
class InputContextTester : public QInputContext
diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt
index fd5b486..7f3aa9a 100644
--- a/tests/auto/selftests/expected_cmptest.txt
+++ b/tests/auto/selftests/expected_cmptest.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Cmptest *********
-Config: Using QTest library 4.7.0, Qt 4.7.0
+Config: Using QTest library 4.7.1, Qt 4.7.1
PASS : tst_Cmptest::initTestCase()
PASS : tst_Cmptest::compare_boolfuncs()
PASS : tst_Cmptest::compare_pointerfuncs()
diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt
index 3aced25..7ded525 100644
--- a/tests/auto/selftests/expected_crashes_3.txt
+++ b/tests/auto/selftests/expected_crashes_3.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Crashes *********
-Config: Using QTest library 4.7.0, Qt 4.7.0
+Config: Using QTest library 4.7.1, Qt 4.7.1
PASS : tst_Crashes::initTestCase()
QFATAL : tst_Crashes::crash() Received signal 11
FAIL! : tst_Crashes::crash() Received a fatal error.
diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt
index 1461bc6..9ad6f56 100644
--- a/tests/auto/selftests/expected_longstring.txt
+++ b/tests/auto/selftests/expected_longstring.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_LongString *********
-Config: Using QTest library 4.7.0, Qt 4.7.0
+Config: Using QTest library 4.7.1, Qt 4.7.1
PASS : tst_LongString::initTestCase()
FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt
index 908bd5d..949da13 100644
--- a/tests/auto/selftests/expected_maxwarnings.txt
+++ b/tests/auto/selftests/expected_maxwarnings.txt
@@ -1,5 +1,5 @@
********* Start testing of MaxWarnings *********
-Config: Using QTest library 4.7.0, Qt 4.7.0
+Config: Using QTest library 4.7.1, Qt 4.7.1
PASS : MaxWarnings::initTestCase()
QWARN : MaxWarnings::warn() 0
QWARN : MaxWarnings::warn() 1
diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt
index e5bf1ff..1f5bf7b 100644
--- a/tests/auto/selftests/expected_skip.txt
+++ b/tests/auto/selftests/expected_skip.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Skip *********
-Config: Using QTest library 4.7.0, Qt 4.7.0
+Config: Using QTest library 4.7.1, Qt 4.7.1
PASS : tst_Skip::initTestCase()
SKIP : tst_Skip::test() skipping all
Loc: [/home/user/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)]
diff --git a/tools/assistant/tools/assistant/cmdlineparser.cpp b/tools/assistant/tools/assistant/cmdlineparser.cpp
index 1cf2915..181abe2 100644
--- a/tools/assistant/tools/assistant/cmdlineparser.cpp
+++ b/tools/assistant/tools/assistant/cmdlineparser.cpp
@@ -300,6 +300,13 @@ QString CmdLineParser::collectionFile() const
return m_collectionFile;
}
+bool CmdLineParser::collectionFileGiven() const
+{
+ TRACE_OBJ
+ return m_arguments.contains(QLatin1String("-collectionfile"),
+ Qt::CaseInsensitive);
+}
+
QUrl CmdLineParser::url() const
{
TRACE_OBJ
diff --git a/tools/assistant/tools/assistant/cmdlineparser.h b/tools/assistant/tools/assistant/cmdlineparser.h
index db66494..9fc36b3 100644
--- a/tools/assistant/tools/assistant/cmdlineparser.h
+++ b/tools/assistant/tools/assistant/cmdlineparser.h
@@ -61,6 +61,7 @@ public:
void setCollectionFile(const QString &file);
QString collectionFile() const;
+ bool collectionFileGiven() const;
QString cloneFile() const;
QUrl url() const;
bool enableRemoteControl() const;
diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf
index 3b4b5f8..26cdafb 100644
--- a/tools/assistant/tools/assistant/doc/assistant.qdocconf
+++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf
@@ -12,5 +12,5 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"30%\" align=\"left\">Copyright &copy; 2010 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"40%\" align=\"center\">Trademarks</td>\n" \
- "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.0</div></td>\n" \
+ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.7.1</div></td>\n" \
"</tr></table></div></address>"
diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp
index bb86bfe..e3eef34 100644
--- a/tools/assistant/tools/assistant/main.cpp
+++ b/tools/assistant/tools/assistant/main.cpp
@@ -420,16 +420,18 @@ int main(int argc, char *argv[])
cachedCollection.setCurrentFilter(cmd.currentFilter());
}
- /*
- * We need to be careful here: The main window has to be deleted before
- * the help engine wrapper, which has to be deleted before the
- * QApplication.
- */
if (collectionFileGiven)
cmd.setCollectionFile(cachedCollectionFile);
+
MainWindow *w = new MainWindow(&cmd);
w->show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
+
+ /*
+ * We need to be careful here: The main window has to be deleted before
+ * the help engine wrapper, which has to be deleted before the
+ * QApplication.
+ */
const int retval = a.exec();
delete w;
HelpEngineWrapper::removeInstance();
diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp
index 65a58c0..68343a4 100644
--- a/tools/assistant/tools/assistant/mainwindow.cpp
+++ b/tools/assistant/tools/assistant/mainwindow.cpp
@@ -161,7 +161,7 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent)
setupActions();
statusBar()->show();
- if (initHelpDB()) {
+ if (initHelpDB(!cmdLine->collectionFileGiven())) {
setupFilterToolbar();
setupAddressToolbar();
@@ -281,13 +281,18 @@ void MainWindow::closeEvent(QCloseEvent *e)
QMainWindow::closeEvent(e);
}
-bool MainWindow::initHelpDB()
+bool MainWindow::initHelpDB(bool registerInternalDoc)
{
TRACE_OBJ
HelpEngineWrapper &helpEngineWrapper = HelpEngineWrapper::instance();
if (!helpEngineWrapper.setupData())
return false;
+ if (!registerInternalDoc) {
+ if (helpEngineWrapper.defaultHomePage() == QLatin1String("help"))
+ helpEngineWrapper.setDefaultHomePage(QLatin1String("about:blank"));
+ return true;
+ }
bool assistantInternalDocRegistered = false;
QString intern(QLatin1String("com.trolltech.com.assistantinternal-"));
foreach (const QString &ns, helpEngineWrapper.registeredDocumentations()) {
diff --git a/tools/assistant/tools/assistant/mainwindow.h b/tools/assistant/tools/assistant/mainwindow.h
index 8219140..26726ee 100644
--- a/tools/assistant/tools/assistant/mainwindow.h
+++ b/tools/assistant/tools/assistant/mainwindow.h
@@ -121,7 +121,7 @@ private slots:
void documentationUpdated(const QString &namespaceName);
private:
- bool initHelpDB();
+ bool initHelpDB(bool registerInternalDoc);
void setupActions();
void closeEvent(QCloseEvent *e);
void activateDockWidget(QWidget *w);
diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro
index 8a62fe1..810f006 100644
--- a/tools/configure/configure.pro
+++ b/tools/configure/configure.pro
@@ -1,5 +1,5 @@
TARGET = configure
-DESTDIR = ../..
+DESTDIR = $$PWD/../.. # build directly in source dir
CONFIG += console flat
CONFIG -= moc qt
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 6e66742..3808c4e 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -279,6 +279,7 @@ Configure::Configure(int& argc, char** argv)
dictionary[ "DIRECTSHOW" ] = "no";
dictionary[ "WEBKIT" ] = "auto";
dictionary[ "DECLARATIVE" ] = "auto";
+ dictionary[ "DECLARATIVE_DEBUG" ]= "yes";
dictionary[ "PLUGIN_MANIFESTS" ] = "yes";
QString version;
@@ -957,10 +958,16 @@ void Configure::parseCmdLine()
dictionary[ "WEBKIT" ] = "no";
} else if (configCmdLine.at(i) == "-webkit") {
dictionary[ "WEBKIT" ] = "yes";
+ } else if (configCmdLine.at(i) == "-webkit-debug") {
+ dictionary[ "WEBKIT" ] = "debug";
} else if (configCmdLine.at(i) == "-no-declarative") {
dictionary[ "DECLARATIVE" ] = "no";
} else if (configCmdLine.at(i) == "-declarative") {
dictionary[ "DECLARATIVE" ] = "yes";
+ } else if (configCmdLine.at(i) == "-no-declarative-debug") {
+ dictionary[ "DECLARATIVE_DEBUG" ] = "no";
+ } else if (configCmdLine.at(i) == "-declarative-debug") {
+ dictionary[ "DECLARATIVE_DEBUG" ] = "yes";
} else if (configCmdLine.at(i) == "-no-plugin-manifests") {
dictionary[ "PLUGIN_MANIFESTS" ] = "no";
} else if (configCmdLine.at(i) == "-plugin-manifests") {
@@ -1646,7 +1653,7 @@ bool Configure::displayHelp()
"[-phonon] [-no-phonon-backend] [-phonon-backend]\n"
"[-no-multimedia] [-multimedia] [-no-audio-backend] [-audio-backend]\n"
"[-no-script] [-script] [-no-scripttools] [-scripttools]\n"
- "[-no-webkit] [-webkit] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7);
+ "[-no-webkit] [-webkit] [-webkit-debug] [-graphicssystem raster|opengl|openvg]\n\n", 0, 7);
desc("Installation options:\n\n");
@@ -1830,12 +1837,15 @@ bool Configure::displayHelp()
desc("AUDIO_BACKEND", "yes","-audio-backend", "Compile in the platform audio backend into QtMultimedia");
desc("WEBKIT", "no", "-no-webkit", "Do not compile in the WebKit module");
desc("WEBKIT", "yes", "-webkit", "Compile in the WebKit module (WebKit is built if a decent C++ compiler is used.)");
+ desc("WEBKIT", "debug", "-webkit-debug", "Compile in the WebKit module with debug symbols.");
desc("SCRIPT", "no", "-no-script", "Do not build the QtScript module.");
desc("SCRIPT", "yes", "-script", "Build the QtScript module.");
desc("SCRIPTTOOLS", "no", "-no-scripttools", "Do not build the QtScriptTools module.");
desc("SCRIPTTOOLS", "yes", "-scripttools", "Build the QtScriptTools module.");
desc("DECLARATIVE", "no", "-no-declarative", "Do not build the declarative module");
desc("DECLARATIVE", "yes", "-declarative", "Build the declarative module");
+ desc("DECLARATIVE_DEBUG", "no", "-no-declarative-debug", "Do not build the declarative debugging support");
+ desc("DECLARATIVE_DEBUG", "yes", "-declarative-debug", "Build the declarative debugging support");
desc( "-arch <arch>", "Specify an architecture.\n"
"Available values for <arch>:");
@@ -2273,6 +2283,8 @@ void Configure::autoDetection()
dictionary["WEBKIT"] = checkAvailability("WEBKIT") ? "yes" : "no";
if (dictionary["DECLARATIVE"] == "auto")
dictionary["DECLARATIVE"] = dictionary["SCRIPT"] == "yes" ? "yes" : "no";
+ if (dictionary["DECLARATIVE_DEBUG"] == "auto")
+ dictionary["DECLARATIVE_DEBUG"] = dictionary["DECLARATIVE"] == "yes" ? "yes" : "no";
if (dictionary["AUDIO_BACKEND"] == "auto")
dictionary["AUDIO_BACKEND"] = checkAvailability("AUDIO_BACKEND") ? "yes" : "no";
if (dictionary["WMSDK"] == "auto")
@@ -2409,7 +2421,7 @@ void Configure::generateBuildKey()
+ buildSymbianKey + "\"\n"
"#else\n"
// Debug builds
- "# if (!QT_NO_DEBUG)\n"
+ "# if !defined(QT_NO_DEBUG)\n"
"# if (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))\n"
+ build64Key.arg("debug") + "\"\n"
"# else\n"
@@ -2683,10 +2695,12 @@ void Configure::generateOutputVars()
QString dst = buildPath + "/mkspecs/modules/qt_webkit_version.pri";
QFile::remove(dst);
- if (dictionary["WEBKIT"] == "yes") {
+ if (dictionary["WEBKIT"] != "no") {
// This include takes care of adding "webkit" to QT_CONFIG.
QString src = sourcePath + "/src/3rdparty/webkit/WebKit/qt/qt_webkit_version.pri";
QFile::copy(src, dst);
+ if (dictionary["WEBKIT"] == "debug")
+ qtConfig += "webkit-debug";
}
if (dictionary["DECLARATIVE"] == "yes") {
@@ -3101,6 +3115,7 @@ void Configure::generateConfigfiles()
if (dictionary["IPV6"] == "no") qconfigList += "QT_NO_IPV6";
if (dictionary["WEBKIT"] == "no") qconfigList += "QT_NO_WEBKIT";
if (dictionary["DECLARATIVE"] == "no") qconfigList += "QT_NO_DECLARATIVE";
+ if (dictionary["DECLARATIVE_DEBUG"] == "no") qconfigList += "QDECLARATIVE_NO_DEBUG_PROTOCOL";
if (dictionary["PHONON"] == "no") qconfigList += "QT_NO_PHONON";
if (dictionary["MULTIMEDIA"] == "no") qconfigList += "QT_NO_MULTIMEDIA";
if (dictionary["XMLPATTERNS"] == "no") qconfigList += "QT_NO_XMLPATTERNS";
@@ -3396,8 +3411,14 @@ void Configure::displayConfig()
cout << "QtXmlPatterns support......." << dictionary[ "XMLPATTERNS" ] << endl;
cout << "Phonon support.............." << dictionary[ "PHONON" ] << endl;
cout << "QtMultimedia support........" << dictionary[ "MULTIMEDIA" ] << endl;
- cout << "WebKit support.............." << dictionary[ "WEBKIT" ] << endl;
+ {
+ QString webkit = dictionary[ "WEBKIT" ];
+ if (webkit == "debug")
+ webkit = "yes (debug)";
+ cout << "WebKit support.............." << webkit;
+ }
cout << "Declarative support........." << dictionary[ "DECLARATIVE" ] << endl;
+ cout << "Declarative debugging......." << dictionary[ "DECLARATIVE_DEBUG" ] << endl;
cout << "QtScript support............" << dictionary[ "SCRIPT" ] << endl;
cout << "QtScriptTools support......." << dictionary[ "SCRIPTTOOLS" ] << endl;
cout << "Graphics System............." << dictionary[ "GRAPHICS_SYSTEM" ] << endl;
diff --git a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
index 5547761..794722e 100644
--- a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
+++ b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
@@ -724,7 +724,7 @@ SignalSlotEditorWindow::SignalSlotEditorWindow(QDesignerFormEditorInterface *cor
| QAbstractItemView::EditKeyPressed);
m_view->setRootIsDecorated(false);
m_view->setTextElideMode (Qt::ElideMiddle);
- connect(m_view, SIGNAL(activated(QModelIndex)), this, SLOT(updateUi()));
+ connect(m_view->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(updateUi()));
connect(m_view->header(), SIGNAL(sectionDoubleClicked(int)), m_view, SLOT(resizeColumnToContents(int)));
QVBoxLayout *layout = new QVBoxLayout(this);
diff --git a/tools/qdoc3/doc/files/qt.qdocconf b/tools/qdoc3/doc/files/qt.qdocconf
index 09c112a..4546c7a 100644
--- a/tools/qdoc3/doc/files/qt.qdocconf
+++ b/tools/qdoc3/doc/files/qt.qdocconf
@@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.indexTitle = Qt Reference Documentation
qhp.Qt.indexRoot =
@@ -36,9 +36,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp
index 7f39be2..f1eaddc 100644
--- a/tools/qdoc3/generator.cpp
+++ b/tools/qdoc3/generator.cpp
@@ -981,23 +981,26 @@ void Generator::generateThreadSafeness(const Node *node, CodeMarker *marker)
NodeList nonreentrant;
NodeList::ConstIterator c = innerNode->childNodes().begin();
while (c != innerNode->childNodes().end()) {
- switch ((*c)->threadSafeness()) {
- case Node::Reentrant:
- reentrant.append(*c);
- if (threadSafeness == Node::ThreadSafe)
- exceptions = true;
- break;
- case Node::ThreadSafe:
- threadsafe.append(*c);
- if (threadSafeness == Node::Reentrant)
+
+ if ((*c)->status() != Node::Obsolete){
+ switch ((*c)->threadSafeness()) {
+ case Node::Reentrant:
+ reentrant.append(*c);
+ if (threadSafeness == Node::ThreadSafe)
+ exceptions = true;
+ break;
+ case Node::ThreadSafe:
+ threadsafe.append(*c);
+ if (threadSafeness == Node::Reentrant)
+ exceptions = true;
+ break;
+ case Node::NonReentrant:
+ nonreentrant.append(*c);
exceptions = true;
- break;
- case Node::NonReentrant:
- nonreentrant.append(*c);
- exceptions = true;
- break;
- default:
- break;
+ break;
+ default:
+ break;
+ }
}
++c;
}
diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf
index 836c4bf..74b68df 100644
--- a/tools/qdoc3/test/assistant.qdocconf
+++ b/tools/qdoc3/test/assistant.qdocconf
@@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = Assistant
qhp.Assistant.file = assistant.qhp
-qhp.Assistant.namespace = com.trolltech.assistant.470
+qhp.Assistant.namespace = com.trolltech.assistant.471
qhp.Assistant.virtualFolder = qdoc
qhp.Assistant.indexTitle = Qt Assistant Manual
qhp.Assistant.extraFiles = images/bg_l.png \
@@ -50,7 +50,7 @@ qhp.Assistant.extraFiles = images/bg_l.png \
style/style_ie8.css \
style/style.css
-qhp.Assistant.filterAttributes = qt 4.7.0 tools assistant
+qhp.Assistant.filterAttributes = qt 4.7.1 tools assistant
qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual
qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant
qhp.Assistant.subprojects = manual examples
diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf
index 9136619..ab66792 100644
--- a/tools/qdoc3/test/designer.qdocconf
+++ b/tools/qdoc3/test/designer.qdocconf
@@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = Designer
qhp.Designer.file = designer.qhp
-qhp.Designer.namespace = com.trolltech.designer.470
+qhp.Designer.namespace = com.trolltech.designer.471
qhp.Designer.virtualFolder = qdoc
qhp.Designer.indexTitle = Qt Designer Manual
qhp.Designer.extraFiles = images/bg_l.png \
@@ -50,7 +50,7 @@ qhp.Designer.extraFiles = images/bg_l.png \
style/style_ie8.css \
style/style.css
-qhp.Designer.filterAttributes = qt 4.7.0 tools designer
+qhp.Designer.filterAttributes = qt 4.7.1 tools designer
qhp.Designer.customFilters.Designer.name = Qt Designer Manual
qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer
qhp.Designer.subprojects = manual examples
diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf
index 696802a..0d920e2 100644
--- a/tools/qdoc3/test/linguist.qdocconf
+++ b/tools/qdoc3/test/linguist.qdocconf
@@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = Linguist
qhp.Linguist.file = linguist.qhp
-qhp.Linguist.namespace = com.trolltech.linguist.470
+qhp.Linguist.namespace = com.trolltech.linguist.471
qhp.Linguist.virtualFolder = qdoc
qhp.Linguist.indexTitle = Qt Linguist Manual
qhp.Linguist.extraFiles = images/bg_l.png \
@@ -50,7 +50,7 @@ qhp.Linguist.extraFiles = images/bg_l.png \
style/style_ie8.css \
style/style.css
-qhp.Linguist.filterAttributes = qt 4.7.0 tools linguist
+qhp.Linguist.filterAttributes = qt 4.7.1 tools linguist
qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual
qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist
qhp.Linguist.subprojects = manual examples
diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf
index 45f48a6..9aaebcb 100644
--- a/tools/qdoc3/test/qdeclarative.qdocconf
+++ b/tools/qdoc3/test/qdeclarative.qdocconf
@@ -21,7 +21,7 @@ edition.DesktopLight.groups = -graphicsview-api
qhp.projects = Qml
qhp.Qml.file = qml.qhp
-qhp.Qml.namespace = com.trolltech.qml.470
+qhp.Qml.namespace = com.trolltech.qml.471
qhp.Qml.virtualFolder = qdoc
qhp.Qml.indexTitle = Qml Reference
@@ -61,9 +61,9 @@ qhp.Qml.extraFiles = images/bg_l.png \
style/style_ie8.css \
style/style.css
-qhp.Qml.filterAttributes = qt 4.7.0 qtrefdoc
-qhp.Qml.customFilters.Qt.name = Qt 4.7.0
-qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qml.filterAttributes = qt 4.7.1 qtrefdoc
+qhp.Qml.customFilters.Qt.name = Qt 4.7.1
+qhp.Qml.customFilters.Qt.filterAttributes = qt 4.7.1
qhp.Qml.subprojects = classes
qhp.Qml.subprojects.classes.title = Elements
qhp.Qml.subprojects.classes.indexTitle = Qml Elements
diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf
index 8125166..be2e9d3 100644
--- a/tools/qdoc3/test/qmake.qdocconf
+++ b/tools/qdoc3/test/qmake.qdocconf
@@ -13,7 +13,7 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = qmake
qhp.qmake.file = qmake.qhp
-qhp.qmake.namespace = com.trolltech.qmake.470
+qhp.qmake.namespace = com.trolltech.qmake.471
qhp.qmake.virtualFolder = qdoc
qhp.qmake.indexTitle = QMake Manual
qhp.qmake.extraFiles = images/bg_l.png \
@@ -50,7 +50,7 @@ qhp.qmake.extraFiles = images/bg_l.png \
style/style_ie8.css \
style/style.css
-qhp.qmake.filterAttributes = qt 4.7.0 tools qmake
+qhp.qmake.filterAttributes = qt 4.7.1 tools qmake
qhp.qmake.customFilters.qmake.name = qmake Manual
qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake
qhp.qmake.subprojects = manual
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index 639585c..dcabeb4 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -15,7 +15,7 @@ naturallanguage = en_US
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.indexTitle = Qt Reference Documentation
qhp.Qt.indexRoot =
@@ -59,9 +59,9 @@ qhp.Qt.extraFiles = index.html \
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
diff --git a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
index c24ddef..7e28fa2 100644
--- a/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_ja_JP.qdocconf
@@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.title = Qt
qhp.Qt.indexTitle = Qt
qhp.Qt.selectors = fake:example
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc ja_JP
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc ja_JP
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
index a983faa..cfcc76d 100644
--- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
@@ -17,15 +17,15 @@ indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.title = 教程
qhp.Qt.indexTitle = 教程
qhp.Qt.selectors = fake:example
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc zh_CN
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc zh_CN
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index b716f7c..47b1e5f 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -26,37 +26,6 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" </a></li>\n" \
" </ul>\n" \
" </div>\n" \
- " <ul class=\"sf-menu sf-js-enabled sf-shadow\" id=\"narrowmenu\"> \n" \
- " <li><a href=\"#\">API Lookup</a> \n" \
- " <ul id=\"topmenuLook\"> \n" \
- " <li><a href=\"classes.html\">Class index</a></li> \n" \
- " <li><a href=\"functions.html\">Function index</a></li> \n" \
- " <li><a href=\"modules.html\">Modules</a></li> \n" \
- " <li><a href=\"namespaces.html\">Namespaces</a></li> \n" \
- " <li><a href=\"qtglobal.html\">Global Declarations</a></li> \n" \
- " <li><a href=\"licensing.html\">Licenses and Credits</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " <li><a href=\"#\">Qt Topics</a> \n" \
- " <ul id=\"topmenuTopic\"> \n" \
- " <li><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \
- " <li><a href=\"qtquick.html\">Device UI's &amp; Qt Quick</a></li> \n" \
- " <li><a href=\"qt-gui-concepts.html\">UI Design with Qt</a></li> \n" \
- " <li><a href=\"developing-with-qt.html\">Cross-platform and Platform-specific</a></li> \n" \
- " <li><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \
- " <li><a href=\"technology-apis.html\">Qt and Key Technologies</a></li> \n" \
- " <li><a href=\"best-practices.html\">How-To's and Best Practices</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " <li><a href=\"#\">Examples</a> \n" \
- " <ul id=\"topmenuexample\"> \n" \
- " <li><a href=\"all-examples.html\">Examples</a></li> \n" \
- " <li><a href=\"tutorials.html\">Tutorials</a></li> \n" \
- " <li><a href=\"demos.html\">Demos</a></li> \n" \
- " <li><a href=\"qdeclarativeexamples.html\">QML Examples</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " </ul> \n" \
" </div>\n" \
" </div>\n" \
" <div class=\"wrapper\">\n" \
@@ -71,6 +40,13 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <form id=\"qtdocsearch\" action=\"\" onsubmit=\"return false;\">\n" \
" <fieldset>\n" \
" <input type=\"text\" name=\"searchstring\" id=\"pageType\" value=\"\" />\n" \
+ " <div id=\"resultdialog\"> \n" \
+ " <a href=\"#\" id=\"resultclose\">Close</a> \n" \
+ " <p id=\"resultlinks\" class=\"all\"><a href=\"#\" id=\"showallresults\">All</a> | <a href=\"#\" id=\"showapiresults\">API</a> | <a href=\"#\" id=\"showarticleresults\">Articles</a> | <a href=\"#\" id=\"showexampleresults\">Examples</a></p> \n" \
+ " <p id=\"searchcount\" class=\"all\"><span id=\"resultcount\"></span><span id=\"apicount\"></span><span id=\"articlecount\"></span><span id=\"examplecount\"></span>&nbsp;results:</p> \n" \
+ " <ul id=\"resultlist\" class=\"all\"> \n" \
+ " </ul> \n" \
+ " </div> \n" \
" </fieldset>\n" \
" </form>\n" \
" </div>\n" \
@@ -94,7 +70,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <div id=\"list002\" class=\"list\">\n" \
" <ul id=\"ul002\" >\n" \
" <li class=\"defaultLink\"><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \
- " <li class=\"defaultLink\"><a href=\"qtquick.html\">Device UI's &amp; Qt Quick</a></li> \n" \
+ " <li class=\"defaultLink\"><a href=\"qtquick.html\">Device UIs &amp; Qt Quick</a></li> \n" \
" <li class=\"defaultLink\"><a href=\"qt-gui-concepts.html\">UI Design with Qt</a></li> \n" \
" <li class=\"defaultLink\"><a href=\"developing-with-qt.html\">Cross-platform and Platform-specific</a></li> \n" \
" <li class=\"defaultLink\"><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \
@@ -135,7 +111,7 @@ HTML.postpostheader = " </ul>\n" \
" </ul>\n" \
" </div>\n" \
" </div>\n" \
- " <div class=\"content\">\n"
+ " <div class=\"content mainContent\">\n"
HTML.footer = "" \
" <div class=\"feedback t_button\">\n" \
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index 215e0d6..ea97205 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -17,7 +17,7 @@ naturallanguage = en_US
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.indexTitle = Qt Reference Documentation
qhp.Qt.indexRoot =
@@ -59,9 +59,9 @@ qhp.Qt.extraFiles = index.html \
style/style_ie8.css \
style/style.css
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
diff --git a/tools/qdoc3/test/qt_ja_JP.qdocconf b/tools/qdoc3/test/qt_ja_JP.qdocconf
index f9ce142..32bba06 100644
--- a/tools/qdoc3/test/qt_ja_JP.qdocconf
+++ b/tools/qdoc3/test/qt_ja_JP.qdocconf
@@ -19,15 +19,15 @@ indexes = $QTDIR/doc/html/qt.index
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.title = Qt
qhp.Qt.indexTitle = Qt
qhp.Qt.selectors = fake:example
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc ja_JP
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc ja_JP
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf
index 5bf8171..40d3d5a 100644
--- a/tools/qdoc3/test/qt_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt_zh_CN.qdocconf
@@ -19,15 +19,15 @@ indexes = $QTDIR/doc/html/qt.index
qhp.projects = Qt
qhp.Qt.file = qt.qhp
-qhp.Qt.namespace = com.trolltech.qt.470
+qhp.Qt.namespace = com.trolltech.qt.471
qhp.Qt.virtualFolder = qdoc
qhp.Qt.title = 教程
qhp.Qt.indexTitle = 教程
qhp.Qt.selectors = fake:example
-qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc zh_CN
-qhp.Qt.customFilters.Qt.name = Qt 4.7.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
+qhp.Qt.filterAttributes = qt 4.7.1 qtrefdoc zh_CN
+qhp.Qt.customFilters.Qt.name = Qt 4.7.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.1
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
diff --git a/tools/qml/browser/Browser.qml b/tools/qml/browser/Browser.qml
index ff2bb47..279c42f 100644
--- a/tools/qml/browser/Browser.qml
+++ b/tools/qml/browser/Browser.qml
@@ -44,7 +44,7 @@ import Qt.labs.folderlistmodel 1.0
Rectangle {
id: root
- property bool keyPressed: false
+ property bool showFocusHighlight: false
property variant folders: folders1
property variant view: view1
width: 320
@@ -95,6 +95,19 @@ Rectangle {
view.focus = true;
folders.folder = path;
}
+ function keyPressed(key) {
+ switch (key) {
+ case Qt.Key_Up:
+ case Qt.Key_Down:
+ case Qt.Key_Left:
+ case Qt.Key_Right:
+ root.showFocusHighlight = true;
+ break;
+ default:
+ // do nothing
+ break;
+ }
+ }
Component {
id: folderDelegate
@@ -113,6 +126,7 @@ Rectangle {
Rectangle {
id: highlight; visible: false
anchors.fill: parent
+ color: palette.highlight
gradient: Gradient {
GradientStop { id: t1; position: 0.0; color: palette.highlight }
GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
@@ -128,12 +142,16 @@ Rectangle {
text: fileName
anchors.leftMargin: 54
font.pixelSize: 32
- color: (wrapper.ListView.isCurrentItem && root.keyPressed) ? palette.highlightedText : palette.windowText
+ color: (wrapper.ListView.isCurrentItem && root.showFocusHighlight) ? palette.highlightedText : palette.windowText
elide: Text.ElideRight
}
MouseArea {
id: mouseRegion
anchors.fill: parent
+ onPressed: {
+ root.showFocusHighlight = false;
+ wrapper.ListView.view.currentIndex = index;
+ }
onClicked: { if (folders == wrapper.ListView.view.model) launch() }
}
states: [
@@ -155,7 +173,15 @@ Rectangle {
width: parent.width
model: folders1
delegate: folderDelegate
- highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view1.count != 0 }
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view1.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem.width
+ }
highlightMoveSpeed: 1000
pressDelay: 100
focus: true
@@ -186,7 +212,7 @@ Rectangle {
NumberAnimation { properties: "x"; duration: 250 }
}
]
- Keys.onPressed: { root.keyPressed = true; }
+ Keys.onPressed: root.keyPressed(event.key)
}
ListView {
@@ -197,7 +223,15 @@ Rectangle {
width: parent.width
model: folders2
delegate: folderDelegate
- highlight: Rectangle { color: palette.highlight; visible: root.keyPressed && view2.count != 0 }
+ highlight: Rectangle {
+ color: palette.highlight
+ visible: root.showFocusHighlight && view2.count != 0
+ gradient: Gradient {
+ GradientStop { id: t1; position: 0.0; color: palette.highlight }
+ GradientStop { id: t2; position: 1.0; color: Qt.lighter(palette.highlight) }
+ }
+ width: view1.currentItem.width
+ }
highlightMoveSpeed: 1000
pressDelay: 100
states: [
@@ -225,11 +259,11 @@ Rectangle {
NumberAnimation { properties: "x"; duration: 250 }
}
]
- Keys.onPressed: { root.keyPressed = true; }
+ Keys.onPressed: root.keyPressed(event.key)
}
Keys.onPressed: {
- root.keyPressed = true;
+ root.keyPressed(event.key);
if (event.key == Qt.Key_Return || event.key == Qt.Key_Select || event.key == Qt.Key_Right) {
view.currentItem.launch();
event.accepted = true;
diff --git a/translations/assistant_sl.ts b/translations/assistant_sl.ts
index 05429bd..cb3779c 100644
--- a/translations/assistant_sl.ts
+++ b/translations/assistant_sl.ts
@@ -115,6 +115,17 @@ Razlog:
</message>
</context>
<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>Nova mapa</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Brez naslova</translation>
+ </message>
+</context>
+<context>
<name>BookmarkManager</name>
<message>
<source>Untitled</source>
@@ -320,6 +331,64 @@ Razlog:
<context>
<name>CmdLineParser</name>
<message>
+ <source>Usage: assistant [Options]
+
+-collectionFile file Uses the specified collection
+ file instead of the default one
+-showUrl url Shows the document with the
+ url.
+-enableRemoteControl Enables Assistant to be
+ remotely controlled.
+-show widget Shows the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-activate widget Activates the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-hide widget Hides the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-register helpFile Registers the specified help file
+ (.qch) in the given collection
+ file.
+-unregister helpFile Unregisters the specified help file
+ (.qch) from the give collection
+ file.
+-setCurrentFilter filter Set the filter as the active filter.
+-remove-search-index Removes the full text search index.
+-rebuild-search-index Re-builds the full text search index (potentially slow).
+-quiet Does not display any error or
+ status message.
+-help Displays this help.
+</source>
+ <translation>Uporaba: assistant [možnosti]
+
+-collectionFile file Namesto privzete datoteke zbirke
+ uporabi navedeno
+-showUrl url Prikaže dokument z URL-jem
+-enableRemoteControl Omogoča oddaljeni nadzor
+-show podokno Prikaže navedeno podokno,
+ ki je lahko »contents«, »index«,
+ »bookmarks« ali »search«.
+-activate podokno Aktivira navedeno podokno,
+ ki je lahko »contents«, »index«,
+ »bookmarks« ali »search».
+-hide podokno Skrije navedeno podokno,
+ ki je lahko »contents«, »index«
+ »bookmarks« ali »search«.
+-register datoteka Registrira navedeno datoteko s pomočjo
+ (.qch) v dani datoteki zbirke.
+-unregister datoteka Odregistrira navedeno datoteko s pomočjo
+ (.qch) iz dane datoteke zbirke.
+-setCurrentFilter filter Nastavi filter kot aktiven.
+-remove-search-index Odstrani kazalo za iskanje po celotnem besedilu.
+-rebuild-search-index Znova zgradi kazalo za iskanje po celotnem besedilu (lahko počasno).
+-quiet Ne prikaže nobenega sporočila
+ napake ali stanja.
+-help Prikaže to pomoč.
+</translation>
+ </message>
+ <message>
<source>Unknown option: %1</source>
<translation>Neznana možnost: %1</translation>
</message>
@@ -380,6 +449,56 @@ Razlog:
</message>
</context>
<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>Čarovnik za pretvorbo pomoči</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>Pretvarjanje %1 ...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>Zapisovanje datoteke z zbirko pomoči ...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>Opravljeno.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>Datoteke:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>Odstrani vse</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>Nesklicevane datoteke</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>Odstrani datoteke, na katere se ne sklicuje niti ključna beseda niti vsebinsko kazalo.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; Be aware when removing images or stylesheets since those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;Opozorilo:&lt;/b&gt; Pazite pri odstranjevanju slik ali slogovnih predlog, saj se nanje datoteke *.adp ali *.dcf ne sklicujejo neposredno.&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
<name>FilterNameDialogClass</name>
<message>
<source>Add Filter Name</source>
@@ -391,6 +510,66 @@ Razlog:
</message>
</context>
<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>Filtrirne lastnosti za trenutno dokumentacijo (seznam, ločen z vejicami):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>Filtri po meri</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>Nastavitve filtra</translation>
+ </message>
+ <message>
+ <source>Specify the filter attributes for the documentation. If filter attributes are used, also define a custom filter for it. Both, the filter attributes and the custom filters are optional.</source>
+ <translation>Določite filtrirne lastnosti za dokumentacijo. Če so uporabljene filtrirne lastnosti, določite tudi filter po meri zanje. Filtrirne lastnosti in filtri po meri niso obvezni.</translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>Ime filtra</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>Filtrirne lastnosti</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>Filter po meri »%1« je določen večkrat.</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>Lastnosti za filer po meri »%1« so določene večkrat.</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>nefiltrirano</translation>
+ </message>
+</context>
+<context>
<name>FindWidget</name>
<message>
<source>Previous</source>
@@ -410,6 +589,17 @@ Razlog:
</message>
</context>
<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>Pretvarjanje datoteke</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>Ustvarjanje novih datotek s pomočjo za Qt iz starih datotek ADP.</translation>
+ </message>
+</context>
+<context>
<name>FontPanel</name>
<message>
<source>Font</source>
@@ -433,6 +623,52 @@ Razlog:
</message>
</context>
<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>Imenski prostor:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>Navidezna mapa:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>Splošne nastavitve</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>Določite imenski prostor in navidezno mapo za dokumentacijo.</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>Napaka imenskega prostora</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>Imenski prostor vsebuje neveljavne znake.</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>Napaka navidezne mape</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>Navidezna mapa vsebuje neveljavne znake.</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>Opozorilo: %1</translation>
+ </message>
+</context>
+<context>
<name>HelpViewer</name>
<message>
<source>&lt;title&gt;about:blank&lt;/title&gt;</source>
@@ -456,6 +692,40 @@ Razlog:
</message>
</context>
<context>
+ <name>HelpWindow</name>
+ <message>
+ <source>&lt;center&gt;&lt;b&gt;Wizard Assistant&lt;/b&gt;&lt;/center&gt;</source>
+ <translation>&lt;center&gt;&lt;b&gt;Čarovniški pomočnik&lt;/b&gt;&lt;/center&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>IdentifierPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Create identifiers</source>
+ <translation>Ustvari identifikatorje</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>Globalna predpona:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>Predpono prevzemi iz imen datotek</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>Identifikatorji</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>Ta stran vam omogoča, da iz ključnih besed v datoteki *.adp ali *.dcf ustvarite identifikatorje.</translation>
+ </message>
+</context>
+<context>
<name>IndexWindow</name>
<message>
<source>&amp;Look for:</source>
@@ -471,6 +741,53 @@ Razlog:
</message>
</context>
<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>Ime datoteke:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>Vhodna datoteka</translation>
+ </message>
+ <message>
+ <source>Specify the .adp or .dcf file you want to convert to the new Qt help project format and/or collection format.</source>
+ <translation>Določite datoteko *.adp ali *.dcf, ki jo želite pretvoriti v novo obliko projekta pomoči za Qt in/ali zbirke.</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>Odpri datoteko</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Datoteke s pomočjo za Qt (*.adp, *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>Napaka odpiranja datoteke</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>Navedene datoteke ni bilo moč odpreti.</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>Napaka razčlenjevanja datoteke</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>Napaka razčlenjevanja v vrstici %1.</translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
<source>Install Documentation</source>
@@ -770,6 +1087,10 @@ Razlog:
<translation>Povezane postavke vsebine ni bilo moč najti.</translation>
</message>
<message>
+ <source>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;Version %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</source>
+ <translation>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;Različica %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Avtorske pravice © 2010 Nokia Corporation in/ali njene podružnice.&lt;/p&gt;&lt;p&gt;Prevedel: &lt;a href=&quot;mailto:jlp@holodeck1.com&quot;&gt;Jure Repinc&lt;/a&gt;, &lt;a href=&quot;http://www.lugos.si/&quot;&gt;LUGOS&lt;/a&gt;&lt;/p&gt;</translation>
+ </message>
+ <message>
<source>About %1</source>
<translation>O %1</translation>
</message>
@@ -783,6 +1104,92 @@ Razlog:
</message>
</context>
<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>Ime projektne datoteke:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>Ime datoteke zbirke:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>Imena izhodnih datotek</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>Določite imena datotek za izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>Pretvori ...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Projektna datoteka pomoči za Qt</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Projektna datoteka zbirke pomoči za Qt</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>Navedena datoteka %1 že obstaja.
+
+Ali jo želite odstraniti?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Prekliči</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Obrazec</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>Datotečni filtri:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>Poti z izvornimi datotekami za dokumentacijo:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Odstrani</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>Poti izvornih datotek</translation>
+ </message>
+ <message>
+ <source>Specify the paths where the sources files are located. By default, all files in those directories matched by the file filter will be included.</source>
+ <translation>Določite poti do mest, kjer se nahajajo izvorne datoteke. Privzeto bodo vključene vse datoteke iz map, ki se ujemajo z datotečnim filtrom.</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>Pot izvorne datoteke</translation>
+ </message>
+</context>
+<context>
<name>PreferencesDialog</name>
<message>
<source>Add Documentation</source>
@@ -917,6 +1324,176 @@ Razlog:
</message>
</context>
<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>Neznan žeton v vrstici %1.</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>Neznan žeton v vrstici %1. Pričakocan »QtHelpCollectionProject«.</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>Manjkajoče končne značke.</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>Manjkajoča vhodna ali izhodna datoteka za ustvarjanje datoteke s pomočjo.</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Manjkajoče ime izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Collection Generator različice 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>Manjkajoča nastavitvena datoteka zbirke.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qcollectiongenerator &lt;collection-config-file&gt; [options]
+
+ -o &lt;collection-file&gt; Generates a collection file
+ called &lt;collection-file&gt;. If
+ this option is not specified
+ a default name will be used.
+ -v Displays the version of
+ qcollectiongenerator.
+
+</source>
+ <translation>
+Uporaba:
+
+qcollectiongenerator &lt;nastavitvena-datoteka&gt; [možnosti]
+
+ -o &lt;datoteka-zbirke&gt; Ustvari datoteko zbirke z
+ imenom &lt;datoteka-zbirke&gt;. če
+ ta možnost ni uporabljena,
+ se uporabi privzeto ime.
+ -v Prikaže različico za
+ qcollectiongenerator.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Ni bilo moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>Branje nastavitvene datoteke zbirke ...
+</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>Napaka nastavitvene datoteke zbirke: %1
+</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>Ustvarjanje pomoči za %1 ...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>Ustvarjanje datoteke zbirke ...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>Datoteke %1 ni moč nadomestiti.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>Ni moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>Ni moč odpreti sklicane slikovne datoteke %1.
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Manjkajoče ime izhodne datoteke.</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt Help Generator različice 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Manjkajoča projektna datoteka pomoči za Qt.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qhelpgenerator &lt;help-project-file&gt; [options]
+
+ -o &lt;compressed-file&gt; Generates a Qt compressed help
+ file called &lt;compressed-file&gt;.
+ If this option is not specified
+ a default name will be used.
+ -c Checks whether all links in HTML files
+ point to files in this help project.
+ -v Displays the version of
+ qhelpgenerator.
+
+</source>
+ <translation>
+Uporaba:
+
+qcollectiongenerator &lt;projektna-datoteka&gt; [možnosti]
+
+ -o &lt;stisnjena-datoteka&gt; Ustvari stisnjeno datoteko pomoči
+ za Qt, z imenom &lt;stisnjena-datoteka&gt;. če
+ ta možnost ni uporabljena,
+ se uporabi privzeto ime.
+ -c Preveri, ali vse povezave v datotekah HTML
+ kažejo na datoteke v tem projektu pomoči.
+ -v Prikaže različico za
+ qhelpgenerator
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Ni bilo moč odpreti %1.
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>Ni bilo moč ustvariti izhodne mape: %1
+</translation>
+ </message>
+</context>
+<context>
<name>RemoteControl</name>
<message>
<source>Debugging Remote Control</source>
@@ -939,7 +1516,7 @@ Razlog:
</message>
<message>
<source>Open Link in New Tab</source>
- <translation>Odpri povezavo v novem &amp;zavihku</translation>
+ <translation>Odpri povezavo v novem zavihku</translation>
</message>
<message>
<source>Select All</source>
diff --git a/translations/designer_sl.ts b/translations/designer_sl.ts
index d925f09..1b906f5 100644
--- a/translations/designer_sl.ts
+++ b/translations/designer_sl.ts
@@ -32,6 +32,49 @@
</message>
</context>
<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>Moč izbrati</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>Moč urejati</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>Omogočena vleka</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>Omogočeno spuščanje</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>Uporabnik lahko omogoči</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>Omogočeno</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>Tri stanja</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>Neomogočeno</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>Delno omogočeno</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>Omogočeno</translation>
+ </message>
+</context>
+<context>
<name>AddLinkDialog</name>
<message>
<source>Insert Link</source>
@@ -2546,6 +2589,10 @@ Empty class name passed to widget factory method
<context>
<name>QtLocalePropertyManager</name>
<message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;neveljavno&gt;</translation>
+ </message>
+ <message>
<source>%1, %2</source>
<translation>%1, %2</translation>
</message>
@@ -3658,7 +3705,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Page</source>
- <translation>Stran %1</translation>
+ <translation>Stran</translation>
</message>
<message>
<source>Page %1 of %2</source>
@@ -3843,7 +3890,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Delete String</source>
- <translation>Z&amp;briši niz</translation>
+ <translation>Zbriši niz</translation>
</message>
<message>
<source>&amp;Delete</source>
@@ -3962,7 +4009,7 @@ Ali želite nadomestiti predlogo?</translation>
</message>
<message>
<source>Key Resize</source>
- <translation type="unfinished"></translation>
+ <translation>Sprememba velikosti s tipko</translation>
</message>
<message>
<source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source>
@@ -4632,7 +4679,7 @@ Please select another name.</source>
<name>qdesigner_internal::ObjectInspector</name>
<message>
<source>Change Current Page</source>
- <translation type="unfinished">Spreminjanje trenutne strani</translation>
+ <translation>Spremeni trenutno stran</translation>
</message>
<message>
<source>&amp;Find in Text...</source>
@@ -4780,6 +4827,14 @@ Please select another name.</source>
<translation>Preveri razpoložljivost na novo nameščenih vstavkov za gradnike po meri.</translation>
</message>
<message>
+ <source>Loaded Plugins</source>
+ <translation>Naloženi vstavki</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>Neuspeli vstavki</translation>
+ </message>
+ <message>
<source>Qt Designer couldn&apos;t find any plugins</source>
<translation>Qt Designer ni našel nobenega vstavka</translation>
</message>
@@ -4815,7 +4870,7 @@ Please select another name.</source>
</message>
<message>
<source>Load Custom Device Skin</source>
- <translation type="unfinished">Naloži temo za napravo po meri</translation>
+ <translation>Naloži temo za napravo po meri</translation>
</message>
<message>
<source>All QVFB Skins (*.%1)</source>
@@ -5826,49 +5881,4 @@ To nakazuje na neskladnost v datoteki *.ui.</translation>
<translation>&amp;Povečava</translation>
</message>
</context>
-<context>
- <name></name>
- <message>
- <source>&lt;Filter&gt;</source>
- <comment>qdesigner_internal::FilterWidget|</comment>
- <translation type="obsolete">&lt;filter&gt;</translation>
- </message>
- <message>
- <source>Change Current Page</source>
- <comment>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate|</comment>
- <translation type="obsolete">Spreminjanje trenutne strani</translation>
- </message>
- <message>
- <source>Load Custom Device Skin</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Naloži temo za napravo po meri</translation>
- </message>
- <message>
- <source>All QVFB Skins (*.%1)</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Vse teme za QVFB (*.%1)</translation>
- </message>
- <message>
- <source>%1 - Duplicate Skin</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 - podvojena tema</translation>
- </message>
- <message>
- <source>The skin &apos;%1&apos; already exists.</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">Tema »%1« že obstaja.</translation>
- </message>
- <message>
- <source>%1 - Error</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 - napaka</translation>
- </message>
- <message>
- <source>%1 is not a valid skin directory:
-%2</source>
- <comment>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate|</comment>
- <translation type="obsolete">%1 ni veljavna mapa s temo:
-%2</translation>
- </message>
-</context>
</TS>
diff --git a/translations/linguist_sl.ts b/translations/linguist_sl.ts
index 0b5b084..f749513 100644
--- a/translations/linguist_sl.ts
+++ b/translations/linguist_sl.ts
@@ -233,6 +233,11 @@ Privzeta bo edninska univerzalna oblika.</translation>
<source>Cancel</source>
<translation>Prekliči</translation>
</message>
+ <message>
+ <source></source>
+ <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
+ <translation></translation>
+ </message>
</context>
<context>
<name>FormMultiWidget</name>
@@ -264,6 +269,99 @@ Privzeta bo edninska univerzalna oblika.</translation>
</message>
</context>
<context>
+ <name>LConvert</name>
+ <message>
+ <source>
+Usage:
+ lconvert [options] &lt;infile&gt; [&lt;infile&gt;...]
+
+lconvert is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert and filter translation data files.
+The following file formats are supported:
+
+%1
+If multiple input files are specified, they are merged with
+translations from later files taking precedence.
+
+Options:
+ -h
+ --help Display this information and exit.
+
+ -i &lt;infile&gt;
+ --input-file &lt;infile&gt;
+ Specify input file. Use if &lt;infile&gt; might start with a dash.
+ This option can be used several times to merge inputs.
+ May be &apos;-&apos; (standard input) for use in a pipe.
+
+ -o &lt;outfile&gt;
+ --output-file &lt;outfile&gt;
+ Specify output file. Default is &apos;-&apos; (standard output).
+
+ -if &lt;informat&gt;
+ --input-format &lt;format&gt;
+ Specify input format for subsequent &lt;infile&gt;s.
+ The format is auto-detected from the file name and defaults to &apos;ts&apos;.
+
+ -of &lt;outformat&gt;
+ --output-format &lt;outformat&gt;
+ Specify output format. See -if.
+
+ --input-codec &lt;codec&gt;
+ Specify encoding for QM and PO input files. Default is &apos;Latin1&apos;
+ for QM and &apos;UTF-8&apos; for PO files. UTF-8 is always tried as well for
+ QM, corresponding to the possible use of the trUtf8() function.
+
+ --output-codec &lt;codec&gt;
+ Specify encoding for PO output files. Default is &apos;UTF-8&apos;.
+
+ --drop-tags &lt;regexp&gt;
+ Drop named extra tags when writing TS or XLIFF files.
+ May be specified repeatedly.
+
+ --drop-translations
+ Drop existing translations and reset the status to &apos;unfinished&apos;.
+ Note: this implies --no-obsolete.
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the source strings. Defaults to
+ POSIX if not specified and the file does not name it yet.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the translation.
+ The target language is guessed from the file name if this option
+ is not specified and the file contents name no language yet.
+
+ --no-obsolete
+ Drop obsolete messages.
+
+ --no-finished
+ Drop finished messages.
+
+ --sort-contexts
+ Sort contexts in output TS file alphabetically.
+
+ --locations {absolute|relative|none}
+ Override how source code references are saved in TS files.
+ Default is absolute.
+
+ --no-ui-lines
+ Drop line numbers from references to UI files.
+
+ --verbose
+ be a bit more verbose
+
+Long options can be specified with only one leading dash, too.
+
+Return value:
+ 0 on success
+ 1 on command line parse failures
+ 2 on read failures
+ 3 on write failures
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>LRelease</name>
<message numerus="yes">
<source>Dropped %n message(s) which had no ID.</source>
@@ -301,6 +399,590 @@ Privzeta bo edninska univerzalna oblika.</translation>
<numerusform> Prezrl %n neprevedenih izvornih besedil</numerusform>
</translation>
</message>
+ <message>
+ <source>Usage:
+ lrelease [options] project-file
+ lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the &apos;compiled&apos; QM format used by QTranslator objects.
+
+Options:
+ -help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
+ -compress
+ Compress the QM files
+ -nounfinished
+ Do not include unfinished translations
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated &lt;prefix&gt;
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease and exit
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Usage:
+ lupdate [options] [project-file]...
+ lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate is part of Qt&apos;s Linguist tool chain. It extracts translatable
+messages from Qt UI files, C++, Java and JavaScript/QtScript source code.
+Extracted messages are stored in textual translation source files (typically
+Qt TS XML). New and modified messages can be merged into existing TS files.
+
+Options:
+ -help Display this information and exit.
+ -no-obsolete
+ Drop all obsolete strings.
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ Process files with the given extensions only.
+ The extension list must be separated with commas, not with whitespace.
+ Default: &apos;%1&apos;.
+ -pluralonly
+ Only include plural form messages.
+ -silent
+ Do not explain what is being done.
+ -no-sort
+ Do not sort contexts in TS files.
+ -no-recursive
+ Do not recursively scan the following directories.
+ -recursive
+ Recursively scan the following directories (default).
+ -I &lt;includepath&gt; or -I&lt;includepath&gt;
+ Additional location to look for include files.
+ May be specified multiple times.
+ -locations {absolute|relative|none}
+ Specify/override how source code references are saved in TS files.
+ Default is absolute.
+ -no-ui-lines
+ Do not record line numbers in references to UI files.
+ -disable-heuristic {sametext|similartext|number}
+ Disable the named merge heuristic. Can be specified multiple times.
+ -pro &lt;filename&gt;
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the translations for new files.
+ Guessed from the file name if not specified.
+ -ts &lt;ts-file&gt;...
+ Specify the output file(s). This will override the TRANSLATIONS
+ and nullify the CODECFORTR from possibly specified project files.
+ -codecfortr &lt;codec&gt;
+ Specify the codec assumed for tr() calls. Effective only with -ts.
+ -version
+ Display the version of lupdate and exit.
+ @lst-file
+ Read additional file names (one per line) from lst-file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for tr() &apos;%1&apos; disagrees with existing file&apos;s codec &apos;%2&apos;. Expect trouble.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified target language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified source language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation type="unfinished">
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -845,6 +1527,11 @@ Privzeta bo edninska univerzalna oblika.</translation>
<translation>Dolžinske inačice</translation>
</message>
<message>
+ <source></source>
+ <comment>This is the application&apos;s main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>Source text</source>
<translation>Izvorno besedilo</translation>
</message>
@@ -1192,6 +1879,11 @@ Vse datoteke (*)</translation>
<context>
<name>MessageEditor</name>
<message>
+ <source></source>
+ <comment>This is the right panel of the main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>Russian</source>
<translation>Ruščina</translation>
</message>
@@ -1290,6 +1982,13 @@ Vrstica: %2</translation>
</message>
</context>
<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>PhraseBookBox</name>
<message>
<source>Edit Phrase Book</source>
@@ -1360,6 +2059,11 @@ Vrstica: %2</translation>
<translation>Zapri</translation>
</message>
<message>
+ <source></source>
+ <comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
+ <translation></translation>
+ </message>
+ <message>
<source>(New Entry)</source>
<translation>(Nov vnos)</translation>
</message>
@@ -1456,6 +2160,11 @@ Vrstica: %2</translation>
<source>XLIFF localization files</source>
<translation>Prevajalske datoteke XLIFF</translation>
</message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SourceCodeView</name>
diff --git a/translations/qt_gl.ts b/translations/qt_gl.ts
new file mode 100644
index 0000000..6f41ddf
--- /dev/null
+++ b/translations/qt_gl.ts
@@ -0,0 +1,9828 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="gl_ES" sourcelanguage="en">
+<context>
+ <name>CloseButton</name>
+ <message>
+ <source>Close Tab</source>
+ <translation>Pechar a lingüeta</translation>
+ </message>
+</context>
+<context>
+ <name>FakeReply</name>
+ <message>
+ <source>Fake error !</source>
+ <translation>Erro falso!</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non válido</translation>
+ </message>
+</context>
+<context>
+ <name>MAC_APPLICATION_MENU</name>
+ <message>
+ <source>Services</source>
+ <translation>Servizos</translation>
+ </message>
+ <message>
+ <source>Hide %1</source>
+ <translation>Acochar %1</translation>
+ </message>
+ <message>
+ <source>Hide Others</source>
+ <translation>Acochar os outros</translation>
+ </message>
+ <message>
+ <source>Show All</source>
+ <translation>Mostrar todos</translation>
+ </message>
+ <message>
+ <source>Preferences...</source>
+ <translation>Preferencias...</translation>
+ </message>
+ <message>
+ <source>Quit %1</source>
+ <translation>Saír de %1</translation>
+ </message>
+ <message>
+ <source>About %1</source>
+ <translation>Acerca de %1</translation>
+ </message>
+</context>
+<context>
+ <name>QApplication</name>
+ <message>
+ <source>QT_LAYOUT_DIRECTION</source>
+ <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
+ <translation>LTR</translation>
+ </message>
+ <message>
+ <source>Activate</source>
+ <translation>Activar</translation>
+ </message>
+ <message>
+ <source>Activates the program&apos;s main window</source>
+ <translation>Activa a fiestra principal do programa</translation>
+ </message>
+ <message>
+ <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+ <translation>O executábel «%1» require de Qt %2, e achouse Qt %3.</translation>
+ </message>
+ <message>
+ <source>Incompatible Qt Library Error</source>
+ <translation>Erro de bibliotecas Qt incompatíbeis</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::</name>
+ <message>
+ <source>Notifications</source>
+ <translation>Notificacións</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Música</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>Vídeo</translation>
+ </message>
+ <message>
+ <source>Communication</source>
+ <translation>Comunicación</translation>
+ </message>
+ <message>
+ <source>Games</source>
+ <translation>Xogos</translation>
+ </message>
+ <message>
+ <source>Accessibility</source>
+ <translation>Accesibilidade</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::AudioOutput</name>
+ <message>
+ <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;O dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt; non funciona.&lt;br/&gt;No seu
+lugar usarase o &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;Mudando para o dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;que
+acaba de pórse dispoñíbel e ten maior preferencia.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Revert back to device &apos;%1&apos;</source>
+ <translation>Estase a voltar para o dispositivo «%1»</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which has higher preference or is specifically configured for this stream.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;Mudando para o dispositivo de reprodución de son &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;que ten
+máis preferencia ou está configurado especificamente para este fluxo.&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::Backend</name>
+ <message>
+ <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
+ Some video features have been disabled.</source>
+ <translation>Aviso: Non semella ter instalado o paquete gstreamer0.10-plugins-good.
+ Desactiváronse algunhas funcionalidades de vídeo.</translation>
+ </message>
+ <message>
+ <source>Warning: You do not seem to have the base GStreamer plugins installed.
+ All audio and video support has been disabled</source>
+ <translation>Aviso: Non semella ter instaladas as extensións básicas de GStreamer.
+ Desactivouse todo o soporte de son e vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::MediaObject</name>
+ <message>
+ <source>Cannot start playback.
+
+Check your GStreamer installation and make sure you
+have libgstreamer-plugins-base installed.</source>
+ <translation>Non é posíbel reproducir.
+
+Comprobe a instalación de GStreamer e verifique que ten instalado libgstreamer-plugins-base.</translation>
+ </message>
+ <message>
+ <source>Missing codec helper script assistant.</source>
+ <translation>Falta o asistente do script auxiliar do códec.</translation>
+ </message>
+ <message>
+ <source>Plugin codec installation failed for codec: %0</source>
+ <translation>Fallou a instalación da extensión dun códec: %0</translation>
+ </message>
+ <message>
+ <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
+ <translation>Falta un códec requirido, polo que deberá instalar os seguintes códecs para
+reproducir este contido: %0</translation>
+ </message>
+ <message>
+ <source>Could not open media source.</source>
+ <translation>Non foi posíbel abrir a orixe dos medios.</translation>
+ </message>
+ <message>
+ <source>Invalid source type.</source>
+ <translation>Tipo de orixe non válido.</translation>
+ </message>
+ <message>
+ <source>Could not locate media source.</source>
+ <translation>Non foi posíbel localizar a orixe do medio.</translation>
+ </message>
+ <message>
+ <source>Could not open audio device. The device is already in use.</source>
+ <translation>Non foi posíbel abrir o dispositivo de audio. O dispositivo xa está en uso.</translation>
+ </message>
+ <message>
+ <source>Could not decode media source.</source>
+ <translation>Non foi posíbel descodificar a fonte do medio.</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF</name>
+ <message>
+ <source>Audio Output</source>
+ <translation>Saída de son</translation>
+ </message>
+ <message>
+ <source>The audio output device</source>
+ <translation>O dispositivo de saída do son</translation>
+ </message>
+ <message>
+ <source>No error</source>
+ <translation>Sen erros</translation>
+ </message>
+ <message>
+ <source>Not found</source>
+ <translation>Non atopado</translation>
+ </message>
+ <message>
+ <source>Out of memory</source>
+ <translation>Esgotouse a memoria</translation>
+ </message>
+ <message>
+ <source>Not supported</source>
+ <translation>Non soportado</translation>
+ </message>
+ <message>
+ <source>Overflow</source>
+ <translation>Desbordamento</translation>
+ </message>
+ <message>
+ <source>Underflow</source>
+ <translation>Esgotamento</translation>
+ </message>
+ <message>
+ <source>Already exists</source>
+ <translation>Xa existe</translation>
+ </message>
+ <message>
+ <source>Path not found</source>
+ <translation>Non se atopou a rota</translation>
+ </message>
+ <message>
+ <source>In use</source>
+ <translation>En uso</translation>
+ </message>
+ <message>
+ <source>Not ready</source>
+ <translation>Non preparado</translation>
+ </message>
+ <message>
+ <source>Access denied</source>
+ <translation>Acceso denegado</translation>
+ </message>
+ <message>
+ <source>Could not connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Disconnected</source>
+ <translation>Desconectado</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Insufficient bandwidth</source>
+ <translation>Largo de banda insuficiente</translation>
+ </message>
+ <message>
+ <source>Network unavailable</source>
+ <translation>Rede non dispoñíbel</translation>
+ </message>
+ <message>
+ <source>Network communication error</source>
+ <translation>Erro de comunicación pola reda</translation>
+ </message>
+ <message>
+ <source>Streaming not supported</source>
+ <translation>Non está soportada a retransmisión</translation>
+ </message>
+ <message>
+ <source>Server alert</source>
+ <translation>Alerta do servidor</translation>
+ </message>
+ <message>
+ <source>Invalid protocol</source>
+ <translation>Protocolo non válido</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>URL non válido</translation>
+ </message>
+ <message>
+ <source>Multicast error</source>
+ <translation>Erro de multicast</translation>
+ </message>
+ <message>
+ <source>Proxy server error</source>
+ <translation>Erro do servidor proxy</translation>
+ </message>
+ <message>
+ <source>Proxy server not supported</source>
+ <translation>O servidor proxy non está soportado</translation>
+ </message>
+ <message>
+ <source>Audio output error</source>
+ <translation>Erro da saída de son</translation>
+ </message>
+ <message>
+ <source>Video output error</source>
+ <translation>Erro da saída de vídeo</translation>
+ </message>
+ <message>
+ <source>Decoder error</source>
+ <translation>Erro do descodificador</translation>
+ </message>
+ <message>
+ <source>Audio or video components could not be played</source>
+ <translation>Non foi posíbel reproducir as compoñentes de son nin de video</translation>
+ </message>
+ <message>
+ <source>DRM error</source>
+ <translation>Erro da DRM</translation>
+ </message>
+ <message>
+ <source>Unknown error (%1)</source>
+ <translation>Erro descoñecido (%1)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractMediaPlayer</name>
+ <message>
+ <source>Not ready to play</source>
+ <translation>Non está preparado para reproducir</translation>
+ </message>
+ <message>
+ <source>Error opening file</source>
+ <translation>Aconteceu un erro ao abrir o ficheiro</translation>
+ </message>
+ <message>
+ <source>Error opening URL</source>
+ <translation>Aconteceu un erro ao abrir o URL</translation>
+ </message>
+ <message>
+ <source>Error opening resource</source>
+ <translation>Aconteceu un erro ao abrir o recurso</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not opened</source>
+ <translation>Erro ao abrir o recurso: non se abriu o recurso</translation>
+ </message>
+ <message>
+ <source>Setting volume failed</source>
+ <translation>Fallou a configuración do volume</translation>
+ </message>
+ <message>
+ <source>Loading clip failed</source>
+ <translation>Fallou a carga do clip</translation>
+ </message>
+ <message>
+ <source>Playback complete</source>
+ <translation>Completouse a reprodución</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractVideoPlayer</name>
+ <message>
+ <source>Pause failed</source>
+ <translation>Fallou o pór en pausa</translation>
+ </message>
+ <message>
+ <source>Seek failed</source>
+ <translation>Fallou o salto</translation>
+ </message>
+ <message>
+ <source>Getting position failed</source>
+ <translation>Fallou a obtención da posición</translation>
+ </message>
+ <message>
+ <source>Opening clip failed</source>
+ <translation>Fallou a abertura do clip</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioEqualizer</name>
+ <message>
+ <source>%1 Hz</source>
+ <translation>%1 Hz</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioPlayer</name>
+ <message>
+ <source>Getting position failed</source>
+ <translation>Fallou a obtención da posición</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::DsaVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>Erro na visualización do vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EffectFactory</name>
+ <message>
+ <source>Enabled</source>
+ <translation>Activado</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EnvironmentalReverb</name>
+ <message>
+ <source>Decay HF ratio (%)</source>
+ <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
+ <translation>Taxa de decaemento de HF (%)</translation>
+ </message>
+ <message>
+ <source>Decay time (ms)</source>
+ <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
+ <translation>Período de decaemento (ms)</translation>
+ </message>
+ <message>
+ <source>Density (%)</source>
+ <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment>
+ <translation>Densidade (%)</translation>
+ </message>
+ <message>
+ <source>Diffusion (%)</source>
+ <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment>
+ <translation>Difusión (%)</translation>
+ </message>
+ <message>
+ <source>Reflections delay (ms)</source>
+ <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment>
+ <translation>Retardo dos reflexos (ms)</translation>
+ </message>
+ <message>
+ <source>Reflections level (mB)</source>
+ <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment>
+ <translation>Nivel dos reflexos (mB)</translation>
+ </message>
+ <message>
+ <source>Reverb delay (ms)</source>
+ <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment>
+ <translation>Retardo da reverberación (ms)</translation>
+ </message>
+ <message>
+ <source>Reverb level (mB)</source>
+ <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment>
+ <translation>Nivel da reverberación (mB)</translation>
+ </message>
+ <message>
+ <source>Room HF level</source>
+ <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment>
+ <translation>Nivel de HF da sala</translation>
+ </message>
+ <message>
+ <source>Room level (mB)</source>
+ <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+ <translation>Nivel da sala (mB)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::MediaObject</name>
+ <message>
+ <source>Error opening source: type not supported</source>
+ <translation>Erro ao abrir a fonte: tipo non soportado</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource is compressed</source>
+ <translation>Erro ao abrir a fonte: o recurso está comprimido</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not valid</source>
+ <translation>Erro ao abrir a fonte: o recurso non é válido</translation>
+ </message>
+ <message>
+ <source>Error opening source: media type could not be determined</source>
+ <translation>Erro ao abrir a fonte: non foi posíbel determinar o tipo de medio</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::StereoWidening</name>
+ <message>
+ <source>Level (%)</source>
+ <translation>Nivel (%)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::SurfaceVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>Erro na visualización do vídeo</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::VolumeSlider</name>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>Volume: %1%</translation>
+ </message>
+ <message>
+ <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
+ <translation>Use esta barra deslizante para axustar o volume. A posición da esquerda é o
+0%, a da dereita o %1%</translation>
+ </message>
+ <message>
+ <source>Muted</source>
+ <translation>Silenciado</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Accel</name>
+ <message>
+ <source>%1, %2 not defined</source>
+ <translation>%1, %2 non definido</translation>
+ </message>
+ <message>
+ <source>Ambiguous %1 not handled</source>
+ <translation>Non se xestionou o %1 ambiguo</translation>
+ </message>
+</context>
+<context>
+ <name>Q3DataTable</name>
+ <message>
+ <source>True</source>
+ <translation>Verdadeiro</translation>
+ </message>
+ <message>
+ <source>False</source>
+ <translation>Falso</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Actualizar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3FileDialog</name>
+ <message>
+ <source>Copy or Move a File</source>
+ <translation>Copiar ou mover un ficheiro</translation>
+ </message>
+ <message>
+ <source>Read: %1</source>
+ <translation>Ler: %1</translation>
+ </message>
+ <message>
+ <source>Write: %1</source>
+ <translation>Escribir: %1</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>Todos os ficheiros (*)</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date</source>
+ <translation>Data</translation>
+ </message>
+ <message>
+ <source>Attributes</source>
+ <translation>Atributos</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+ <message>
+ <source>Look &amp;in:</source>
+ <translation>P&amp;rocurar en:</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>&amp;Nome do ficheiro:</translation>
+ </message>
+ <message>
+ <source>File &amp;type:</source>
+ <translation>&amp;Tipo de ficheiro:</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>One directory up</source>
+ <translation>Subir un directorio</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>Crear un cartafol novo</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>Vista en lista</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>Vista de detalles</translation>
+ </message>
+ <message>
+ <source>Preview File Info</source>
+ <translation>Información da vista previa do ficheiro</translation>
+ </message>
+ <message>
+ <source>Preview File Contents</source>
+ <translation>Contido da previsualización do ficheiro</translation>
+ </message>
+ <message>
+ <source>Read-write</source>
+ <translation>Lectura e escrita</translation>
+ </message>
+ <message>
+ <source>Read-only</source>
+ <translation>Só lectura</translation>
+ </message>
+ <message>
+ <source>Write-only</source>
+ <translation>Só escrita</translation>
+ </message>
+ <message>
+ <source>Inaccessible</source>
+ <translation>Inaccesíbel</translation>
+ </message>
+ <message>
+ <source>Symlink to File</source>
+ <translation>Ligazón simbólica a un ficheiro</translation>
+ </message>
+ <message>
+ <source>Symlink to Directory</source>
+ <translation>Ligazón simbólica a un directorio</translation>
+ </message>
+ <message>
+ <source>Symlink to Special</source>
+ <translation>Ligazón simbólica a un ficheiro especial</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>Ficheiro</translation>
+ </message>
+ <message>
+ <source>Dir</source>
+ <translation>Dir</translation>
+ </message>
+ <message>
+ <source>Special</source>
+ <translation>Especial</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>Gardar como</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>&amp;Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>&amp;Mudar o nome</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>&amp;Borrar</translation>
+ </message>
+ <message>
+ <source>R&amp;eload</source>
+ <translation>&amp;Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Name</source>
+ <translation>Ordenar segundo o &amp;nome</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Size</source>
+ <translation>Ordenar segundo o &amp;tamaño</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Date</source>
+ <translation>Ordenar segundo a &amp;data</translation>
+ </message>
+ <message>
+ <source>&amp;Unsorted</source>
+ <translation>&amp;Sen ordenar</translation>
+ </message>
+ <message>
+ <source>Sort</source>
+ <translation>Ordenar</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>Mostrar os ficheiros &amp;acochados</translation>
+ </message>
+ <message>
+ <source>the file</source>
+ <translation>o ficheiro</translation>
+ </message>
+ <message>
+ <source>the directory</source>
+ <translation>o cartafol</translation>
+ </message>
+ <message>
+ <source>the symlink</source>
+ <translation>a ligazón simbólica</translation>
+ </message>
+ <message>
+ <source>Delete %1</source>
+ <translation>Borrar %1</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;Desexa realmente borrar %1 «%2»?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>&amp;Si</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>&amp;Non</translation>
+ </message>
+ <message>
+ <source>New Folder 1</source>
+ <translation>Novo cartafol 1</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Novo cartafol</translation>
+ </message>
+ <message>
+ <source>New Folder %1</source>
+ <translation>Novo cartafol %1</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>Procurar un cartafol</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>Cartafoles</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>Cartafol:</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>Erro</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Check path and filename.</source>
+ <translation>%1
+Non se atopou o ficheiro.
+Verifique a rota e o nome do ficheiro.</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>Todos os ficheiros (*.*)</translation>
+ </message>
+ <message>
+ <source>Open </source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Select a Directory</source>
+ <translation>Escolla un cartafol</translation>
+ </message>
+</context>
+<context>
+ <name>Q3LocalFs</name>
+ <message>
+ <source>Could not read directory
+%1</source>
+ <translation>Non foi posíbel ler o cartafol
+%1</translation>
+ </message>
+ <message>
+ <source>Could not create directory
+%1</source>
+ <translation>Non foi posíbel crear o cartafol %1</translation>
+ </message>
+ <message>
+ <source>Could not remove file or directory
+%1</source>
+ <translation>Non foi posíbel eliminar o ficheiro ou cartafol
+%1</translation>
+ </message>
+ <message>
+ <source>Could not rename
+%1
+to
+%2</source>
+ <translation>Non foi posíbel mudar o nome de
+%1
+para
+%2</translation>
+ </message>
+ <message>
+ <source>Could not open
+%1</source>
+ <translation>Non foi posíbel abrir
+%1</translation>
+ </message>
+ <message>
+ <source>Could not write
+%1</source>
+ <translation>Non foi posíbel escribir
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>Q3MainWindow</name>
+ <message>
+ <source>Line up</source>
+ <translation>Aliñar en riba</translation>
+ </message>
+ <message>
+ <source>Customize...</source>
+ <translation>Personalizar...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3NetworkProtocol</name>
+ <message>
+ <source>Operation stopped by the user</source>
+ <translation>Operación interrompida polo usuario</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TabDialog</name>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>Aplicar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Defaults</source>
+ <translation>Predeterminado</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TextEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TitleBar</name>
+ <message>
+ <source>System</source>
+ <translation>Sistema</translation>
+ </message>
+ <message>
+ <source>Restore up</source>
+ <translation>Restaurar</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Restore down</source>
+ <translation>Restaurar en pequeno</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>Maximizar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Contains commands to manipulate the window</source>
+ <translation>Contén ordes para manipular a fiestra</translation>
+ </message>
+ <message>
+ <source>Puts a minimized window back to normal</source>
+ <translation>Volta unha fiestra minimizada ao tamaño normal</translation>
+ </message>
+ <message>
+ <source>Moves the window out of the way</source>
+ <translation>Vota a un lado a fiestra</translation>
+ </message>
+ <message>
+ <source>Puts a maximized window back to normal</source>
+ <translation>Volta unha fiestra maximizada ao tamaño normal</translation>
+ </message>
+ <message>
+ <source>Makes the window full screen</source>
+ <translation>Pon a fiestra a pantalla completa</translation>
+ </message>
+ <message>
+ <source>Closes the window</source>
+ <translation>Pecha a fiestra</translation>
+ </message>
+ <message>
+ <source>Displays the name of the window and contains controls to manipulate it</source>
+ <translation>Mostra o nome da fiestra e contén controles para manipulala</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ToolBar</name>
+ <message>
+ <source>More...</source>
+ <translation>Máis...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3UrlOperator</name>
+ <message>
+ <source>The protocol `%1&apos; is not supported</source>
+ <translation>O protocolo «%1» non está soportado.</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support listing directories</source>
+ <translation>O protocolo «%1» non soporta sacar listaxes de cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support creating new directories</source>
+ <translation>O protocolo «%1» non soporta crear cartafoles novos</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support removing files or directories</source>
+ <translation>O protocolo «%1» non soporta eliminar nin ficheiros nin cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support renaming files or directories</source>
+ <translation>O protocolo «%1» non soporta mudar o nome dos ficheiros nin dos cartafoles</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support getting files</source>
+ <translation>O protocolo «%1» non soporta obter ficheiros</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support putting files</source>
+ <translation>O protocolo «%1» non soporta enviar ficheiros</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
+ <translation>O protocolo «%1» non soporta copiar nin mover nin ficheiros nin cartafoles</translation>
+ </message>
+ <message>
+ <source>(unknown)</source>
+ <translation>(descoñecido)</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Wizard</name>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; &amp;Anterior</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>&amp;Seguinte &gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>&amp;Finalizar</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Axuda</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSocket</name>
+ <message>
+ <source>Socket operation timed out</source>
+ <translation>A operación do socket esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>A operación no socket non está soportada</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>Non se atopou o servidor</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>A conexión foi rexeitada</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>A conexión esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Socket is not connected</source>
+ <translation>O socket non está conectado</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>Non foi posíbel acadar a rede</translation>
+ </message>
+</context>
+<context>
+ <name>QHttp</name>
+ <message>
+ <source>Connection refused</source>
+ <translation>Rexeitouse a conexión</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>Pechouse a conexión</translation>
+ </message>
+ <message>
+ <source>Proxy requires authentication</source>
+ <translation>O proxy require autenticación</translation>
+ </message>
+ <message>
+ <source>Host requires authentication</source>
+ <translation>O servidor require autenticación</translation>
+ </message>
+ <message>
+ <source>Data corrupted</source>
+ <translation>Datos corrompidos</translation>
+ </message>
+ <message>
+ <source>Unknown protocol specified</source>
+ <translation>Especificouse un protocolo descoñecido</translation>
+ </message>
+ <message>
+ <source>SSL handshake failed</source>
+ <translation>Fallou a negociación de SSL</translation>
+ </message>
+ <message>
+ <source>HTTPS connection requested but SSL support not compiled in</source>
+ <translation>Pediuse unha conexión HTTPS pero non se compilou con soporte de SSL</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Request aborted</source>
+ <translation>Pedido abortado</translation>
+ </message>
+ <message>
+ <source>No server set to connect to</source>
+ <translation>Non se indicou ningún servidor co que conectar</translation>
+ </message>
+ <message>
+ <source>Wrong content length</source>
+ <translation>Longitude do contido incorrecta</translation>
+ </message>
+ <message>
+ <source>Server closed connection unexpectedly</source>
+ <translation>O servidor pechou a conexión inesperadamente</translation>
+ </message>
+ <message>
+ <source>Connection refused (or timed out)</source>
+ <translation>Rexeitouse a conexión (ou esgouto o tempo-límite)</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>Non se atopou o servidor %1</translation>
+ </message>
+ <message>
+ <source>HTTP request failed</source>
+ <translation>O pedido HTTP fallou</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP response header</source>
+ <translation>A cabeceira da resposta HTTP non é válida</translation>
+ </message>
+ <message>
+ <source>Unknown authentication method</source>
+ <translation>Método descoñecido de autenticación</translation>
+ </message>
+ <message>
+ <source>Proxy authentication required</source>
+ <translation>Requírese de autenticación no proxy</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>Requírese de autenticación</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP chunked body</source>
+ <translation>Corpo HTTP en pedazos non válido</translation>
+ </message>
+ <message>
+ <source>Error writing response to device</source>
+ <translation>Erro ao escribir a resposta no dispositivo</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>Atopouse o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>Conectado co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>Pechouse a conexión con %1</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>Atopouse un servidor</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>Conectado co servidor</translation>
+ </message>
+</context>
+<context>
+ <name>QSocks5SocketEngine</name>
+ <message>
+ <source>Connection to proxy refused</source>
+ <translation>A conexión co proxy foi rexeitada</translation>
+ </message>
+ <message>
+ <source>Connection to proxy closed prematurely</source>
+ <translation>A conexión co proxy pechouse antes de tempo</translation>
+ </message>
+ <message>
+ <source>Proxy host not found</source>
+ <translation>Non se atopou o servidor proxy</translation>
+ </message>
+ <message>
+ <source>Connection to proxy timed out</source>
+ <translation>A conexión co proxy esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed</source>
+ <translation>Fallou a autenticación co proxy</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed: %1</source>
+ <translation>Fallou a autenticación no proxy: %1</translation>
+ </message>
+ <message>
+ <source>SOCKS version 5 protocol error</source>
+ <translation>Erro do protocolo SOCKS versión 5</translation>
+ </message>
+ <message>
+ <source>General SOCKSv5 server failure</source>
+ <translation>Fallo xeral do servidor SOCKSv5</translation>
+ </message>
+ <message>
+ <source>Connection not allowed by SOCKSv5 server</source>
+ <translation>O servidor SOCKSv5 non permitiu a conexión</translation>
+ </message>
+ <message>
+ <source>TTL expired</source>
+ <translation>Esgotouse o TTL</translation>
+ </message>
+ <message>
+ <source>SOCKSv5 command not supported</source>
+ <translation>A orde SOCKSv5 non está soportada</translation>
+ </message>
+ <message>
+ <source>Address type not supported</source>
+ <translation>Tipo de enderezo non soportado</translation>
+ </message>
+ <message>
+ <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+ <translation>Código de erro descoñecido (0x%1) do proxy SOCKSv5</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>A operación de rede esgotou o tempo-límite</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSpinBox</name>
+ <message>
+ <source>&amp;Select All</source>
+ <translation>Escoller &amp;todo</translation>
+ </message>
+ <message>
+ <source>&amp;Step up</source>
+ <translation>&amp;Subir</translation>
+ </message>
+ <message>
+ <source>Step &amp;down</source>
+ <translation>&amp;Baixar</translation>
+ </message>
+</context>
+<context>
+ <name>QAccessibleButton</name>
+ <message>
+ <source>Press</source>
+ <translation>Premer</translation>
+ </message>
+</context>
+<context>
+ <name>QCheckBox</name>
+ <message>
+ <source>Uncheck</source>
+ <translation>Desmarcar</translation>
+ </message>
+ <message>
+ <source>Check</source>
+ <translation>Marcar</translation>
+ </message>
+ <message>
+ <source>Toggle</source>
+ <translation>Conmutar</translation>
+ </message>
+</context>
+<context>
+ <name>QPushButton</name>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+</context>
+<context>
+ <name>QRadioButton</name>
+ <message>
+ <source>Check</source>
+ <translation>Marcar</translation>
+ </message>
+</context>
+<context>
+ <name>QToolButton</name>
+ <message>
+ <source>Press</source>
+ <translation>Premer</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+</context>
+<context>
+ <name>QAxSelect</name>
+ <message>
+ <source>Select ActiveX Control</source>
+ <translation>Escoller n control ActiveX</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>COM &amp;Object:</source>
+ <translation>&amp;Obxecto COM:</translation>
+ </message>
+</context>
+<context>
+ <name>QColorDialog</name>
+ <message>
+ <source>Hu&amp;e:</source>
+ <translation>&amp;Ton:</translation>
+ </message>
+ <message>
+ <source>&amp;Sat:</source>
+ <translation>&amp;Satur:</translation>
+ </message>
+ <message>
+ <source>&amp;Val:</source>
+ <translation>&amp;Valor:</translation>
+ </message>
+ <message>
+ <source>&amp;Red:</source>
+ <translation>&amp;Vermello:</translation>
+ </message>
+ <message>
+ <source>&amp;Green:</source>
+ <translation>V&amp;erde:</translation>
+ </message>
+ <message>
+ <source>Bl&amp;ue:</source>
+ <translation>A&amp;zul:</translation>
+ </message>
+ <message>
+ <source>A&amp;lpha channel:</source>
+ <translation>Canle &amp;alfa:</translation>
+ </message>
+ <message>
+ <source>Select Color</source>
+ <translation>Escoller unha cor</translation>
+ </message>
+ <message>
+ <source>&amp;Basic colors</source>
+ <translation>Cores &amp;básicas</translation>
+ </message>
+ <message>
+ <source>&amp;Custom colors</source>
+ <translation>Cores &amp;personalizadas</translation>
+ </message>
+ <message>
+ <source>&amp;Add to Custom Colors</source>
+ <translation>&amp;Engadir ás cores personalizadas</translation>
+ </message>
+</context>
+<context>
+ <name>QComboBox</name>
+ <message>
+ <source>False</source>
+ <translation>Falso</translation>
+ </message>
+ <message>
+ <source>True</source>
+ <translation>Verdadeiro</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QTabBar</name>
+ <message>
+ <source>Scroll Left</source>
+ <translation>Desprazar cara a esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll Right</source>
+ <translation>Desprazar cara a dereita</translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <source>%1: already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: a chave está baleira</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: non foi posíbel crear a chave</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: fallou ftok</translation>
+ </message>
+</context>
+<context>
+ <name>QSystemSemaphore</name>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: negouse o permiso</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Driver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to set autocommit</source>
+ <translation>Non foi posíbel activar a entrega automática</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Result</name>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>Non foi posíbel asociar a variábel</translation>
+ </message>
+ <message>
+ <source>Unable to fetch record %1</source>
+ <translation>Non foi posíbel traer o rexistro %1</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>Non foi posíbel acadar o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>Non foi posíbel acadar o primeiro</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCResult</name>
+ <message>
+ <source>Unable to fetch last</source>
+ <translation>Non foi posíbel acadar o último</translation>
+ </message>
+ <message>
+ <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
+ <translation>QODBCResult::reset: Non foi posíbel estabelecer «SQL_CURSOR_STATIC» como
+atributo da sentenza. Verifique a configuración do controlador ODBC</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to fetch</source>
+ <translation>Non foi posíbel acadar</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>Non foi posíbel acadar o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>Non foi posíbel acadar o primeiro</translation>
+ </message>
+ <message>
+ <source>Unable to fetch previous</source>
+ <translation>Non foi posíbel acadar o anterior</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>Non foi posíbel asociar a variábel</translation>
+ </message>
+</context>
+<context>
+ <name>QDateTimeEdit</name>
+ <message>
+ <source>AM</source>
+ <translation>AM</translation>
+ </message>
+ <message>
+ <source>am</source>
+ <translation>am</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>PM</translation>
+ </message>
+ <message>
+ <source>pm</source>
+ <translation>pm</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAbstractAnimation</name>
+ <message>
+ <source>Cannot animate non-existent property &quot;%1&quot;</source>
+ <translation>Non se pode animar a propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Cannot animate read-only property &quot;%1&quot;</source>
+ <translation>Non se pode animar a propriedade só para lectura «%1»</translation>
+ </message>
+ <message>
+ <source>Animation is an abstract class</source>
+ <translation>A animación é unha clase abstracta</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchorAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentAnimation</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>Non é posíbel conservar a aparencia con transformación complexa</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>Non é posíbel conservar a aparencia con escalado non uniforme</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>Non é posíbel conservar a aparencia con escala de 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePauseAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>Non se pode indicar unha duración &lt; 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModel</name>
+ <message>
+ <source>Qt was built without support for xmlpatterns</source>
+ <translation>Qt construíuse sen soporte para xmlpatterns</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchors</name>
+ <message>
+ <source>Possible anchor loop detected on fill.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no recheo.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on centerIn.</source>
+ <translation>Detectouse un posíbel ciclo de enganche en centerIn.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
+ <translation>Non se pode enganchar a un elemento que non é pai nin irmao.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on vertical anchor.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no enganche vertical.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on horizontal anchor.</source>
+ <translation>Detectouse un posíbel ciclo de enganche no enganche horizontal.</translation>
+ </message>
+ <message>
+ <source>Cannot specify left, right, and hcenter anchors.</source>
+ <translation>Non se poden especificar os enganches esquerdo, dereito e hcenter.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to a null item.</source>
+ <translation>Non se pode enganchar a un elemento nulo.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a horizontal edge to a vertical edge.</source>
+ <translation>Non se pode enganchar un contorno horizontal a un vertical.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor item to self.</source>
+ <translation>Non se pode enganchar o elemento consigo mesmo.</translation>
+ </message>
+ <message>
+ <source>Cannot specify top, bottom, and vcenter anchors.</source>
+ <translation>Non se poden especificar os enganches superior, inferior e vcenter.</translation>
+ </message>
+ <message>
+ <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source>
+ <translation>O enganche de liña de base non se pode empregar xunto cos enganches
+superior, inferior nin vcenter.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a vertical edge to a horizontal edge.</source>
+ <translation>Non se pode enganchar un contorno vertical a un horizontal.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnimatedImage</name>
+ <message>
+ <source>Qt was built without support for QMovie</source>
+ <translation>Qt construíuse sen soporte para QMovie</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeyNavigationAttached</name>
+ <message>
+ <source>KeyNavigation is only available via attached properties</source>
+ <translation>KeyNavigation só está dispoñíbel mediante as propriedades anexadas</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeysAttached</name>
+ <message>
+ <source>Keys is only available via attached properties</source>
+ <translation>Keys só está dispoñíbel mediante as propriedades anexadas</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBehavior</name>
+ <message>
+ <source>Cannot change the animation assigned to a Behavior.</source>
+ <translation>Non se pode mudar a animación asignada a un Behavior.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBinding</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>Detectouse un ciclo de unión para a propriedade «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiledBindings</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>Detectouse un ciclo de unión para a propriedade «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiler</name>
+ <message>
+ <source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
+ <translation>Asignación de propriedade non válida: «%1» é unha propriedade só para lectura</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unknown enumeration</source>
+ <translation>Asignación de propriedade non válida: enumeración descoñecida</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: string expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha cadea</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: url expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un URL</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsigned int expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un unsigned int</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: int expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un int</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: number expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un número</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: color expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha cor</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: date expected</source>
+ <translation>Asignación de propriedade non válida: agardábase unha date</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: time expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un time</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: datetime expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un datetime</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: point expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un punto</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: size expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un tamaño</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: rect expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un rect</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: boolean expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un booleano</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: 3D vector expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un vector 3D</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsupported type &quot;%1&quot;</source>
+ <translation>Asignación de propriedade non válida: tipo non soportado «%1»</translation>
+ </message>
+ <message>
+ <source>Element is not creatable.</source>
+ <translation>O elemento non é creábel.</translation>
+ </message>
+ <message>
+ <source>Component elements may not contain properties other than id</source>
+ <translation>Os elementos compoñentes non poden conter máis propriedades que o id</translation>
+ </message>
+ <message>
+ <source>Invalid component id specification</source>
+ <translation>Especificación non válida do id dun compoñente</translation>
+ </message>
+ <message>
+ <source>id is not unique</source>
+ <translation>O id non é único</translation>
+ </message>
+ <message>
+ <source>Invalid component body specification</source>
+ <translation>Especificación non válida do corpo dun compoñente</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new properties.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas propriedades.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new signals.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas sinais.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new functions.</source>
+ <translation>Os obxectos compoñentes non poden declarar novas funcións.</translation>
+ </message>
+ <message>
+ <source>Cannot create empty component specification</source>
+ <translation>Non se pode crear unha especificación de compoñente baleira</translation>
+ </message>
+ <message>
+ <source>Incorrectly specified signal assignment</source>
+ <translation>Especificouse incorrectamente a asignación de sinal</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value to a signal (expecting a script to be run)</source>
+ <translation>Non foi posíbel asignar un valor a un sinal (agardábase que se executase un script)</translation>
+ </message>
+ <message>
+ <source>Empty signal assignment</source>
+ <translation>Asignación baleira de sinal</translation>
+ </message>
+ <message>
+ <source>Empty property assignment</source>
+ <translation>Asignación baleira de propriedade</translation>
+ </message>
+ <message>
+ <source>Attached properties cannot be used here</source>
+ <translation>As propriedades anexas non se poden empregar aquí</translation>
+ </message>
+ <message>
+ <source>Non-existent attached object</source>
+ <translation>Anexáronse propriedades inexistentes</translation>
+ </message>
+ <message>
+ <source>Invalid attached object assignment</source>
+ <translation>Asignación de obxecto anexo non válido</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent default property</source>
+ <translation>Non se pode asignar a unha propriedade predeterminada inexistente</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non se pode asignar a unha propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Invalid use of namespace</source>
+ <translation>Uso non válido do espazo de nomes</translation>
+ </message>
+ <message>
+ <source>Not an attached property name</source>
+ <translation>Non é un nome de propriedade anexa</translation>
+ </message>
+ <message>
+ <source>Invalid use of id property</source>
+ <translation>Uso non válido da propriedade id</translation>
+ </message>
+ <message>
+ <source>Property has already been assigned a value</source>
+ <translation>Xa se lle asignou un valor a esta propriedade</translation>
+ </message>
+ <message>
+ <source>Invalid grouped property access</source>
+ <translation>Acceso non válido a unha propriedade agrupada</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value directly to a grouped property</source>
+ <translation>Non se pode asignar directamente un valor a unha propriedade agrupada</translation>
+ </message>
+ <message>
+ <source>Invalid property use</source>
+ <translation>Uso non válido da propriedade</translation>
+ </message>
+ <message>
+ <source>Property assignment expected</source>
+ <translation>Agardábase unha asignación de propriedade</translation>
+ </message>
+ <message>
+ <source>Single property assignment expected</source>
+ <translation>Agardábase unha única asignación a propriedade</translation>
+ </message>
+ <message>
+ <source>Unexpected object assignment</source>
+ <translation>Asignación de obxecto inesperada</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>Non se pode asignar un obxecto a unha lista</translation>
+ </message>
+ <message>
+ <source>Can only assign one binding to lists</source>
+ <translation>Só se pode asignar unha combinación ás listas</translation>
+ </message>
+ <message>
+ <source>Cannot assign primitives to lists</source>
+ <translation>Non se poden asignar primitivas ás listas</translation>
+ </message>
+ <message>
+ <source>Cannot assign multiple values to a script property</source>
+ <translation>Non se poden asignar varios valores a unha propriedade de script</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: script expected</source>
+ <translation>Asignación de propriedade non válida: agardábase un script</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to property</source>
+ <translation>Non se pode asignar un obxecto a unha propriedade</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot; cannot operate on &quot;%2&quot;</source>
+ <translation>«%1» non pode operar en «%2»</translation>
+ </message>
+ <message>
+ <source>Duplicate default property</source>
+ <translation>Propriedade predeterminada duplicada</translation>
+ </message>
+ <message>
+ <source>Duplicate property name</source>
+ <translation>Nome de propriedade duplicado</translation>
+ </message>
+ <message>
+ <source>Property names cannot begin with an upper case letter</source>
+ <translation>Os nomes das propriedades non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal property name</source>
+ <translation>Nome ilegal de propriedade</translation>
+ </message>
+ <message>
+ <source>Duplicate signal name</source>
+ <translation>Nome de sinal duplicado</translation>
+ </message>
+ <message>
+ <source>Signal names cannot begin with an upper case letter</source>
+ <translation>Os nomes de sinal non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal signal name</source>
+ <translation>Nome ilegal de sinal</translation>
+ </message>
+ <message>
+ <source>Duplicate method name</source>
+ <translation>Nome de método duplicado</translation>
+ </message>
+ <message>
+ <source>Method names cannot begin with an upper case letter</source>
+ <translation>Os nomes de método non poden comezar por maiúscula</translation>
+ </message>
+ <message>
+ <source>Illegal method name</source>
+ <translation>Nome ilegal de método</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>O valor dunha propriedade indicouse varias veces</translation>
+ </message>
+ <message>
+ <source>Invalid property nesting</source>
+ <translation>Aniñamento non válido de propriedade</translation>
+ </message>
+ <message>
+ <source>Cannot override FINAL property</source>
+ <translation>Non se pode sobrescribir a propriedade FINAL</translation>
+ </message>
+ <message>
+ <source>Invalid property type</source>
+ <translation>Tipo de propriedade non válido</translation>
+ </message>
+ <message>
+ <source>Invalid empty ID</source>
+ <translation>ID baleiro non válido</translation>
+ </message>
+ <message>
+ <source>IDs cannot start with an uppercase letter</source>
+ <translation>Os ID non poden iniciar por unha maiúscula</translation>
+ </message>
+ <message>
+ <source>IDs must start with a letter or underscore</source>
+ <translation>Os ID deben comezar por unha letra ou por un guión baixo</translation>
+ </message>
+ <message>
+ <source>IDs must contain only letters, numbers, and underscores</source>
+ <translation>Os ID só deben conter letras, números e guións baixos</translation>
+ </message>
+ <message>
+ <source>ID illegally masks global JavaScript property</source>
+ <translation>O ID enmascara ilegalmente unha propriedade JavaScript global</translation>
+ </message>
+ <message>
+ <source>No property alias location</source>
+ <translation>Falta a localización dun alcume dunha propriedade</translation>
+ </message>
+ <message>
+ <source>Invalid alias location</source>
+ <translation>Localización non válida dun alcume</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
+ <translation>Referencianon válida a un alcume. Unha referencia a un alcume debe indicarse como &lt;id&gt; ou como &lt;id&gt;.&lt;propriedade&gt;</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
+ <translation>Referencia non válida a un alcume. Non foi posíbel achar o id «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeComponent</name>
+ <message>
+ <source>Invalid empty URL</source>
+ <translation>URL baleiro non válido</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompositeTypeManager</name>
+ <message>
+ <source>Resource %1 unavailable</source>
+ <translation>O recurso %1 non está dispoñíbel</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>O espazo de nomes %1 non se pode empregar como un tipo</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>O tipo %1 non está dispoñíbel</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeConnections</name>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar a unha propriedade non existente «%1»</translation>
+ </message>
+ <message>
+ <source>Connections: nested objects not allowed</source>
+ <translation>Conexións: non se permiten obxectos aniñados</translation>
+ </message>
+ <message>
+ <source>Connections: syntax error</source>
+ <translation>Conexións: erro de sintaxe</translation>
+ </message>
+ <message>
+ <source>Connections: script expected</source>
+ <translation>Conexións: agardábase un script</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeEngine</name>
+ <message>
+ <source>executeSql called outside transaction()</source>
+ <translation>chamouse a executeSql fora dunha transaction()</translation>
+ </message>
+ <message>
+ <source>Read-only Transaction</source>
+ <translation>Transacción só para lectura</translation>
+ </message>
+ <message>
+ <source>Version mismatch: expected %1, found %2</source>
+ <translation>Non se corresponden as versións: agardábase a %1 pero achouse a %2</translation>
+ </message>
+ <message>
+ <source>SQL transaction failed</source>
+ <translation>Fallou a transacción SQL</translation>
+ </message>
+ <message>
+ <source>transaction: missing callback</source>
+ <translation>transacción: falta a chamada de retorno</translation>
+ </message>
+ <message>
+ <source>SQL: database version mismatch</source>
+ <translation>SQL: a versión da base de datos non se corresponde</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeFlipable</name>
+ <message>
+ <source>front is a write-once property</source>
+ <translation>front é unha propriedade só para escrita</translation>
+ </message>
+ <message>
+ <source>back is a write-once property</source>
+ <translation>bach é unha propriedade só para escrita</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeImportDatabase</name>
+ <message>
+ <source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
+ <translation>a definición «%2» no módulo «%1» non é lexíbel</translation>
+ </message>
+ <message>
+ <source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
+ <translation>non foi posíbel cargar a extensión para o módulo «%1»: %2</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
+ <translation>non se atopou a extensión «%2» do módulo «%1»</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; version %2.%3 is not installed</source>
+ <translation>a versión %2.%3 do módulo «%1» non está instalada</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; is not installed</source>
+ <translation>o módulo «%1» non está instalado</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot;: no such directory</source>
+ <translation>«%1»: non hai tal directorio</translation>
+ </message>
+ <message>
+ <source>import &quot;%1&quot; has no qmldir and no namespace</source>
+ <translation>import &quot;%1&quot; non ten qmldir nin espazo de nomes</translation>
+ </message>
+ <message>
+ <source>- %1 is not a namespace</source>
+ <translation>: %1 non é un espazo de nomes</translation>
+ </message>
+ <message>
+ <source>- nested namespaces not allowed</source>
+ <translation>: non se permiten os espazos de nomes aniñados</translation>
+ </message>
+ <message>
+ <source>local directory</source>
+ <translation>directorio local</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 and in %2</source>
+ <translation>é ambíguo. Atopouse en %1 e en %2</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source>
+ <translation>é ambiguo. Atopouse en %1 nas versións %2.%3 e %4.%5</translation>
+ </message>
+ <message>
+ <source>is instantiated recursively</source>
+ <translation>é instanciada de xeito recursivo</translation>
+ </message>
+ <message>
+ <source>is not a type</source>
+ <translation>non é un tipo</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeListModel</name>
+ <message>
+ <source>remove: index %1 out of range</source>
+ <translation>eliminar: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>insert: value is not an object</source>
+ <translation>inserir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>insert: index %1 out of range</source>
+ <translation>inserir: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>move: out of range</source>
+ <translation>mover: fora do intervalo</translation>
+ </message>
+ <message>
+ <source>append: value is not an object</source>
+ <translation>engadir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>set: value is not an object</source>
+ <translation>definir: o valor non é un obxecto</translation>
+ </message>
+ <message>
+ <source>set: index %1 out of range</source>
+ <translation>definir: o índice %1 está fora do intervalo</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot contain nested elements</source>
+ <translation>Elemento de lista: non pode conter elementos aniñados</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use reserved &quot;id&quot; property</source>
+ <translation>Elemento de lista: non pode empregar a propriedade «id» porque está reservada</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use script for property value</source>
+ <translation>Elemento de lista: non pode empregar script como valor de propriedade</translation>
+ </message>
+ <message>
+ <source>ListModel: undefined property &apos;%1&apos;</source>
+ <translation>Modelo de lista: a propriedade «%1» non está definida</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeLoader</name>
+ <message>
+ <source>Loader does not support loading non-visual elements.</source>
+ <translation>O cargador non permite cargar elementos non visuais.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentChange</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>Non é posíbel conservar a aparencia con transformación complexa</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>Non é posíbel conservar a aparencia con escalado non uniforme</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>Non é posíbel conservar a aparencia con escala de 0</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParser</name>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>Secuencia de escape unicode ilegal</translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>Caracter ilegal</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>Cadea non pechada no fin dunha liña</translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation>Secuencia de escape ilegal</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>Comentario non pechado ao final dunha liña</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>Sintaxe ilegal para un número exponencial</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>O identificador non pode comezar por un literal numérico</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>Literal de expresión regular non terminado</translation>
+ </message>
+ <message>
+ <source>Invalid regular expression flag &apos;%0&apos;</source>
+ <translation>Indicador de expresión regular «%0 »non válido</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression backslash sequence</source>
+ <translation>Secuencia de expresión regular non terminda con contrabarra</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression class</source>
+ <translation>Clase de expresión regular non terminada</translation>
+ </message>
+ <message>
+ <source>Syntax error</source>
+ <translation>Erro de sintaxe</translation>
+ </message>
+ <message>
+ <source>Unexpected token `%1&apos;</source>
+ <translation>Token «%1» non agardado.</translation>
+ </message>
+ <message>
+ <source>Expected token `%1&apos;</source>
+ <translation>Agardábase o token «%1»</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>O valor da propriedade estabeleceuse varias veces</translation>
+ </message>
+ <message>
+ <source>Expected type name</source>
+ <translation>Agardábase o nome dun tipo</translation>
+ </message>
+ <message>
+ <source>Invalid import qualifier ID</source>
+ <translation>ID do calificador de importación non válido</translation>
+ </message>
+ <message>
+ <source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
+ <translation>O nome reservado «Qt» non se pode empregar como calificador</translation>
+ </message>
+ <message>
+ <source>Script import qualifiers must be unique.</source>
+ <translation>Os calificadores de importación de script deben ser únicos.</translation>
+ </message>
+ <message>
+ <source>Script import requires a qualifier</source>
+ <translation>A importación de script require dun calificador</translation>
+ </message>
+ <message>
+ <source>Library import requires a version</source>
+ <translation>A importación de bibliotecas require dunha versión</translation>
+ </message>
+ <message>
+ <source>Expected parameter type</source>
+ <translation>Agardábase un tipo de parámetro</translation>
+ </message>
+ <message>
+ <source>Invalid property type modifier</source>
+ <translation>Modificador de tipo da propriedade non válido</translation>
+ </message>
+ <message>
+ <source>Unexpected property type modifier</source>
+ <translation>Modificador do tipo da propriedade non agardado</translation>
+ </message>
+ <message>
+ <source>Expected property type</source>
+ <translation>Agardábase o tipo dunha propriedade</translation>
+ </message>
+ <message>
+ <source>Readonly not yet supported</source>
+ <translation>Aínda non se soporta o só para leitura</translation>
+ </message>
+ <message>
+ <source>JavaScript declaration outside Script element</source>
+ <translation>Declaración de JavaScript fora dun elemento Script</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePixmap</name>
+ <message>
+ <source>Error decoding: %1: %2</source>
+ <translation>Aconteceu un erro ao descodificar: %1: %2</translation>
+ </message>
+ <message>
+ <source>Failed to get image from provider: %1</source>
+ <translation>Fallou a obtención da imaxe do provedor: %1</translation>
+ </message>
+ <message>
+ <source>Cannot open: %1</source>
+ <translation>Non foi posíbel abrir %1</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyChanges</name>
+ <message>
+ <source>PropertyChanges does not support creating state-specific objects.</source>
+ <translation>PropertyChanges non soporta crear obxectos específicos dun estado.</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar á propriedade inexistente «%1»</translation>
+ </message>
+ <message>
+ <source>Cannot assign to read-only property &quot;%1&quot;</source>
+ <translation>Non é posíbel asignar a unha propriedade só para lectura «%1»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTextInput</name>
+ <message>
+ <source>Could not load cursor delegate</source>
+ <translation>Non foi posíbel cargar o delegado do cursor</translation>
+ </message>
+ <message>
+ <source>Could not instantiate cursor delegate</source>
+ <translation>Non foi posíbel instanciar o delegado do cursor</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVME</name>
+ <message>
+ <source>Unable to create object of type %1</source>
+ <translation>Non foi posíbel crear un obxecto do tipo %1</translation>
+ </message>
+ <message>
+ <source>Cannot assign value %1 to property %2</source>
+ <translation>Non é posíbel asignar o valor %1 á propriedade %2</translation>
+ </message>
+ <message>
+ <source>Cannot assign object type %1 with no default method</source>
+ <translation>Non é posíbel asignar un obxecto do tipo %1 sen método predeterminado</translation>
+ </message>
+ <message>
+ <source>Cannot connect mismatched signal/slot %1 %vs. %2</source>
+ <translation>Non é posíbel conectar o sinal/slot non coincidente %1 %vs. %2</translation>
+ </message>
+ <message>
+ <source>Cannot assign an object to signal property %1</source>
+ <translation>Non é posíbel asignar un obxecto á propriedade de sinal %1</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>Non é posíbel asignar un obxecto a unha listaxe</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to interface property</source>
+ <translation>Non é posíbel asignar un obxecto a unha propriedade dunha interface</translation>
+ </message>
+ <message>
+ <source>Unable to create attached object</source>
+ <translation>Non foi posíbel crear o obxecto anexo</translation>
+ </message>
+ <message>
+ <source>Cannot set properties on %1 as it is null</source>
+ <translation>Non se poden definir propriedades de %1 porque é nulo</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVisualDataModel</name>
+ <message>
+ <source>Delegate component must be Item type.</source>
+ <translation>O componente delegado debe ser do tipo Item.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModelRole</name>
+ <message>
+ <source>An XmlRole query must not start with &apos;/&apos;</source>
+ <translation>Unha pescuda XmlRole non pode comezar por «/»</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlRoleList</name>
+ <message>
+ <source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
+ <translation>Unha pescuda XmlListModel non pode comezar por «/» nin por «//»</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
+ <translation>«%1» duplica un nome de rol anterior e desactivarase.</translation>
+ </message>
+ <message>
+ <source>invalid query: &quot;%1&quot;</source>
+ <translation>pescuda non válida: «%1»</translation>
+ </message>
+ <message>
+ <source>PulseAudio Sound Server</source>
+ <translation>Servidor de son PulseAudio</translation>
+ </message>
+</context>
+<context>
+ <name>QDial</name>
+ <message>
+ <source>QDial</source>
+ <translation>QDial</translation>
+ </message>
+ <message>
+ <source>SpeedoMeter</source>
+ <translation>Velocímetro</translation>
+ </message>
+ <message>
+ <source>SliderHandle</source>
+ <translation>Asa da barra deslizante</translation>
+ </message>
+</context>
+<context>
+ <name>QDoubleSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>Máis</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>Menos</translation>
+ </message>
+</context>
+<context>
+ <name>QScrollBar</name>
+ <message>
+ <source>Line up</source>
+ <translation>Aliñar en riba</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>Posición</translation>
+ </message>
+ <message>
+ <source>Line down</source>
+ <translation>Aliñar en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll here</source>
+ <translation>Desprazar cara aquí</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>Borde esquerdo</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>Cume</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>Borde dereito</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>Fondo</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>Desprazar cara á esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>Desprazar cara arriba</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>Desprazar cara á dereita</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>Desprazar cara abaixo</translation>
+ </message>
+</context>
+<context>
+ <name>QSlider</name>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>Posición</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+</context>
+<context>
+ <name>QSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>Máis</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>Menos</translation>
+ </message>
+</context>
+<context>
+ <name>QDialog</name>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>Que é isto?</translation>
+ </message>
+</context>
+<context>
+ <name>QDialogButtonBox</name>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>Gardar</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Cancelar</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>Aplicar</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>Reiniciar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Don&apos;t Save</source>
+ <translation>Non gardar</translation>
+ </message>
+ <message>
+ <source>Close without Saving</source>
+ <translation>Pechar sen gardar</translation>
+ </message>
+ <message>
+ <source>Discard</source>
+ <translation>Descartar</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>&amp;Si</translation>
+ </message>
+ <message>
+ <source>Yes to &amp;All</source>
+ <translation>Si a &amp;todo</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>&amp;Non</translation>
+ </message>
+ <message>
+ <source>N&amp;o to All</source>
+ <translation>Non a to&amp;do</translation>
+ </message>
+ <message>
+ <source>Save All</source>
+ <translation>Gardar todo</translation>
+ </message>
+ <message>
+ <source>Abort</source>
+ <translation>Abortar</translation>
+ </message>
+ <message>
+ <source>Retry</source>
+ <translation>Tentar de novo</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Restore Defaults</source>
+ <translation>Repor as predefinicións</translation>
+ </message>
+</context>
+<context>
+ <name>QMessageBox</name>
+ <message>
+ <source>Show Details...</source>
+ <translation>Mostrar os detalles...</translation>
+ </message>
+ <message>
+ <source>Hide Details...</source>
+ <translation>Agochar os detalles...</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+ <translation>&lt;h3&gt;Acerca de Qt&lt;/h3&gt;&lt;p&gt;Este programa emprega a versión %1 de Qt.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Qt é un toolkit de C++ para o desenvolvemento de programas multiplataforma.&lt;/p&gt; &lt;p&gt;Qt fornece portabilidade entre MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux e as principais variantes comerciais de Unix cun único código fonte. Qt tamén está dispoñíbel para dispositivos incrustados como Qt para Embedded Linux e Qt para Windows CE.&lt;/p&gt;
+&lt;p&gt;Qt está dispoñíbel en tres opcións de licenzas diferentes deseñadas para adaptarse ás necesidades dos diferentes usuarios.&lt;/p&gt;
+&lt;/p&gt;Qt distribuída sob o acordo de licenza comercial é adecuado para o desenvolvemento de software proprietario
+ou comercial onde non é preciso compartir ningún código fonte con terceiras partes ou que non poden cumprir os termos das licenzas GNU LGPL versión 2.1 nin da versión 3.0.&lt;/p&gt;
+&lt;p&gt;Qt sob a licenza GNU General Public License versión 2.1 é apropriada para o desenvolvemento de programas Qt (proprietario ou de fontes abertas) supoñendo que poda cumprir cos termos e condicións da licenza GNU GPL versión 2.1.&lt;/p&gt;
+&lt;p&gt;Qt sob a licenza GNU General Public License versión 3.0 é apropriada para o desenvolvemento de programas Qt onde desexe empregar tales programas en combinación con software suxeito aos termos da GNU GPL versión 3.0 ou onde desexe cumprir cos termos da GNU GPL versión 3.0.&lt;/p&gt;
+&lt;p&gt;Consulte &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; para ler un resumo das licenzas de Qt.&lt;/p&gt;
+&lt;p&gt;Copyright (C) 2010 Nokia Corporation ou as súas subsidiarias.&lt;/p&gt;
+&lt;p&gt;Qt é un produto de Nokia. Consulte &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; para máis información.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Acerca de Qt</translation>
+ </message>
+</context>
+<context>
+ <name>QDirModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>Data de modificación</translation>
+ </message>
+</context>
+<context>
+ <name>QFileDialog</name>
+ <message>
+ <source>My Computer</source>
+ <translation>O meu ordenador</translation>
+ </message>
+ <message>
+ <source>Look in:</source>
+ <translation>Procurar en:</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Go back</source>
+ <translation>Recuar</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Go forward</source>
+ <translation>Avanzar</translation>
+ </message>
+ <message>
+ <source>Parent Directory</source>
+ <translation>Cartafol superior</translation>
+ </message>
+ <message>
+ <source>Go to the parent directory</source>
+ <translation>Ir ao directorio superior</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>Crear un cartafol novo</translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translation>Crea un cartafol novo</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>Vista de lista</translation>
+ </message>
+ <message>
+ <source>Change to list view mode</source>
+ <translation>Troca para o modo de vista en lista</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>Vista de detalles</translation>
+ </message>
+ <message>
+ <source>Change to detail view mode</source>
+ <translation>Troca para o modo de vista de detalles</translation>
+ </message>
+ <message>
+ <source>Files of type:</source>
+ <translation>Ficheiros do tipo:</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>Procurar un cartafol</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>Gardar como</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>Todos os ficheiros (*)</translation>
+ </message>
+ <message>
+ <source>Show </source>
+ <translation>Mostrar</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>&amp;Mudar o nome</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>&amp;Borrar</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>Mostrar os ficheiros &amp;acochados</translation>
+ </message>
+ <message>
+ <source>&amp;New Folder</source>
+ <translation>&amp;Novo cartafol</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>Cartafol:</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>&amp;Nome do ficheiro:</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>&amp;Abrir</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>&amp;Gardar</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>Cartafoles</translation>
+ </message>
+ <message>
+ <source>&amp;Choose</source>
+ <translation>&amp;Escoller</translation>
+ </message>
+ <message>
+ <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+ <translation>%1
+Non se achou o cartafol.
+Verifique que se indicase o nome correcto.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>Xa existe %1.
+Desexa substituílo?</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+ <translation>%1
+Non se atopou o ficheiro.
+Verifique que se indicase o nome de ficheiro correcto.</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>Novo cartafol</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+ <translation>«%1» está protexido contra escrita.
+Desexa aínda así borralo?</translation>
+ </message>
+ <message>
+ <source>Are sure you want to delete &apos;%1&apos;?</source>
+ <translation>Desexa realmente borrar «%1»?</translation>
+ </message>
+ <message>
+ <source>Could not delete directory.</source>
+ <translation>Non foi posíbel borrar o cartafol.</translation>
+ </message>
+ <message>
+ <source>Recent Places</source>
+ <translation>Lugares recentes</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>Todos os ficheiros (*.*)</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Eliminar</translation>
+ </message>
+ <message>
+ <source>Drive</source>
+ <translation>Dispositivo</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>Ficheiro</translation>
+ </message>
+ <message>
+ <source>File Folder</source>
+ <comment>Match Windows Explorer</comment>
+ <translation>Cartafol</translation>
+ </message>
+ <message>
+ <source>Folder</source>
+ <comment>All other platforms</comment>
+ <translation>Cartafol</translation>
+ </message>
+ <message>
+ <source>Alias</source>
+ <comment>Mac OS X Finder</comment>
+ <translation>Atallo</translation>
+ </message>
+ <message>
+ <source>Shortcut</source>
+ <comment>All other platforms</comment>
+ <translation>Atallo</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation>Descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QFileSystemModel</name>
+ <message>
+ <source>%1 byte(s)</source>
+ <translation>%1 byte(s)</translation>
+ </message>
+ <message>
+ <source>%1 TB</source>
+ <translation>%1 TB</translation>
+ </message>
+ <message>
+ <source>%1 GB</source>
+ <translation>%1 GB</translation>
+ </message>
+ <message>
+ <source>%1 MB</source>
+ <translation>%1 MB</translation>
+ </message>
+ <message>
+ <source>%1 KB</source>
+ <translation>%1 KB</translation>
+ </message>
+ <message>
+ <source>%1 bytes</source>
+ <translation>%1 bytes</translation>
+ </message>
+ <message>
+ <source>Invalid filename</source>
+ <translation>O nome do ficheiro non é válido</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
+ <translation>&lt;b&gt;O nome «%1» non pode ser usado.&lt;/b&gt;&lt;p&gt;Probe con outro nome, máis curto ou sen signos de puntuación.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>Tamaño</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>Data de modificación</translation>
+ </message>
+ <message>
+ <source>My Computer</source>
+ <translation>O meu ordenador</translation>
+ </message>
+ <message>
+ <source>Computer</source>
+ <translation>Ordenador</translation>
+ </message>
+</context>
+<context>
+ <name>QDockWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Dock</source>
+ <translation>Acoplar</translation>
+ </message>
+ <message>
+ <source>Float</source>
+ <translation>Flutuante</translation>
+ </message>
+</context>
+<context>
+ <name>QErrorMessage</name>
+ <message>
+ <source>Debug Message:</source>
+ <translation>Mensaxe de depuración:</translation>
+ </message>
+ <message>
+ <source>Warning:</source>
+ <translation>Aviso:</translation>
+ </message>
+ <message>
+ <source>Fatal Error:</source>
+ <translation>Erro fatal:</translation>
+ </message>
+ <message>
+ <source>&amp;Show this message again</source>
+ <translation>&amp;Mostrar esta mensaxe de novo</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Aceptar</translation>
+ </message>
+</context>
+<context>
+ <name>QFile</name>
+ <message>
+ <source>Destination file exists</source>
+ <translation>O ficheiro de destino xa existe</translation>
+ </message>
+ <message>
+ <source>Will not rename sequential file using block copy</source>
+ <translation>Non se mudará o nome do ficheiro secuencial empregando a copia de bloques</translation>
+ </message>
+ <message>
+ <source>Cannot remove source file</source>
+ <translation>Non é posíbel eliminar o ficheiro de orixe</translation>
+ </message>
+ <message>
+ <source>Cannot open %1 for input</source>
+ <translation>Non é posíbel abrir %1 como entrada</translation>
+ </message>
+ <message>
+ <source>Cannot open for output</source>
+ <translation>Non foi posíbel abrir o ficheiro de saída</translation>
+ </message>
+ <message>
+ <source>Failure to write block</source>
+ <translation>Non foi posíbel escribir o bloque</translation>
+ </message>
+ <message>
+ <source>Cannot create %1 for output</source>
+ <translation>Non foi posíbel crear %1 para a saída</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDatabase</name>
+ <message>
+ <source>Normal</source>
+ <translation>Normal</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation>Negriña</translation>
+ </message>
+ <message>
+ <source>Demi Bold</source>
+ <translation>Demi negriña</translation>
+ </message>
+ <message>
+ <source>Black</source>
+ <translation>Escura</translation>
+ </message>
+ <message>
+ <source>Demi</source>
+ <translation>Demi</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>Clara</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>Cursiva</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>Oblicua</translation>
+ </message>
+ <message>
+ <source>Any</source>
+ <translation>Calquera</translation>
+ </message>
+ <message>
+ <source>Latin</source>
+ <translation>Latino</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>Grego</translation>
+ </message>
+ <message>
+ <source>Cyrillic</source>
+ <translation>Cirílico</translation>
+ </message>
+ <message>
+ <source>Armenian</source>
+ <translation>Armenio</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>Hebreo</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>Árabe</translation>
+ </message>
+ <message>
+ <source>Syriac</source>
+ <translation>Sirio</translation>
+ </message>
+ <message>
+ <source>Thaana</source>
+ <translation>Thaana</translation>
+ </message>
+ <message>
+ <source>Devanagari</source>
+ <translation>Devanagárico</translation>
+ </message>
+ <message>
+ <source>Bengali</source>
+ <translation>Bengalí</translation>
+ </message>
+ <message>
+ <source>Gurmukhi</source>
+ <translation>Gurmukhi</translation>
+ </message>
+ <message>
+ <source>Gujarati</source>
+ <translation>Guxaratí</translation>
+ </message>
+ <message>
+ <source>Oriya</source>
+ <translation>Orixa</translation>
+ </message>
+ <message>
+ <source>Tamil</source>
+ <translation>Tamil</translation>
+ </message>
+ <message>
+ <source>Telugu</source>
+ <translation>Telugu</translation>
+ </message>
+ <message>
+ <source>Kannada</source>
+ <translation>Kannada</translation>
+ </message>
+ <message>
+ <source>Malayalam</source>
+ <translation>Malayalam</translation>
+ </message>
+ <message>
+ <source>Sinhala</source>
+ <translation>Sinhala</translation>
+ </message>
+ <message>
+ <source>Thai</source>
+ <translation>Tailandés</translation>
+ </message>
+ <message>
+ <source>Lao</source>
+ <translation>Lao</translation>
+ </message>
+ <message>
+ <source>Tibetan</source>
+ <translation>Tibetano</translation>
+ </message>
+ <message>
+ <source>Myanmar</source>
+ <translation>Myanmar</translation>
+ </message>
+ <message>
+ <source>Georgian</source>
+ <translation>Xeorxiano</translation>
+ </message>
+ <message>
+ <source>Khmer</source>
+ <translation>Khmer</translation>
+ </message>
+ <message>
+ <source>Simplified Chinese</source>
+ <translation>Chinés simplificado</translation>
+ </message>
+ <message>
+ <source>Traditional Chinese</source>
+ <translation>Chinés tradicional</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>Xaponés</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>Coreano</translation>
+ </message>
+ <message>
+ <source>Vietnamese</source>
+ <translation>Vietnamita</translation>
+ </message>
+ <message>
+ <source>Symbol</source>
+ <translation>Símbolo</translation>
+ </message>
+ <message>
+ <source>Ogham</source>
+ <translation>Ogham</translation>
+ </message>
+ <message>
+ <source>Runic</source>
+ <translation>Runas</translation>
+ </message>
+ <message>
+ <source>N&apos;Ko</source>
+ <translation>N&apos;Ko</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDialog</name>
+ <message>
+ <source>Select Font</source>
+ <translation>Seleccionar o tipo de letra</translation>
+ </message>
+ <message>
+ <source>&amp;Font</source>
+ <translation>Tipo de &amp;letra</translation>
+ </message>
+ <message>
+ <source>Font st&amp;yle</source>
+ <translation>&amp;Estilo de letra</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Effects</source>
+ <translation>Efectos</translation>
+ </message>
+ <message>
+ <source>Stri&amp;keout</source>
+ <translation>&amp;Riscada</translation>
+ </message>
+ <message>
+ <source>&amp;Underline</source>
+ <translation>&amp;Subraiada</translation>
+ </message>
+ <message>
+ <source>Sample</source>
+ <translation>Mostra</translation>
+ </message>
+ <message>
+ <source>Wr&amp;iting System</source>
+ <translation>Sistema de es&amp;crita</translation>
+ </message>
+</context>
+<context>
+ <name>QFtp</name>
+ <message>
+ <source>Not connected</source>
+ <translation>Non conectado</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>Non se atopou o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection refused to host %1</source>
+ <translation>Rexeitouse a conexión co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection timed out to host %1</source>
+ <translation>A conexión co servidor %1 esgotou o tempo límite</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>Conectado co servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection refused for data connection</source>
+ <translation>Rexeitouse a conexión para conexión de datos</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Connecting to host failed:
+%1</source>
+ <translation>Fallou a conexión co servidor:
+%1</translation>
+ </message>
+ <message>
+ <source>Login failed:
+%1</source>
+ <translation>Fallou a autenticación:
+%1</translation>
+ </message>
+ <message>
+ <source>Listing directory failed:
+%1</source>
+ <translation>Fallou a listaxe do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Changing directory failed:
+%1</source>
+ <translation>Fallou o troco de cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Downloading file failed:
+%1</source>
+ <translation>Fallou a obtención do ficheiro:
+%1</translation>
+ </message>
+ <message>
+ <source>Uploading file failed:
+%1</source>
+ <translation>Fallou o envío do ficheiros:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing file failed:
+%1</source>
+ <translation>Fallou a eliminación do ficheiro:
+%1</translation>
+ </message>
+ <message>
+ <source>Creating directory failed:
+%1</source>
+ <translation>Fallou a creación do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing directory failed:
+%1</source>
+ <translation>Fallou a eliminación do cartafol:
+%1</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>A conexión pechouse</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>Atopouse o servidor %1</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>Pechouse a conexión con %1</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>Atopouse un servidor</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>Conectado co servidor</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfo</name>
+ <message>
+ <source>No host name given</source>
+ <translation>Non se indicou o nome do servidor</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfoAgent</name>
+ <message>
+ <source>No host name given</source>
+ <translation>Non se indicou o nome do servidor</translation>
+ </message>
+ <message>
+ <source>Invalid hostname</source>
+ <translation>O nome do servidor non é válido</translation>
+ </message>
+ <message>
+ <source>Unknown address type</source>
+ <translation>Tipo de enderezo descoñecido</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>Non se atopou o servidor</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QHttpSocketEngine</name>
+ <message>
+ <source>Did not receive HTTP response from proxy</source>
+ <translation>Non se recibiu a resposta HTTP do proxy</translation>
+ </message>
+ <message>
+ <source>Error parsing authentication request from proxy</source>
+ <translation>Aconteceu un erro ao procesar o pedido de autenticación do proxy</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>Requírese de autenticación</translation>
+ </message>
+ <message>
+ <source>Proxy denied connection</source>
+ <translation>O proxy negou a conexión</translation>
+ </message>
+ <message>
+ <source>Error communicating with HTTP proxy</source>
+ <translation>Aconteceu un erro ao comunicar co proxy HTTP</translation>
+ </message>
+ <message>
+ <source>Proxy server not found</source>
+ <translation>Non se atopou o servidor proxy</translation>
+ </message>
+ <message>
+ <source>Proxy connection refused</source>
+ <translation>Rexeitouse a conexión co proxy</translation>
+ </message>
+ <message>
+ <source>Proxy server connection timed out</source>
+ <translation>A conexión co servidor proxy esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Proxy connection closed prematurely</source>
+ <translation>A conexión co proxy pechouse antes de tempo</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseResult</name>
+ <message>
+ <source>Unable to create BLOB</source>
+ <translation>Non foi posíbel crear o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to write BLOB</source>
+ <translation>Non foi posíbel escribir o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to open BLOB</source>
+ <translation>Non foi posíbel abrir o BLOB</translation>
+ </message>
+ <message>
+ <source>Unable to read BLOB</source>
+ <translation>Non foi posíbel ler o BLOB</translation>
+ </message>
+ <message>
+ <source>Could not find array</source>
+ <translation>Non foi posíbel atopar o array</translation>
+ </message>
+ <message>
+ <source>Could not get array data</source>
+ <translation>Non foi posíbel obter o array de datos</translation>
+ </message>
+ <message>
+ <source>Could not get query info</source>
+ <translation>Non foi posíbel obter a información da consulta</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not allocate statement</source>
+ <translation>Non foi posíbel asignar memoria á sentenza</translation>
+ </message>
+ <message>
+ <source>Could not prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Could not describe input statement</source>
+ <translation>Non foi posíbel describir a sentenza de entrada</translation>
+ </message>
+ <message>
+ <source>Could not describe statement</source>
+ <translation>Non foi posíbel describir a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to close statement</source>
+ <translation>Non foi posíbel pechar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>Non foi posíbel executar a consulta</translation>
+ </message>
+ <message>
+ <source>Could not fetch next item</source>
+ <translation>Non foi posíbel acadar o seguinte elemento</translation>
+ </message>
+ <message>
+ <source>Could not get statement info</source>
+ <translation>Non foi posíbel obter información da sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QIODevice</name>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Too many open files</source>
+ <translation>Demasiados ficheiros abertos</translation>
+ </message>
+ <message>
+ <source>No such file or directory</source>
+ <translation>Non existe ese ficheiro nin cartafol</translation>
+ </message>
+ <message>
+ <source>No space left on device</source>
+ <translation>Non queda espazo no dispositivo</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QInputContext</name>
+ <message>
+ <source>XIM</source>
+ <translation>XIM</translation>
+ </message>
+ <message>
+ <source>FEP</source>
+ <translation>FEP</translation>
+ </message>
+ <message>
+ <source>XIM input method</source>
+ <translation>Método de entrada XIM</translation>
+ </message>
+ <message>
+ <source>Windows input method</source>
+ <translation>Método de entrada de Windows</translation>
+ </message>
+ <message>
+ <source>Mac OS X input method</source>
+ <translation>Método de entrada de Mac OS X</translation>
+ </message>
+ <message>
+ <source>S60 FEP input method</source>
+ <translation>Método de entrada FEP de S60</translation>
+ </message>
+</context>
+<context>
+ <name>QInputDialog</name>
+ <message>
+ <source>Enter a value:</source>
+ <translation>Introduza un valor:</translation>
+ </message>
+</context>
+<context>
+ <name>QLibrary</name>
+ <message>
+ <source>Could not mmap &apos;%1&apos;: %2</source>
+ <translation>Non foi posíbel mmap «%1»: %2</translation>
+ </message>
+ <message>
+ <source>Plugin verification data mismatch in &apos;%1&apos;</source>
+ <translation>Erro de concordancia na verificación dos datos da extensión en «%1»</translation>
+ </message>
+ <message>
+ <source>Could not unmap &apos;%1&apos;: %2</source>
+ <translation>Non foi posíbel unmap «%1»: %2</translation>
+ </message>
+ <message>
+ <source>The shared library was not found.</source>
+ <translation>Non se atopou a biblioteca compartida.</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+ <translation>O ficheiro «%1» non é unha extensión válida de Qt.</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel. (%2.%3.%4) [%5]</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel. Agardábase a
+chave de compilación «%2», obtívose a «%3»</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+ <translation>A extensión «%1» utiliza unha biblioteca Qt non compatíbel (Non é posíbel
+misturar as bibliotecas de depuración coas publicadas).</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Cannot load library %1: %2</source>
+ <translation>Non foi posíbel cargar a biblioteca %1: %2</translation>
+ </message>
+ <message>
+ <source>Cannot unload library %1: %2</source>
+ <translation>Non foi posíbel descargar a biblioteca %1: %2</translation>
+ </message>
+ <message>
+ <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+ <translation>Non é posíbel resolver o símbolo «%1» en %2: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QLineEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalServer</name>
+ <message>
+ <source>%1: Name error</source>
+ <translation>%1: Erro de nome</translation>
+ </message>
+ <message>
+ <source>%1: Permission denied</source>
+ <translation>%1: Permiso negado</translation>
+ </message>
+ <message>
+ <source>%1: Address in use</source>
+ <translation>%1: O enderezo xa está a ser empregado</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: Erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalSocket</name>
+ <message>
+ <source>%1: Connection refused</source>
+ <translation>%1: Rexeitouse a conexión</translation>
+ </message>
+ <message>
+ <source>%1: Remote closed</source>
+ <translation>%1: Pechouse de xeito remoto</translation>
+ </message>
+ <message>
+ <source>%1: Invalid name</source>
+ <translation>%1: Nome non válido</translation>
+ </message>
+ <message>
+ <source>%1: Socket access error</source>
+ <translation>%1: Erro de acceso ao socket</translation>
+ </message>
+ <message>
+ <source>%1: Socket resource error</source>
+ <translation>%1: Erro do recurso do socket</translation>
+ </message>
+ <message>
+ <source>%1: Socket operation timed out</source>
+ <translation>%1: A operación do socket esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>%1: Datagram too large</source>
+ <translation>%1: Datagrama grande de máis</translation>
+ </message>
+ <message>
+ <source>%1: Connection error</source>
+ <translation>%1: Erro na conexión</translation>
+ </message>
+ <message>
+ <source>%1: The socket operation is not supported</source>
+ <translation>%1: A operación do socket non está soportada</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error</source>
+ <translation>%1: Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: Erro descoñecido %2</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLDriver</name>
+ <message>
+ <source>Unable to open database &apos;</source>
+ <translation>Non foi posíbel abrir a base de datos «</translation>
+ </message>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLResult</name>
+ <message>
+ <source>Unable to fetch data</source>
+ <translation>Non foi posíbel acadar os datos</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>Non foi posíbel executar a consulta</translation>
+ </message>
+ <message>
+ <source>Unable to store result</source>
+ <translation>Non foi posíbel gardar os resultados</translation>
+ </message>
+ <message>
+ <source>Unable to execute next query</source>
+ <translation>Non foi posíbel executar a seguinte consulta</translation>
+ </message>
+ <message>
+ <source>Unable to store next result</source>
+ <translation>Non foi posíbel gardar o seguinte resultado</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>Non foi posíbel reiniciar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>Non foi posíbel asociar o valor</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind outvalues</source>
+ <translation>Non foi posíbel asociar os outvalues</translation>
+ </message>
+ <message>
+ <source>Unable to store statement results</source>
+ <translation>Non foi posíbel gardar os resultados da sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiArea</name>
+ <message>
+ <source>(Untitled)</source>
+ <translation>(Sen título)</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiSubWindow</name>
+ <message>
+ <source>- [%1]</source>
+ <translation>- [%1]</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>Maximizar</translation>
+ </message>
+ <message>
+ <source>Unshade</source>
+ <translation>Despregar</translation>
+ </message>
+ <message>
+ <source>Shade</source>
+ <translation>Pregar</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>Restaurar para abaixo</translation>
+ </message>
+ <message>
+ <source>Restore</source>
+ <translation>Restaurar</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>Menú</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>&amp;Restaurar</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>&amp;Mover</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>Mi&amp;nimizar</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>Ma&amp;ximizar</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>Manter &amp;enriba</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QMenu</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Abrir</translation>
+ </message>
+ <message>
+ <source>Execute</source>
+ <translation>Executar</translation>
+ </message>
+</context>
+<context>
+ <name>QMenuBar</name>
+ <message>
+ <source>Actions</source>
+ <translation>Accións</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContext</name>
+ <message>
+ <source>Select IM</source>
+ <translation>Escolla o método de entrada</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContextPlugin</name>
+ <message>
+ <source>Multiple input method switcher</source>
+ <translation>Selector de múltiplos métodos de entrada</translation>
+ </message>
+ <message>
+ <source>Multiple input method switcher that uses the context menu of the text widgets</source>
+ <translation>Selector entre métodos de entrada que usa o menú contextual dos widgets de
+texto</translation>
+ </message>
+</context>
+<context>
+ <name>QNativeSocketEngine</name>
+ <message>
+ <source>Unable to initialize non-blocking socket</source>
+ <translation>Non foi posíbel inicializar o socket non bloqueante</translation>
+ </message>
+ <message>
+ <source>Unable to initialize broadcast socket</source>
+ <translation>Non foi posíbel inicializar o socket de broadcast</translation>
+ </message>
+ <message>
+ <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+ <translation>Tentouse usar soporte de socket IPv6 nunha plataforma en soporte de IPv6</translation>
+ </message>
+ <message>
+ <source>The remote host closed the connection</source>
+ <translation>O servidor remoto pechou a conexión</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>A operación de rede esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Out of resources</source>
+ <translation>Esgotáronse os recursos</translation>
+ </message>
+ <message>
+ <source>Unsupported socket operation</source>
+ <translation>Operación de socket non soportada</translation>
+ </message>
+ <message>
+ <source>Protocol type not supported</source>
+ <translation>Tipo de protocolo non soportado</translation>
+ </message>
+ <message>
+ <source>Invalid socket descriptor</source>
+ <translation>Descritor de socket non válido</translation>
+ </message>
+ <message>
+ <source>Host unreachable</source>
+ <translation>Non foi posíbel acadar o servidor</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>Non foi posíbel acadar a rede</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>Permiso negado</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>A conexión esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>A conexión foi rexeitada</translation>
+ </message>
+ <message>
+ <source>The bound address is already in use</source>
+ <translation>O enderezo de conexión xa está en uso</translation>
+ </message>
+ <message>
+ <source>The address is not available</source>
+ <translation>O enderezo non está dispoñíbel</translation>
+ </message>
+ <message>
+ <source>The address is protected</source>
+ <translation>O enderezo está protexido</translation>
+ </message>
+ <message>
+ <source>Datagram was too large to send</source>
+ <translation>O datagrama é grande de máis para envialo</translation>
+ </message>
+ <message>
+ <source>Unable to send a message</source>
+ <translation>Non foi posíbel enviar unha mensaxe</translation>
+ </message>
+ <message>
+ <source>Unable to receive a message</source>
+ <translation>Non foi posíbel recibir unha mensaxe</translation>
+ </message>
+ <message>
+ <source>Unable to write</source>
+ <translation>Non foi posíbel escribir</translation>
+ </message>
+ <message>
+ <source>Network error</source>
+ <translation>Erro de rede</translation>
+ </message>
+ <message>
+ <source>Another socket is already listening on the same port</source>
+ <translation>Xa hai outro socket a escoitar o mesmo porto</translation>
+ </message>
+ <message>
+ <source>Operation on non-socket</source>
+ <translation>Operación nun non socket</translation>
+ </message>
+ <message>
+ <source>The proxy type is invalid for this operation</source>
+ <translation>O tipo de proxy non é válido para esta operación</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessCacheBackend</name>
+ <message>
+ <source>Error opening %1</source>
+ <translation>Aconteceu un erro ao abrir %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDataBackend</name>
+ <message>
+ <source>Operation not supported on %1</source>
+ <translation>Operación non soportada en %1</translation>
+ </message>
+ <message>
+ <source>Invalid URI: %1</source>
+ <translation>URI non válida: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDebugPipeBackend</name>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>Aconteceu un erro de escrita ao escribir en %1: %2</translation>
+ </message>
+ <message>
+ <source>Socket error on %1: %2</source>
+ <translation>Aconteceu un erro de socket en %1: %2</translation>
+ </message>
+ <message>
+ <source>Remote host closed the connection prematurely on %1</source>
+ <translation>O servidor remoto pechou prematuramente a conexión en %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFileBackend</name>
+ <message>
+ <source>Request for opening non-local file %1</source>
+ <translation>Pedido de abertura do ficheiro non local %1</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: Path is a directory</source>
+ <translation>Non é posíbel abrir %1: A rota é un directorio</translation>
+ </message>
+ <message>
+ <source>Error opening %1: %2</source>
+ <translation>Aconteceu un erro ao abrir %1: %2</translation>
+ </message>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>Aconteceu un erro de escrita ao escribir en %1: %2</translation>
+ </message>
+ <message>
+ <source>Read error reading from %1: %2</source>
+ <translation>Aconteceu un erro ao ler en %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFtpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>Non se atopou ningún proxy axeitado</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: is a directory</source>
+ <translation>Non é posíbel abrir %1: é un directorio</translation>
+ </message>
+ <message>
+ <source>Logging in to %1 failed: authentication required</source>
+ <translation>Fallou o acceso a %1: debe autenticarse</translation>
+ </message>
+ <message>
+ <source>Error while downloading %1: %2</source>
+ <translation>Aconteceu un erro ao obter %1: %2</translation>
+ </message>
+ <message>
+ <source>Error while uploading %1: %2</source>
+ <translation>Aconteceu un erro ao enviar %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessHttpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>Non se atopou ningún proxy axeitado</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReply</name>
+ <message>
+ <source>Error downloading %1 - server replied: %2</source>
+ <translation>Aconteceu un erro ao obter %1, o servidor respondeu: %2</translation>
+ </message>
+ <message>
+ <source>Protocol &quot;%1&quot; is unknown</source>
+ <translation>Non se coñece o protocolo «%1»</translation>
+ </message>
+ <message>
+ <source>Network session error.</source>
+ <translation>Erro da sesión de rede.</translation>
+ </message>
+ <message>
+ <source>Temporary network failure.</source>
+ <translation>Fallo temporal da rede.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessManager</name>
+ <message>
+ <source>Network access is disabled.</source>
+ <translation>O acceso á rede está desactivado.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReplyImpl</name>
+ <message>
+ <source>Operation canceled</source>
+ <translation>Cancelouse a operación</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSession</name>
+ <message>
+ <source>Invalid configuration.</source>
+ <translation>A configuración non é válida.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSessionPrivateImpl</name>
+ <message>
+ <source>Roaming error</source>
+ <translation>Erro da itinerancia</translation>
+ </message>
+ <message>
+ <source>Session aborted by user or system</source>
+ <translation>A sesión abortouse polo usuario ou polo sistema</translation>
+ </message>
+ <message>
+ <source>Unidentified Error</source>
+ <translation>Erro non identificado</translation>
+ </message>
+ <message>
+ <source>Unknown session error.</source>
+ <translation>Erro descoñecido da sesión.</translation>
+ </message>
+ <message>
+ <source>The session was aborted by the user or system.</source>
+ <translation>A sesión abortouse polo usuario ou polo sistema.</translation>
+ </message>
+ <message>
+ <source>The requested operation is not supported by the system.</source>
+ <translation>A operación pedida non está soportada polo sistema.</translation>
+ </message>
+ <message>
+ <source>The specified configuration cannot be used.</source>
+ <translation>A configuración especificada non se pode empregar.</translation>
+ </message>
+ <message>
+ <source>Roaming was aborted or is not possible.</source>
+ <translation>A itinerancia abortouse ou non é posíbel.</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIDriver</name>
+ <message>
+ <source>Unable to initialize</source>
+ <comment>QOCIDriver</comment>
+ <translation>Non foi posíbel inicializar</translation>
+ </message>
+ <message>
+ <source>Unable to logon</source>
+ <translation>Non foi posíbel identificarse</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIResult</name>
+ <message>
+ <source>Unable to bind column for batch execute</source>
+ <translation>Non foi posíbel asociar a columna para executar o lote</translation>
+ </message>
+ <message>
+ <source>Unable to execute batch statement</source>
+ <translation>Non foi posíbel executar a sentenza en lote</translation>
+ </message>
+ <message>
+ <source>Unable to goto next</source>
+ <translation>Non foi posíbel ir para o seguinte</translation>
+ </message>
+ <message>
+ <source>Unable to alloc statement</source>
+ <translation>Non foi posíbel reservar memoria para a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to get statement type</source>
+ <translation>Non foi posíbel obter o tipo da sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>Non foi posíbel asociar o valor</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
+ <translation>Non foi posíbel conectar xa que o controlador non soporta todas as funcionalidades requiridas</translation>
+ </message>
+ <message>
+ <source>Unable to disable autocommit</source>
+ <translation>Non foi posíbel desactivar a entrega automática</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to enable autocommit</source>
+ <translation>Non foi posíbel activar a entrega automática</translation>
+ </message>
+</context>
+<context>
+ <name>QPPDOptionsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintDialog</name>
+ <message>
+ <source>&amp;Options &gt;&gt;</source>
+ <translation>&amp;Opcións &gt;&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Print</source>
+ <translation>&amp;Imprimir</translation>
+ </message>
+ <message>
+ <source>&amp;Options &lt;&lt;</source>
+ <translation>&amp;Opcións &lt;&lt;</translation>
+ </message>
+ <message>
+ <source>Print to File (PDF)</source>
+ <translation>Imprimir nun ficheiro (PDF)</translation>
+ </message>
+ <message>
+ <source>Print to File (Postscript)</source>
+ <translation>Imprimir nun ficheiro (Postscript)</translation>
+ </message>
+ <message>
+ <source>Local file</source>
+ <translation>Ficheiro local</translation>
+ </message>
+ <message>
+ <source>Write %1 file</source>
+ <translation>Escribir no ficheiro %1</translation>
+ </message>
+ <message>
+ <source>Print To File ...</source>
+ <translation>Imprimir nun ficheiro...</translation>
+ </message>
+ <message>
+ <source>%1 is a directory.
+Please choose a different file name.</source>
+ <translation>%1 é un cartafol.
+Escolla outro nome para o ficheiro.</translation>
+ </message>
+ <message>
+ <source>File %1 is not writable.
+Please choose a different file name.</source>
+ <translation>Non se pode escribir no ficheiro %1.
+Escolla outro nome de ficheiro.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to overwrite it?</source>
+ <translation>%1 xa existe.
+Desexa sobrescribilo?</translation>
+ </message>
+ <message>
+ <source>A0</source>
+ <translation>A0</translation>
+ </message>
+ <message>
+ <source>A1</source>
+ <translation>A1</translation>
+ </message>
+ <message>
+ <source>A2</source>
+ <translation>A2</translation>
+ </message>
+ <message>
+ <source>A3</source>
+ <translation>A3</translation>
+ </message>
+ <message>
+ <source>A4</source>
+ <translation>A4</translation>
+ </message>
+ <message>
+ <source>A5</source>
+ <translation>A5</translation>
+ </message>
+ <message>
+ <source>A6</source>
+ <translation>A6</translation>
+ </message>
+ <message>
+ <source>A7</source>
+ <translation>A7</translation>
+ </message>
+ <message>
+ <source>A8</source>
+ <translation>A8</translation>
+ </message>
+ <message>
+ <source>A9</source>
+ <translation>A9</translation>
+ </message>
+ <message>
+ <source>B0</source>
+ <translation>B0</translation>
+ </message>
+ <message>
+ <source>B1</source>
+ <translation>B1</translation>
+ </message>
+ <message>
+ <source>B2</source>
+ <translation>B2</translation>
+ </message>
+ <message>
+ <source>B3</source>
+ <translation>B3</translation>
+ </message>
+ <message>
+ <source>B4</source>
+ <translation>B4</translation>
+ </message>
+ <message>
+ <source>B5</source>
+ <translation>B5</translation>
+ </message>
+ <message>
+ <source>B6</source>
+ <translation>B6</translation>
+ </message>
+ <message>
+ <source>B7</source>
+ <translation>B7</translation>
+ </message>
+ <message>
+ <source>B8</source>
+ <translation>B8</translation>
+ </message>
+ <message>
+ <source>B9</source>
+ <translation>B9</translation>
+ </message>
+ <message>
+ <source>B10</source>
+ <translation>B10</translation>
+ </message>
+ <message>
+ <source>C5E</source>
+ <translation>C5E</translation>
+ </message>
+ <message>
+ <source>DLE</source>
+ <translation>DLE</translation>
+ </message>
+ <message>
+ <source>Executive</source>
+ <translation>Executive</translation>
+ </message>
+ <message>
+ <source>Folio</source>
+ <translation>Folio</translation>
+ </message>
+ <message>
+ <source>Ledger</source>
+ <translation>Ledger</translation>
+ </message>
+ <message>
+ <source>Legal</source>
+ <translation>Legal</translation>
+ </message>
+ <message>
+ <source>Letter</source>
+ <translation>Carta</translation>
+ </message>
+ <message>
+ <source>Tabloid</source>
+ <translation>Tabloid</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope</source>
+ <translation>Sobre US Common núm. 10</translation>
+ </message>
+ <message>
+ <source>Custom</source>
+ <translation>Personalizado</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>File exists</source>
+ <translation>O ficheiro xa existe</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;Desexa sobrescribilo?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>A0 (841 x 1189 mm)</source>
+ <translation>A0 (841 x 1189 mm)</translation>
+ </message>
+ <message>
+ <source>A1 (594 x 841 mm)</source>
+ <translation>A1 (594 x 841 mm)</translation>
+ </message>
+ <message>
+ <source>A2 (420 x 594 mm)</source>
+ <translation>A2 (420 x 594 mm)</translation>
+ </message>
+ <message>
+ <source>A3 (297 x 420 mm)</source>
+ <translation>A3 (297 x 420 mm)</translation>
+ </message>
+ <message>
+ <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
+ <translation>A4 (210 x 297 mm, 8,26 x 11,7 polgadas)</translation>
+ </message>
+ <message>
+ <source>A5 (148 x 210 mm)</source>
+ <translation>A5 (148 x 210 mm)</translation>
+ </message>
+ <message>
+ <source>A6 (105 x 148 mm)</source>
+ <translation>A6 (105 x 148 mm)</translation>
+ </message>
+ <message>
+ <source>A7 (74 x 105 mm)</source>
+ <translation>A7 (74 x 105 mm)</translation>
+ </message>
+ <message>
+ <source>A8 (52 x 74 mm)</source>
+ <translation>A8 (52 x 74 mm)</translation>
+ </message>
+ <message>
+ <source>A9 (37 x 52 mm)</source>
+ <translation>A9 (37 x 52 mm)</translation>
+ </message>
+ <message>
+ <source>B0 (1000 x 1414 mm)</source>
+ <translation>B0 (1000 x 1414 mm)</translation>
+ </message>
+ <message>
+ <source>B1 (707 x 1000 mm)</source>
+ <translation>B1 (707 x 1000 mm)</translation>
+ </message>
+ <message>
+ <source>B2 (500 x 707 mm)</source>
+ <translation>B2 (500 x 707 mm)</translation>
+ </message>
+ <message>
+ <source>B3 (353 x 500 mm)</source>
+ <translation>B3 (353 x 500 mm)</translation>
+ </message>
+ <message>
+ <source>B4 (250 x 353 mm)</source>
+ <translation>B4 (250 x 353 mm)</translation>
+ </message>
+ <message>
+ <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
+ <translation>B5 (176 x 250 mm, 6,93 x 9,84 polgadas)</translation>
+ </message>
+ <message>
+ <source>B6 (125 x 176 mm)</source>
+ <translation>B6 (125 x 176 mm)</translation>
+ </message>
+ <message>
+ <source>B7 (88 x 125 mm)</source>
+ <translation>B7 (88 x 125 mm)</translation>
+ </message>
+ <message>
+ <source>B8 (62 x 88 mm)</source>
+ <translation>B8 (62 x 88 mm)</translation>
+ </message>
+ <message>
+ <source>B9 (44 x 62 mm)</source>
+ <translation>B9 (44 x 62 mm)</translation>
+ </message>
+ <message>
+ <source>B10 (31 x 44 mm)</source>
+ <translation>B10 (31 x 44 mm)</translation>
+ </message>
+ <message>
+ <source>C5E (163 x 229 mm)</source>
+ <translation>C5E (163 x 229 mm)</translation>
+ </message>
+ <message>
+ <source>DLE (110 x 220 mm)</source>
+ <translation>DLE (110 x 220 mm)</translation>
+ </message>
+ <message>
+ <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
+ <translation>Executive (7,5 x 10 polgadas, 191 x 254 mm)</translation>
+ </message>
+ <message>
+ <source>Folio (210 x 330 mm)</source>
+ <translation>Folio (210 x 330 mm)</translation>
+ </message>
+ <message>
+ <source>Ledger (432 x 279 mm)</source>
+ <translation>Ledger (432 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
+ <translation>Legal (8,5 x 14 polgadas, 216 x 356 mm)</translation>
+ </message>
+ <message>
+ <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
+ <translation>Carta (8,5 x 11 polgadas, 216 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Tabloid (279 x 432 mm)</source>
+ <translation>Tabloide (279 x 432 mm)</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope (105 x 241 mm)</source>
+ <translation>Sobre US Common #10 (105 x 241 mm)</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>Imprimir todas</translation>
+ </message>
+ <message>
+ <source>Print selection</source>
+ <translation>Imprimir a selección</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>Intervalo de impresión</translation>
+ </message>
+ <message>
+ <source>Print current page</source>
+ <translation>Imprimir a páxina actual</translation>
+ </message>
+ <message>
+ <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+ <translation>O valor «de» non pode ser maior do que o valor «até».</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>locally connected</source>
+ <translation>conectado localmente</translation>
+ </message>
+ <message>
+ <source>Aliases: %1</source>
+ <translation>Alcumes: %1</translation>
+ </message>
+ <message>
+ <source>unknown</source>
+ <translation>descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>Non foi posíbel conectar</translation>
+ </message>
+ <message>
+ <source>Could not begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Could not rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to subscribe</source>
+ <translation>Non foi posíbel subscribirse</translation>
+ </message>
+ <message>
+ <source>Unable to unsubscribe</source>
+ <translation>Non foi posíbel anular a subscrición</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLResult</name>
+ <message>
+ <source>Unable to create query</source>
+ <translation>Non foi posíbel crear a consulta</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>Non foi posíbel preparar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QPageSetupWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Paper</source>
+ <translation>Papel</translation>
+ </message>
+ <message>
+ <source>Page size:</source>
+ <translation>Tamaño da páxina:</translation>
+ </message>
+ <message>
+ <source>Width:</source>
+ <translation>Largura:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>Altura:</translation>
+ </message>
+ <message>
+ <source>Paper source:</source>
+ <translation>Fonte do papel:</translation>
+ </message>
+ <message>
+ <source>Orientation</source>
+ <translation>Orientación</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>Retrato</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>Apaisado</translation>
+ </message>
+ <message>
+ <source>Reverse landscape</source>
+ <translation>Apaisado invertido</translation>
+ </message>
+ <message>
+ <source>Reverse portrait</source>
+ <translation>Retrato invertido</translation>
+ </message>
+ <message>
+ <source>Margins</source>
+ <translation>Marxes</translation>
+ </message>
+ <message>
+ <source>top margin</source>
+ <translation>marxe superior</translation>
+ </message>
+ <message>
+ <source>left margin</source>
+ <translation>marxe esquerda</translation>
+ </message>
+ <message>
+ <source>right margin</source>
+ <translation>marxe dereita</translation>
+ </message>
+ <message>
+ <source>bottom margin</source>
+ <translation>marxe inferior</translation>
+ </message>
+ <message>
+ <source>Centimeters (cm)</source>
+ <translation>Centímetros (cm)</translation>
+ </message>
+ <message>
+ <source>Millimeters (mm)</source>
+ <translation>Milímetros (mm)</translation>
+ </message>
+ <message>
+ <source>Inches (in)</source>
+ <translation>Polgadas (pol)</translation>
+ </message>
+ <message>
+ <source>Points (pt)</source>
+ <translation>Puntos (pt)</translation>
+ </message>
+</context>
+<context>
+ <name>QPluginLoader</name>
+ <message>
+ <source>The plugin was not loaded.</source>
+ <translation>A extensión non se cargou.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPreviewDialog</name>
+ <message>
+ <source>Page Setup</source>
+ <translation>Configuración da páxina</translation>
+ </message>
+ <message>
+ <source>%1%</source>
+ <translation>%1%</translation>
+ </message>
+ <message>
+ <source>Print Preview</source>
+ <translation>Vista previa do impreso</translation>
+ </message>
+ <message>
+ <source>Next page</source>
+ <translation>Seguinte páxina</translation>
+ </message>
+ <message>
+ <source>Previous page</source>
+ <translation>Páxina anterior</translation>
+ </message>
+ <message>
+ <source>First page</source>
+ <translation>Primeira páxina</translation>
+ </message>
+ <message>
+ <source>Last page</source>
+ <translation>Última páxina</translation>
+ </message>
+ <message>
+ <source>Fit width</source>
+ <translation>Axustar á largura</translation>
+ </message>
+ <message>
+ <source>Fit page</source>
+ <translation>Axustar á páxina</translation>
+ </message>
+ <message>
+ <source>Zoom in</source>
+ <translation>Ampliar</translation>
+ </message>
+ <message>
+ <source>Zoom out</source>
+ <translation>Reducir</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>Retrato</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>Apaisado</translation>
+ </message>
+ <message>
+ <source>Show single page</source>
+ <translation>Mostrar unha só páxina</translation>
+ </message>
+ <message>
+ <source>Show facing pages</source>
+ <translation>Mostrar as páxinas opostas</translation>
+ </message>
+ <message>
+ <source>Show overview of all pages</source>
+ <translation>Mostrar un resumo de todas as páxinas</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>Page setup</source>
+ <translation>Configuración da páxina</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>Exportar a PDF</translation>
+ </message>
+ <message>
+ <source>Export to PostScript</source>
+ <translation>Exportar a PostScript</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPropertiesWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>Páxina</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>Avanzado</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintSettingsOutput</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Copies</source>
+ <translation>Copias</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>Intervalo de impresión</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>Imprimir todas</translation>
+ </message>
+ <message>
+ <source>Pages from</source>
+ <translation>As páxinas da</translation>
+ </message>
+ <message>
+ <source>to</source>
+ <translation>até a</translation>
+ </message>
+ <message>
+ <source>Current Page</source>
+ <translation>Páxina actual</translation>
+ </message>
+ <message>
+ <source>Selection</source>
+ <translation>Selección</translation>
+ </message>
+ <message>
+ <source>Output Settings</source>
+ <translation>Configuración da saída</translation>
+ </message>
+ <message>
+ <source>Copies:</source>
+ <translation>Copias:</translation>
+ </message>
+ <message>
+ <source>Collate</source>
+ <translation>Xuntar</translation>
+ </message>
+ <message>
+ <source>Reverse</source>
+ <translation>Inverter</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>Opcións</translation>
+ </message>
+ <message>
+ <source>Color Mode</source>
+ <translation>Modo de cor</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>Cor</translation>
+ </message>
+ <message>
+ <source>Grayscale</source>
+ <translation>Escala de grises</translation>
+ </message>
+ <message>
+ <source>Duplex Printing</source>
+ <translation>Impresión polas dúas caras</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>non empregar</translation>
+ </message>
+ <message>
+ <source>Long side</source>
+ <translation>Lado longo</translation>
+ </message>
+ <message>
+ <source>Short side</source>
+ <translation>Lado curto</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>Formulario</translation>
+ </message>
+ <message>
+ <source>Printer</source>
+ <translation>Impresora</translation>
+ </message>
+ <message>
+ <source>&amp;Name:</source>
+ <translation>&amp;Nome:</translation>
+ </message>
+ <message>
+ <source>P&amp;roperties</source>
+ <translation>P&amp;ropriedades</translation>
+ </message>
+ <message>
+ <source>Location:</source>
+ <translation>Localización:</translation>
+ </message>
+ <message>
+ <source>Preview</source>
+ <translation>Vista previa</translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation>Tipo:</translation>
+ </message>
+ <message>
+ <source>Output &amp;file:</source>
+ <translation>Ficheiro de &amp;saída:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>QProcess</name>
+ <message>
+ <source>Error reading from process</source>
+ <translation>Aconteceu un erro ao ler do proceso</translation>
+ </message>
+ <message>
+ <source>Error writing to process</source>
+ <translation>Aconteceu un erro ao escribir no proceso</translation>
+ </message>
+ <message>
+ <source>Process crashed</source>
+ <translation>O proceso pechouse inesperadamente</translation>
+ </message>
+ <message>
+ <source>No program defined</source>
+ <translation>Non definiu programa ningún</translation>
+ </message>
+ <message>
+ <source>Could not open input redirection for reading</source>
+ <translation>Non foi posíbel abrir a redirección da entrada para lectura</translation>
+ </message>
+ <message>
+ <source>Could not open output redirection for writing</source>
+ <translation>Non foi posíbel abrir a redirección da entrada para escribir</translation>
+ </message>
+ <message>
+ <source>Resource error (fork failure): %1</source>
+ <translation>Erro do recurso (fallou o fork): %1</translation>
+ </message>
+ <message>
+ <source>Process operation timed out</source>
+ <translation>A operación de procesamento esgotou o tempo-límite</translation>
+ </message>
+ <message>
+ <source>Process failed to start: %1</source>
+ <translation>Fallou a carga do proceso: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+</context>
+<context>
+ <name>QRegExp</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>non aconteceu ningún erro</translation>
+ </message>
+ <message>
+ <source>disabled feature used</source>
+ <translation>úsase unha funcionalidade desactivada</translation>
+ </message>
+ <message>
+ <source>bad char class syntax</source>
+ <translation>sintaxe incorrecta para a clase char</translation>
+ </message>
+ <message>
+ <source>bad lookahead syntax</source>
+ <translation>sintaxe incorrecta para a procura cara diante</translation>
+ </message>
+ <message>
+ <source>bad repetition syntax</source>
+ <translation>sintaxe incorrecta para a repetición</translation>
+ </message>
+ <message>
+ <source>invalid octal value</source>
+ <translation>valor octal non válido</translation>
+ </message>
+ <message>
+ <source>missing left delim</source>
+ <translation>falta o delimitador esquerdo</translation>
+ </message>
+ <message>
+ <source>unexpected end</source>
+ <translation>final inesperado</translation>
+ </message>
+ <message>
+ <source>met internal limit</source>
+ <translation>acadouse un límite interno</translation>
+ </message>
+ <message>
+ <source>invalid interval</source>
+ <translation>intervalo non válido</translation>
+ </message>
+ <message>
+ <source>invalid category</source>
+ <translation>categoría non válida</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Driver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Result</name>
+ <message>
+ <source>Unable to fetch results</source>
+ <translation>Non foi posíbel acadar os resultados</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>Aconteceu un erro ao abrir a base de datos</translation>
+ </message>
+ <message>
+ <source>Error closing database</source>
+ <translation>Aconteceu un erro ao pechar a base de datos</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>Non foi posíbel comezar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>Non foi posíbel entregar a transacción</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>Non foi posíbel anular a transacción</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteResult</name>
+ <message>
+ <source>Unable to fetch row</source>
+ <translation>Non foi posíbel acadar a fila</translation>
+ </message>
+ <message>
+ <source>No query</source>
+ <translation>Non hai consulta</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>Non foi posíbel executar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>Non foi posíbel reiniciar a sentenza</translation>
+ </message>
+ <message>
+ <source>Unable to bind parameters</source>
+ <translation>Non foi posíbel asociar os parámetros</translation>
+ </message>
+ <message>
+ <source>Parameter count mismatch</source>
+ <translation>O número de parámetros non coincide</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsModel</name>
+ <message>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lugar</translation>
+ </message>
+ <message>
+ <source>Condition</source>
+ <translation>Condición</translation>
+ </message>
+ <message>
+ <source>Ignore-count</source>
+ <translation>Ignorar a cantidade</translation>
+ </message>
+ <message>
+ <source>Single-shot</source>
+ <translation>Acción única</translation>
+ </message>
+ <message>
+ <source>Hit-count</source>
+ <translation>Cantidade de alcances</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsWidget</name>
+ <message>
+ <source>New</source>
+ <translation>Novo</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptNewBreakpointWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebugger</name>
+ <message>
+ <source>Go to Line</source>
+ <translation>Ir para a liña</translation>
+ </message>
+ <message>
+ <source>Line:</source>
+ <translation>Liña:</translation>
+ </message>
+ <message>
+ <source>Interrupt</source>
+ <translation>Interromper</translation>
+ </message>
+ <message>
+ <source>Shift+F5</source>
+ <translation>Maiús.+F5</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>F5</source>
+ <translation>F5</translation>
+ </message>
+ <message>
+ <source>Step Into</source>
+ <translation>Entrar</translation>
+ </message>
+ <message>
+ <source>F11</source>
+ <translation>F11</translation>
+ </message>
+ <message>
+ <source>Step Over</source>
+ <translation>Pasar por riba</translation>
+ </message>
+ <message>
+ <source>F10</source>
+ <translation>F10</translation>
+ </message>
+ <message>
+ <source>Step Out</source>
+ <translation>Saír</translation>
+ </message>
+ <message>
+ <source>Shift+F11</source>
+ <translation>Maiús.+F11</translation>
+ </message>
+ <message>
+ <source>Run to Cursor</source>
+ <translation>Executar até o cursor</translation>
+ </message>
+ <message>
+ <source>Ctrl+F10</source>
+ <translation>Ctrl+F10</translation>
+ </message>
+ <message>
+ <source>Run to New Script</source>
+ <translation>Executar até o novo script</translation>
+ </message>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>Conmutar o punto de parada</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation>F9</translation>
+ </message>
+ <message>
+ <source>Clear Debug Output</source>
+ <translation>Limpar a saída de depuración</translation>
+ </message>
+ <message>
+ <source>Clear Error Log</source>
+ <translation>Limpar a saída de erros</translation>
+ </message>
+ <message>
+ <source>Clear Console</source>
+ <translation>Limpar a consola</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Script...</source>
+ <translation>Procurar no &amp;script...</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>Procurar o &amp;seguinte</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <source>Find &amp;Previous</source>
+ <translation>Procurar o &amp;anterior</translation>
+ </message>
+ <message>
+ <source>Shift+F3</source>
+ <translation>Maiúsc.+F3</translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translation>Ctrl+G</translation>
+ </message>
+ <message>
+ <source>Debug</source>
+ <translation>Depurar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerCodeFinderWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>Anterior</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>Seguinte</translation>
+ </message>
+ <message>
+ <source>Case Sensitive</source>
+ <translation>Distinguir as maiúsculas</translation>
+ </message>
+ <message>
+ <source>Whole words</source>
+ <translation>Palabras completas</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;A procura retornou</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerLocalsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>Valor</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerStackModel</name>
+ <message>
+ <source>Level</source>
+ <translation>Nivel</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Lugar</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEdit</name>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>Conmutar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Disable Breakpoint</source>
+ <translation>Desactivar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Enable Breakpoint</source>
+ <translation>Activar o punto de parada</translation>
+ </message>
+ <message>
+ <source>Breakpoint Condition:</source>
+ <translation>Condición do punto de parada:</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEngineDebugger</name>
+ <message>
+ <source>Loaded Scripts</source>
+ <translation>Scripts cargados</translation>
+ </message>
+ <message>
+ <source>Breakpoints</source>
+ <translation>Puntos de parada</translation>
+ </message>
+ <message>
+ <source>Stack</source>
+ <translation>Pila</translation>
+ </message>
+ <message>
+ <source>Locals</source>
+ <translation>Locais</translation>
+ </message>
+ <message>
+ <source>Console</source>
+ <translation>Consola</translation>
+ </message>
+ <message>
+ <source>Debug Output</source>
+ <translation>Saída de depuración</translation>
+ </message>
+ <message>
+ <source>Error Log</source>
+ <translation>Rexisto de erros</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>Procurar</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>Qt Script Debugger</source>
+ <translation>Depurador de Qt Script</translation>
+ </message>
+</context>
+<context>
+ <name>QSharedMemory</name>
+ <message>
+ <source>%1: unable to set key on lock</source>
+ <translation>%1: non foi posíbel modificar a tecla por bloqueo</translation>
+ </message>
+ <message>
+ <source>%1: create size is less then 0</source>
+ <translation>%1: o tamaño a crear é menor que 0</translation>
+ </message>
+ <message>
+ <source>%1: unable to lock</source>
+ <translation>%1: non foi posíbel bloquear</translation>
+ </message>
+ <message>
+ <source>%1: unable to unlock</source>
+ <translation>%1: non foi posíbel desbloquear</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: xa existe</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exists</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: invalid size</source>
+ <translation>%1: tamaño non válido</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: esgotou os recursos</translation>
+ </message>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: negouse o permiso</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: erro descoñecido %2</translation>
+ </message>
+ <message>
+ <source>%1: key error</source>
+ <translation>%1: erro de chave</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <translation>%1: non foi posíbel crear a chave</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exist</source>
+ <translation>%1: non existe</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <translation>%1: a chave está baleira</translation>
+ </message>
+ <message>
+ <source>%1: UNIX key file doesn&apos;t exist</source>
+ <translation>%1: non existe o ficheiro de chave de UNIX</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <translation>%1: fallou ftok</translation>
+ </message>
+ <message>
+ <source>%1: system-imposed size restrictions</source>
+ <translation>%1: restricións de tamaño impostas polo sistema</translation>
+ </message>
+ <message>
+ <source>%1: not attached</source>
+ <translation>%1: non adxuntado</translation>
+ </message>
+ <message>
+ <source>%1: size query failed</source>
+ <translation>%1: fallou o tamaño da consulta</translation>
+ </message>
+</context>
+<context>
+ <name>QShortcut</name>
+ <message>
+ <source>Space</source>
+ <extracomment>This and all following &quot;incomprehensible&quot; strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment>
+ <translation>Espazo</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Tab</source>
+ <translation>Tab</translation>
+ </message>
+ <message>
+ <source>Backtab</source>
+ <translation>Tab atrás</translation>
+ </message>
+ <message>
+ <source>Backspace</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Return</source>
+ <translation>Intro</translation>
+ </message>
+ <message>
+ <source>Enter</source>
+ <translation>Intro</translation>
+ </message>
+ <message>
+ <source>Ins</source>
+ <translation>Ins</translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translation>Supr</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Imprimir</translation>
+ </message>
+ <message>
+ <source>SysReq</source>
+ <translation>Pet.Sis</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>Inicio</translation>
+ </message>
+ <message>
+ <source>End</source>
+ <translation>Fin</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation>Esquerda</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>Subir</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation>Dereita</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>Baixar</translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translation>RePáx</translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translation>AvPáx</translation>
+ </message>
+ <message>
+ <source>CapsLock</source>
+ <translation>Bloq Maiús</translation>
+ </message>
+ <message>
+ <source>NumLock</source>
+ <translation>Bloq. Num</translation>
+ </message>
+ <message>
+ <source>ScrollLock</source>
+ <translation>Bloq Despr</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>Menú</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Deter</translation>
+ </message>
+ <message>
+ <source>Refresh</source>
+ <translation>Anovar</translation>
+ </message>
+ <message>
+ <source>Volume Down</source>
+ <translation>Baixar o volume</translation>
+ </message>
+ <message>
+ <source>Volume Mute</source>
+ <translation>Silenciar</translation>
+ </message>
+ <message>
+ <source>Volume Up</source>
+ <translation>Subir o volume</translation>
+ </message>
+ <message>
+ <source>Bass Boost</source>
+ <translation>Potenciador de graves</translation>
+ </message>
+ <message>
+ <source>Bass Up</source>
+ <translation>Subir os graves</translation>
+ </message>
+ <message>
+ <source>Bass Down</source>
+ <translation>Baixar os graves</translation>
+ </message>
+ <message>
+ <source>Treble Up</source>
+ <translation>Treble Subir</translation>
+ </message>
+ <message>
+ <source>Treble Down</source>
+ <translation>Treble Baixar</translation>
+ </message>
+ <message>
+ <source>Media Play</source>
+ <translation>Multimedia Reproducir</translation>
+ </message>
+ <message>
+ <source>Media Stop</source>
+ <translation>Multimedia Parar</translation>
+ </message>
+ <message>
+ <source>Media Previous</source>
+ <translation>Multimedia Anterior</translation>
+ </message>
+ <message>
+ <source>Media Next</source>
+ <translation>Multimedia Seguinte</translation>
+ </message>
+ <message>
+ <source>Media Record</source>
+ <translation>Multimedia Gravar</translation>
+ </message>
+ <message>
+ <source>Media Pause</source>
+ <extracomment>Media player pause button</extracomment>
+ <translation>Multimedia Pausa</translation>
+ </message>
+ <message>
+ <source>Toggle Media Play/Pause</source>
+ <extracomment>Media player button to toggle between playing and paused</extracomment>
+ <translation>Multimedia Reproducir/Pausar</translation>
+ </message>
+ <message>
+ <source>Home Page</source>
+ <translation>Páxina de inicio</translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translation>Favoritos</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>Procurar</translation>
+ </message>
+ <message>
+ <source>Standby</source>
+ <translation>Espera</translation>
+ </message>
+ <message>
+ <source>Open URL</source>
+ <translation>Abrir un URL</translation>
+ </message>
+ <message>
+ <source>Launch Mail</source>
+ <translation>Abrir o correo</translation>
+ </message>
+ <message>
+ <source>Launch Media</source>
+ <translation>Lanzar Multimedia</translation>
+ </message>
+ <message>
+ <source>Launch (0)</source>
+ <translation>Lanzar (0)</translation>
+ </message>
+ <message>
+ <source>Launch (1)</source>
+ <translation>Lanzar (1)</translation>
+ </message>
+ <message>
+ <source>Launch (2)</source>
+ <translation>Lanzar (2)</translation>
+ </message>
+ <message>
+ <source>Launch (3)</source>
+ <translation>Lanzar (3)</translation>
+ </message>
+ <message>
+ <source>Launch (4)</source>
+ <translation>Lanzar (4)</translation>
+ </message>
+ <message>
+ <source>Launch (5)</source>
+ <translation>Lanzar (5)</translation>
+ </message>
+ <message>
+ <source>Launch (6)</source>
+ <translation>Lanzar (6)</translation>
+ </message>
+ <message>
+ <source>Launch (7)</source>
+ <translation>Lanzar (7)</translation>
+ </message>
+ <message>
+ <source>Launch (8)</source>
+ <translation>Lanzar (8)</translation>
+ </message>
+ <message>
+ <source>Launch (9)</source>
+ <translation>Lanzar (9)</translation>
+ </message>
+ <message>
+ <source>Launch (A)</source>
+ <translation>Lanzar (A)</translation>
+ </message>
+ <message>
+ <source>Launch (B)</source>
+ <translation>Lanzar (B)</translation>
+ </message>
+ <message>
+ <source>Launch (C)</source>
+ <translation>Lanzar (C)</translation>
+ </message>
+ <message>
+ <source>Launch (D)</source>
+ <translation>Lanzar (D)</translation>
+ </message>
+ <message>
+ <source>Launch (E)</source>
+ <translation>Lanzar (E)</translation>
+ </message>
+ <message>
+ <source>Launch (F)</source>
+ <translation>Lanzar (F)</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Up</source>
+ <translation>Subir o brillo do monitor</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Down</source>
+ <translation>Baixar o brillo do monitor</translation>
+ </message>
+ <message>
+ <source>Keyboard Light On/Off</source>
+ <translation>Acender/Apagar a luz do teclado</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Up</source>
+ <translation>Subir o brillo do teclado</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Down</source>
+ <translation>Baixar o brillo do teclado</translation>
+ </message>
+ <message>
+ <source>Power Off</source>
+ <translation>Apagar</translation>
+ </message>
+ <message>
+ <source>Wake Up</source>
+ <translation>Espertar</translation>
+ </message>
+ <message>
+ <source>Eject</source>
+ <translation>Expulsar</translation>
+ </message>
+ <message>
+ <source>Screensaver</source>
+ <translation>Protector de pantalla</translation>
+ </message>
+ <message>
+ <source>WWW</source>
+ <translation>WWW</translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translation>Durmir</translation>
+ </message>
+ <message>
+ <source>LightBulb</source>
+ <translation>Punto de luz</translation>
+ </message>
+ <message>
+ <source>Shop</source>
+ <translation>Mercar</translation>
+ </message>
+ <message>
+ <source>History</source>
+ <translation>Historial</translation>
+ </message>
+ <message>
+ <source>Add Favorite</source>
+ <translation>Engadir aos favoritos</translation>
+ </message>
+ <message>
+ <source>Hot Links</source>
+ <translation>Ligazóns quentes</translation>
+ </message>
+ <message>
+ <source>Adjust Brightness</source>
+ <translation>Axustar o brillo</translation>
+ </message>
+ <message>
+ <source>Finance</source>
+ <translation>Finanzas</translation>
+ </message>
+ <message>
+ <source>Community</source>
+ <translation>Comunidade</translation>
+ </message>
+ <message>
+ <source>Audio Rewind</source>
+ <translation>Rebobinar o son</translation>
+ </message>
+ <message>
+ <source>Back Forward</source>
+ <translation>Voltar atrás</translation>
+ </message>
+ <message>
+ <source>Application Left</source>
+ <translation>Programa da esquerda</translation>
+ </message>
+ <message>
+ <source>Application Right</source>
+ <translation>Programa da dereita</translation>
+ </message>
+ <message>
+ <source>Book</source>
+ <translation>Libro</translation>
+ </message>
+ <message>
+ <source>CD</source>
+ <translation>CD</translation>
+ </message>
+ <message>
+ <source>Calculator</source>
+ <translation>Calculadora</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Limpar</translation>
+ </message>
+ <message>
+ <source>Clear Grab</source>
+ <translation>Limpar o collido</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Copiar</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Cortar</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation>Pantalla</translation>
+ </message>
+ <message>
+ <source>DOS</source>
+ <translation>DOS</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translation>Documentos</translation>
+ </message>
+ <message>
+ <source>Spreadsheet</source>
+ <translation>Folla de cálculo</translation>
+ </message>
+ <message>
+ <source>Browser</source>
+ <translation>Navegador</translation>
+ </message>
+ <message>
+ <source>Game</source>
+ <translation>Xogo</translation>
+ </message>
+ <message>
+ <source>Go</source>
+ <translation>Ir para</translation>
+ </message>
+ <message>
+ <source>iTouch</source>
+ <translation>iTouch</translation>
+ </message>
+ <message>
+ <source>Logoff</source>
+ <translation>Saír</translation>
+ </message>
+ <message>
+ <source>Market</source>
+ <translation>Tenda</translation>
+ </message>
+ <message>
+ <source>Meeting</source>
+ <translation>Reunión</translation>
+ </message>
+ <message>
+ <source>Keyboard Menu</source>
+ <translation>Menú do teclado</translation>
+ </message>
+ <message>
+ <source>Menu PB</source>
+ <translation>Menú PB</translation>
+ </message>
+ <message>
+ <source>My Sites</source>
+ <translation>Os meus sitios</translation>
+ </message>
+ <message>
+ <source>News</source>
+ <translation>Novas</translation>
+ </message>
+ <message>
+ <source>Home Office</source>
+ <translation>Casa oficina</translation>
+ </message>
+ <message>
+ <source>Option</source>
+ <translation>Opción</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Apegar</translation>
+ </message>
+ <message>
+ <source>Phone</source>
+ <translation>Teléfono</translation>
+ </message>
+ <message>
+ <source>Reply</source>
+ <translation>Responder</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation>Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Rotate Windows</source>
+ <translation>Xirar as fiestras</translation>
+ </message>
+ <message>
+ <source>Rotation PB</source>
+ <translation>Xiro PB</translation>
+ </message>
+ <message>
+ <source>Rotation KB</source>
+ <translation>Xiro KB</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>Gardar</translation>
+ </message>
+ <message>
+ <source>Send</source>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Spellchecker</source>
+ <translation>Corrector ortográfico</translation>
+ </message>
+ <message>
+ <source>Split Screen</source>
+ <translation>Dividir a pantalla</translation>
+ </message>
+ <message>
+ <source>Support</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>Task Panel</source>
+ <translation>Panel de tarefas</translation>
+ </message>
+ <message>
+ <source>Terminal</source>
+ <translation>Terminal</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>Utensilios</translation>
+ </message>
+ <message>
+ <source>Travel</source>
+ <translation>Viaxes</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>Vídeo</translation>
+ </message>
+ <message>
+ <source>Word Processor</source>
+ <translation>Procesador de textos</translation>
+ </message>
+ <message>
+ <source>XFer</source>
+ <translation>XFer</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation>Ampliar</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>Reducir</translation>
+ </message>
+ <message>
+ <source>Away</source>
+ <translation>Ausente</translation>
+ </message>
+ <message>
+ <source>Messenger</source>
+ <translation>Mensaxería</translation>
+ </message>
+ <message>
+ <source>WebCam</source>
+ <translation>Cámara web</translation>
+ </message>
+ <message>
+ <source>Mail Forward</source>
+ <translation>Reenvío de correo</translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translation>Imaxes</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>Música</translation>
+ </message>
+ <message>
+ <source>Battery</source>
+ <translation>Batería</translation>
+ </message>
+ <message>
+ <source>Bluetooth</source>
+ <translation>Bluetooth</translation>
+ </message>
+ <message>
+ <source>Wireless</source>
+ <translation>Sen fíos</translation>
+ </message>
+ <message>
+ <source>Ultra Wide Band</source>
+ <translation>Banda moi larga</translation>
+ </message>
+ <message>
+ <source>Audio Forward</source>
+ <translation>Avanzar o son</translation>
+ </message>
+ <message>
+ <source>Audio Repeat</source>
+ <translation>Repetir o son</translation>
+ </message>
+ <message>
+ <source>Audio Random Play</source>
+ <translation>Reprodución aleatoria de son</translation>
+ </message>
+ <message>
+ <source>Subtitle</source>
+ <translation>Subtítulo</translation>
+ </message>
+ <message>
+ <source>Audio Cycle Track</source>
+ <translation>Repetir as pistas de son</translation>
+ </message>
+ <message>
+ <source>Time</source>
+ <translation>Tempo</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>Escoller</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Vista</translation>
+ </message>
+ <message>
+ <source>Top Menu</source>
+ <translation>Menú na parte de riba</translation>
+ </message>
+ <message>
+ <source>Suspend</source>
+ <translation>Suspender</translation>
+ </message>
+ <message>
+ <source>Hibernate</source>
+ <translation>Hibernar</translation>
+ </message>
+ <message>
+ <source>Print Screen</source>
+ <translation>Impr Pant</translation>
+ </message>
+ <message>
+ <source>Page Up</source>
+ <translation>Páxina Arriba</translation>
+ </message>
+ <message>
+ <source>Page Down</source>
+ <translation>Página Abaixo</translation>
+ </message>
+ <message>
+ <source>Caps Lock</source>
+ <translation>Bloq Maius</translation>
+ </message>
+ <message>
+ <source>Num Lock</source>
+ <translation>Bloq Num</translation>
+ </message>
+ <message>
+ <source>Number Lock</source>
+ <translation>Bloqueo numérico</translation>
+ </message>
+ <message>
+ <source>Scroll Lock</source>
+ <translation>Bloqueo de desprazamento</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Escape</source>
+ <translation>Escape</translation>
+ </message>
+ <message>
+ <source>System Request</source>
+ <translation>Pedido ao sistema</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Si</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <source>Context1</source>
+ <translation>Contexto1</translation>
+ </message>
+ <message>
+ <source>Context2</source>
+ <translation>Contexto2</translation>
+ </message>
+ <message>
+ <source>Context3</source>
+ <translation>Contexto3</translation>
+ </message>
+ <message>
+ <source>Context4</source>
+ <translation>Contexto4</translation>
+ </message>
+ <message>
+ <source>Call</source>
+ <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment>
+ <translation>Chamar</translation>
+ </message>
+ <message>
+ <source>Hangup</source>
+ <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment>
+ <translation>Colgar</translation>
+ </message>
+ <message>
+ <source>Toggle Call/Hangup</source>
+ <extracomment>Button that will hang up if we&apos;re in call, or make a call if we&apos;re not.</extracomment>
+ <translation>Comutar chamar/colgar</translation>
+ </message>
+ <message>
+ <source>Flip</source>
+ <translation>Inverter</translation>
+ </message>
+ <message>
+ <source>Voice Dial</source>
+ <extracomment>Button to trigger voice dialling</extracomment>
+ <translation>Chamar mediante voz</translation>
+ </message>
+ <message>
+ <source>Last Number Redial</source>
+ <extracomment>Button to redial the last number called</extracomment>
+ <translation>Rechamar</translation>
+ </message>
+ <message>
+ <source>Camera Shutter</source>
+ <extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
+ <translation>Disparador da cámara</translation>
+ </message>
+ <message>
+ <source>Camera Focus</source>
+ <extracomment>Button to focus the camera</extracomment>
+ <translation>Focalizador da cámara</translation>
+ </message>
+ <message>
+ <source>Kanji</source>
+ <translation>Kanji</translation>
+ </message>
+ <message>
+ <source>Muhenkan</source>
+ <translation>Muhenkan</translation>
+ </message>
+ <message>
+ <source>Henkan</source>
+ <translation>Henkan</translation>
+ </message>
+ <message>
+ <source>Romaji</source>
+ <translation>Romaji</translation>
+ </message>
+ <message>
+ <source>Hiragana</source>
+ <translation>Hiragana</translation>
+ </message>
+ <message>
+ <source>Katakana</source>
+ <translation>Katakana</translation>
+ </message>
+ <message>
+ <source>Hiragana Katakana</source>
+ <translation>Hirgana Katakana</translation>
+ </message>
+ <message>
+ <source>Zenkaku</source>
+ <translation>Zenkaku</translation>
+ </message>
+ <message>
+ <source>Hankaku</source>
+ <translation>Hankaku</translation>
+ </message>
+ <message>
+ <source>Zenkaku Hankaku</source>
+ <translation>Zenkaku Hankaku</translation>
+ </message>
+ <message>
+ <source>Touroku</source>
+ <translation>Touroku</translation>
+ </message>
+ <message>
+ <source>Massyo</source>
+ <translation>Massyo</translation>
+ </message>
+ <message>
+ <source>Kana Lock</source>
+ <translation>Bloquear os Kana</translation>
+ </message>
+ <message>
+ <source>Kana Shift</source>
+ <translation>Cambiar a Kana</translation>
+ </message>
+ <message>
+ <source>Eisu Shift</source>
+ <translation>Cambiar a Eisu</translation>
+ </message>
+ <message>
+ <source>Eisu toggle</source>
+ <translation>Conmutar Eisu</translation>
+ </message>
+ <message>
+ <source>Code input</source>
+ <translation>Entrada de código</translation>
+ </message>
+ <message>
+ <source>Multiple Candidate</source>
+ <translation>Candidatos múltiplos</translation>
+ </message>
+ <message>
+ <source>Previous Candidate</source>
+ <translation>Candidato anterior</translation>
+ </message>
+ <message>
+ <source>Hangul</source>
+ <translation>Hangul</translation>
+ </message>
+ <message>
+ <source>Hangul Start</source>
+ <translation>Hangul inicio</translation>
+ </message>
+ <message>
+ <source>Hangul End</source>
+ <translation>Hangul fin</translation>
+ </message>
+ <message>
+ <source>Hangul Hanja</source>
+ <translation>Hangul Hanja</translation>
+ </message>
+ <message>
+ <source>Hangul Jamo</source>
+ <translation>Hangul Jamo</translation>
+ </message>
+ <message>
+ <source>Hangul Romaja</source>
+ <translation>Hangul Romaja</translation>
+ </message>
+ <message>
+ <source>Hangul Jeonja</source>
+ <translation>Hanjul Jeonja</translation>
+ </message>
+ <message>
+ <source>Hangul Banja</source>
+ <translation>Hangul Banja</translation>
+ </message>
+ <message>
+ <source>Hangul PreHanja</source>
+ <translation>Hangul PreHanja</translation>
+ </message>
+ <message>
+ <source>Hangul PostHanja</source>
+ <translation>Halgul PostHanja</translation>
+ </message>
+ <message>
+ <source>Hangul Special</source>
+ <translation>Hangul especial</translation>
+ </message>
+ <message>
+ <source>Ctrl</source>
+ <translation>Ctrl</translation>
+ </message>
+ <message>
+ <source>Shift</source>
+ <translation>Maiúsc</translation>
+ </message>
+ <message>
+ <source>Alt</source>
+ <translation>Alt</translation>
+ </message>
+ <message>
+ <source>Meta</source>
+ <translation>Meta</translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <source>F%1</source>
+ <translation>F%1</translation>
+ </message>
+</context>
+<context>
+ <name>QSoftKeyManager</name>
+ <message>
+ <source>Ok</source>
+ <translation>Aceptar</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>Escoller</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>Opcións</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation>Saír</translation>
+ </message>
+</context>
+<context>
+ <name>QSql</name>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Delete this record?</source>
+ <translation>Desexa borrar este rexistro?</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Si</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Inserir</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>Actualizar</translation>
+ </message>
+ <message>
+ <source>Save edits?</source>
+ <translation>Desexa gardar as modificacións?</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Confirm</source>
+ <translation>Confirmar</translation>
+ </message>
+ <message>
+ <source>Cancel your edits?</source>
+ <translation>Desexa cancelar as súas modificacións?</translation>
+ </message>
+</context>
+<context>
+ <name>QSslSocket</name>
+ <message>
+ <source>No error</source>
+ <translation>Sen erros</translation>
+ </message>
+ <message>
+ <source>The issuer certificate could not be found</source>
+ <translation>Non se atopou o certificado do expendedor</translation>
+ </message>
+ <message>
+ <source>The certificate signature could not be decrypted</source>
+ <translation>Non foi posíbel descifrar a sinatura do certificado</translation>
+ </message>
+ <message>
+ <source>The public key in the certificate could not be read</source>
+ <translation>Non foi posíbel ler a chave pública no certificado</translation>
+ </message>
+ <message>
+ <source>The signature of the certificate is invalid</source>
+ <translation>A sinatura do certificado non é válida</translation>
+ </message>
+ <message>
+ <source>The certificate is not yet valid</source>
+ <translation>O certificado aínda non é válido</translation>
+ </message>
+ <message>
+ <source>The certificate has expired</source>
+ <translation>O certificado caducou</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notBefore field contains an invalid time</source>
+ <translation>O campo notBefore do certificado contén unha data non válida</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notAfter field contains an invalid time</source>
+ <translation>O campo notAfter do certificado contén unha data non válida</translation>
+ </message>
+ <message>
+ <source>The certificate is self-signed, and untrusted</source>
+ <translation>O certificado está auto-asinado e non é fiábel</translation>
+ </message>
+ <message>
+ <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+ <translation>O certificado raíz da cadea de certificados está auto-asinado e non é fiábel</translation>
+ </message>
+ <message>
+ <source>The issuer certificate of a locally looked up certificate could not be found</source>
+ <translation>Non foi posíbel atopar o certificado emisor dun certificado que se procurou localmente</translation>
+ </message>
+ <message>
+ <source>No certificates could be verified</source>
+ <translation>Non foi posíbel verificar ningún certificado</translation>
+ </message>
+ <message>
+ <source>One of the CA certificates is invalid</source>
+ <translation>Un dos certificados da CA non é válido</translation>
+ </message>
+ <message>
+ <source>The basicConstraints path length parameter has been exceeded</source>
+ <translation>Superouse a lonxitude da rota do parámetro basicConstraints</translation>
+ </message>
+ <message>
+ <source>The supplied certificate is unsuitable for this purpose</source>
+ <translation>O certificado fornecido non é apropriada para este propósito</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is not trusted for this purpose</source>
+ <translation>A autoridade de certificación raíz do certificado non é de confianza para este propósito</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is marked to reject the specified purpose</source>
+ <translation>A autoridade de certificación raíz do certificado está instruída para rexeitar o propósito especificado</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+ <translation>O certificado emisor do candidado actual rexeitouse porque o nome do asunto non coincide co do emisor do certificado actual</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
+ <translation>O certificado emisor do candidado actual rexeitouse porque o nome do emisor e o número de serie están presentes pero non coinciden co identificador da autoridade da chave do certificado actual</translation>
+ </message>
+ <message>
+ <source>The peer did not present any certificate</source>
+ <translation>O parceiro non presentou certificado ningún</translation>
+ </message>
+ <message>
+ <source>The host name did not match any of the valid hosts for this certificate</source>
+ <translation>O nome do servidor non coincide con ningún dos válidos para este certificado</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+ <message>
+ <source>Error creating SSL context (%1)</source>
+ <translation>Aconteceu un erro ao crear o contexto SSL (%1)</translation>
+ </message>
+ <message>
+ <source>Invalid or empty cipher list (%1)</source>
+ <translation>A lista de cifras ou non é válida ou está baleira (%1)</translation>
+ </message>
+ <message>
+ <source>Cannot provide a certificate with no key, %1</source>
+ <translation>Non é posíbel fornecer un certificado sen chave, %1</translation>
+ </message>
+ <message>
+ <source>Error loading local certificate, %1</source>
+ <translation>Aconteceu un erro ao cargar o certificado local, %1</translation>
+ </message>
+ <message>
+ <source>Error loading private key, %1</source>
+ <translation>Aconteceu un erro ao cargar a chave privada, %1</translation>
+ </message>
+ <message>
+ <source>Private key does not certify public key, %1</source>
+ <translation>A chave privada non certifica a chave pública, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session, %1</source>
+ <translation>Aconteceu un erro ao crear a sesión SSL, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session: %1</source>
+ <translation>Aconteceu un erro ao crear a sesión SSL: %1</translation>
+ </message>
+ <message>
+ <source>Unable to write data: %1</source>
+ <translation>Non foi posíbel escribir os datos: %1</translation>
+ </message>
+ <message>
+ <source>Unable to decrypt data: %1</source>
+ <translation>Non foi posíbel descifrar os datos: %1</translation>
+ </message>
+ <message>
+ <source>Error while reading: %1</source>
+ <translation>Aconteceu un erro ao ler: %1</translation>
+ </message>
+ <message>
+ <source>Error during SSL handshake: %1</source>
+ <translation>Aconteceu un erro durante a negociación SSL: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QStateMachine</name>
+ <message>
+ <source>Missing initial state in compound state &apos;%1&apos;</source>
+ <translation>Falta o estado inicial no estado composto «%1»</translation>
+ </message>
+ <message>
+ <source>Missing default state in history state &apos;%1&apos;</source>
+ <translation>Falta o estado predeterminado no estado histórico «%1»</translation>
+ </message>
+ <message>
+ <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
+ <translation>Non hai antecesor común para o destino e orixe da transición desde o estado «%1»</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>Erro descoñecido</translation>
+ </message>
+</context>
+<context>
+ <name>QTDSDriver</name>
+ <message>
+ <source>Unable to open connection</source>
+ <translation>Non foi posíbel abrir a conexión</translation>
+ </message>
+ <message>
+ <source>Unable to use database</source>
+ <translation>Non foi posíbel empregar a base de datos</translation>
+ </message>
+</context>
+<context>
+ <name>QTcpServer</name>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>A operación no socket non está soportada</translation>
+ </message>
+</context>
+<context>
+ <name>QTextControl</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>&amp;Desfacer</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>&amp;Refacer</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>Cor&amp;tar</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Copiar</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>Copiar o &amp;enderezo da ligazón</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>A&amp;pegar</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Borrar</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>Escoller todo</translation>
+ </message>
+</context>
+<context>
+ <name>QUnicodeControlCharacterMenu</name>
+ <message>
+ <source>LRM Left-to-right mark</source>
+ <translation>LRM Marca de esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLM Right-to-left mark</source>
+ <translation>RLM Marca de dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>ZWJ Zero width joiner</source>
+ <translation>ZWJ Nexo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>ZWNJ Zero width non-joiner</source>
+ <translation>ZWNJ Non-nexo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>ZWSP Zero width space</source>
+ <translation>ZWSP Espazo de ancho nulo</translation>
+ </message>
+ <message>
+ <source>LRE Start of left-to-right embedding</source>
+ <translation>LRE Inicio de incrustación da esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLE Start of right-to-left embedding</source>
+ <translation>RLE Inicio de incrustación da dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>LRO Start of left-to-right override</source>
+ <translation>LRO Inicio de excepción de esquerda cara á dereita</translation>
+ </message>
+ <message>
+ <source>RLO Start of right-to-left override</source>
+ <translation>RLO Inicio de excepción de dereita cara á esquerda</translation>
+ </message>
+ <message>
+ <source>PDF Pop directional formatting</source>
+ <translation>PDF Sacar a formatación direccional</translation>
+ </message>
+ <message>
+ <source>Insert Unicode control character</source>
+ <translation>Inserir un carácter de control Unicode</translation>
+ </message>
+</context>
+<context>
+ <name>QUdpSocket</name>
+ <message>
+ <source>This platform does not support IPv6</source>
+ <translation>Esta plataforma non admite IPv6</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoGroup</name>
+ <message>
+ <source>Undo</source>
+ <translation>Desfacer</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Facer de novo</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoModel</name>
+ <message>
+ <source>&lt;empty&gt;</source>
+ <translation>&lt;baleiro&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoStack</name>
+ <message>
+ <source>Undo</source>
+ <translation>Desfacer</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>Facer de novo</translation>
+ </message>
+</context>
+<context>
+ <name>QWebFrame</name>
+ <message>
+ <source>Request cancelled</source>
+ <translation>Pedido cancelado</translation>
+ </message>
+ <message>
+ <source>Request blocked</source>
+ <translation>Pedido bloqueado</translation>
+ </message>
+ <message>
+ <source>Cannot show URL</source>
+ <translation>Non se pode mostrar o URL</translation>
+ </message>
+ <message>
+ <source>Frame load interrupted by policy change</source>
+ <translation>Interrompeuse a carga do marco por mor do troco de político</translation>
+ </message>
+ <message>
+ <source>Cannot show mimetype</source>
+ <translation>Non se pode mostrar o tipo mime</translation>
+ </message>
+ <message>
+ <source>File does not exist</source>
+ <translation>O ficheiro non existe</translation>
+ </message>
+</context>
+<context>
+ <name>QWebPage</name>
+ <message>
+ <source>Redirection limit reached</source>
+ <translation>Acadouse o límite de redireccións</translation>
+ </message>
+ <message>
+ <source>Bad HTTP request</source>
+ <translation>Pedido HTTP incorrecto</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n file(s)</source>
+ <comment>number of chosen file</comment>
+ <translation>
+ <numerusform>%n ficheiro</numerusform>
+ <numerusform>%n ficheiros</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>default label for Submit buttons in forms on web pages</comment>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
+ <translation>Enviar</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <comment>default label for Reset buttons in forms on web pages</comment>
+ <translation>Reiniciar</translation>
+ </message>
+ <message>
+ <source>This is a searchable index. Enter search keywords: </source>
+ <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
+ <translation>Este é un índice con capacidade de procura. Introduza as palabras chave da procura: </translation>
+ </message>
+ <message>
+ <source>Choose File</source>
+ <comment>title for file button used in HTML forms</comment>
+ <translation>Escoller un ficheiro</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <comment>text to display in file button used in HTML forms when no file is selected</comment>
+ <translation>Non escolleu ningún ficheiro</translation>
+ </message>
+ <message>
+ <source>Open in New Window</source>
+ <comment>Open in New Window context menu item</comment>
+ <translation>Abrir nunha fiestra nova</translation>
+ </message>
+ <message>
+ <source>Save Link...</source>
+ <comment>Download Linked File context menu item</comment>
+ <translation>Gardar o ligado...</translation>
+ </message>
+ <message>
+ <source>Copy Link</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>Copiar a ligazón</translation>
+ </message>
+ <message>
+ <source>Open Image</source>
+ <comment>Open Image in New Window context menu item</comment>
+ <translation>Abrir a imaxe</translation>
+ </message>
+ <message>
+ <source>Save Image</source>
+ <comment>Download Image context menu item</comment>
+ <translation>Gardar a imaxe</translation>
+ </message>
+ <message>
+ <source>Copy Image</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>Copiar a imaxe</translation>
+ </message>
+ <message>
+ <source>Open Frame</source>
+ <comment>Open Frame in New Window context menu item</comment>
+ <translation>Abrir o marco</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <comment>Copy context menu item</comment>
+ <translation>Copiar</translation>
+ </message>
+ <message>
+ <source>Go Back</source>
+ <comment>Back context menu item</comment>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>Go Forward</source>
+ <comment>Forward context menu item</comment>
+ <translation>Adiante</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <comment>Stop context menu item</comment>
+ <translation>Deter</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <comment>Reload context menu item</comment>
+ <translation>Cargar de novo</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <comment>Cut context menu item</comment>
+ <translation>Cortar</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <comment>Paste context menu item</comment>
+ <translation>Apegar</translation>
+ </message>
+ <message>
+ <source>No Guesses Found</source>
+ <comment>No Guesses Found context menu item</comment>
+ <translation>Non se acharon conxecturas</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Spelling context menu item</comment>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Add To Dictionary</source>
+ <comment>Learn Spelling context menu item</comment>
+ <translation>Engadir ao dicionario</translation>
+ </message>
+ <message>
+ <source>Search The Web</source>
+ <comment>Search The Web context menu item</comment>
+ <translation>Procurar na web</translation>
+ </message>
+ <message>
+ <source>Look Up In Dictionary</source>
+ <comment>Look Up in Dictionary context menu item</comment>
+ <translation>Procurar no dicionario</translation>
+ </message>
+ <message>
+ <source>Open Link</source>
+ <comment>Open Link context menu item</comment>
+ <translation>Abrir a ligazón</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Grammar context menu item</comment>
+ <translation>Ignorar</translation>
+ </message>
+ <message>
+ <source>Spelling</source>
+ <comment>Spelling and Grammar context sub-menu item</comment>
+ <translation>Ortografía</translation>
+ </message>
+ <message>
+ <source>Show Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>Mostrar a ortografía e a gramática</translation>
+ </message>
+ <message>
+ <source>Hide Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>Acochar a ortografía e a gramática</translation>
+ </message>
+ <message>
+ <source>Check Spelling</source>
+ <comment>Check spelling context menu item</comment>
+ <translation>Verificar a ortografía</translation>
+ </message>
+ <message>
+ <source>Check Spelling While Typing</source>
+ <comment>Check spelling while typing context menu item</comment>
+ <translation>Verificar a ortografía mentres se escribe</translation>
+ </message>
+ <message>
+ <source>Check Grammar With Spelling</source>
+ <comment>Check grammar with spelling context menu item</comment>
+ <translation>Verificar a gramática mentres se escribe</translation>
+ </message>
+ <message>
+ <source>Fonts</source>
+ <comment>Font context sub-menu item</comment>
+ <translation>Tipos de letra</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <comment>Bold context menu item</comment>
+ <translation>Negriña</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <comment>Italic context menu item</comment>
+ <translation>Cursiva</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <comment>Underline context menu item</comment>
+ <translation>Subliñado</translation>
+ </message>
+ <message>
+ <source>Outline</source>
+ <comment>Outline context menu item</comment>
+ <translation>Contorno</translation>
+ </message>
+ <message>
+ <source>Direction</source>
+ <comment>Writing direction context sub-menu item</comment>
+ <translation>Dirección</translation>
+ </message>
+ <message>
+ <source>Text Direction</source>
+ <comment>Text direction context sub-menu item</comment>
+ <translation>Dirección do texto</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <comment>Default writing direction context menu item</comment>
+ <translation>Predeterminada</translation>
+ </message>
+ <message>
+ <source>Left to Right</source>
+ <comment>Left to Right context menu item</comment>
+ <translation>Da esquerda á dereita</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <comment>Right to Left context menu item</comment>
+ <translation>Da dereita á esquerda</translation>
+ </message>
+ <message>
+ <source>Inspect</source>
+ <comment>Inspect Element context menu item</comment>
+ <translation>Inspeccionar</translation>
+ </message>
+ <message>
+ <source>No recent searches</source>
+ <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
+ <translation>Non se procurou nada</translation>
+ </message>
+ <message>
+ <source>Recent searches</source>
+ <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+ <translation>Procuras recentes</translation>
+ </message>
+ <message>
+ <source>Clear recent searches</source>
+ <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
+ <translation>Limpar as procuras recentes</translation>
+ </message>
+ <message>
+ <source>Missing Plug-in</source>
+ <comment>Label text to be used when a plug-in is missing</comment>
+ <translation>Falta a extensión</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown filesize FTP directory listing item</comment>
+ <translation>Descoñecido</translation>
+ </message>
+ <message>
+ <source>%1 (%2x%3 pixels)</source>
+ <comment>Title string for images</comment>
+ <translation>%1 (%2x%3 píxeles)</translation>
+ </message>
+ <message>
+ <source>Loading...</source>
+ <comment>Media controller status message when the media is loading</comment>
+ <translation>Estase a cargar...</translation>
+ </message>
+ <message>
+ <source>Live Broadcast</source>
+ <comment>Media controller status message when watching a live broadcast</comment>
+ <translation>Retransmisión ao vivo</translation>
+ </message>
+ <message>
+ <source>Audio Element</source>
+ <comment>Media controller element</comment>
+ <translation>Elemento de son</translation>
+ </message>
+ <message>
+ <source>Video Element</source>
+ <comment>Media controller element</comment>
+ <translation>Elemento de video</translation>
+ </message>
+ <message>
+ <source>Mute Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de silenciar</translation>
+ </message>
+ <message>
+ <source>Unmute Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de quitar o silencio</translation>
+ </message>
+ <message>
+ <source>Play Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de reproducir</translation>
+ </message>
+ <message>
+ <source>Pause Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de pausar</translation>
+ </message>
+ <message>
+ <source>Slider</source>
+ <comment>Media controller element</comment>
+ <translation>Barra deslizante</translation>
+ </message>
+ <message>
+ <source>Slider Thumb</source>
+ <comment>Media controller element</comment>
+ <translation>Barra deslizante con miniaturas</translation>
+ </message>
+ <message>
+ <source>Rewind Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de rebobinar</translation>
+ </message>
+ <message>
+ <source>Return to Real-time Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de voltar ao tempo-real</translation>
+ </message>
+ <message>
+ <source>Elapsed Time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo transcorrido</translation>
+ </message>
+ <message>
+ <source>Remaining Time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo a faltar</translation>
+ </message>
+ <message>
+ <source>Status Display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor do estado</translation>
+ </message>
+ <message>
+ <source>Fullscreen Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de pantalla completa</translation>
+ </message>
+ <message>
+ <source>Seek Forward Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de procura cara diante</translation>
+ </message>
+ <message>
+ <source>Seek Back Button</source>
+ <comment>Media controller element</comment>
+ <translation>Botón de procura cara atrás</translation>
+ </message>
+ <message>
+ <source>Audio element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor dos controles da reprodución do elemento de son e do estado</translation>
+ </message>
+ <message>
+ <source>Video element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>Visor dos controles da reprodución do elemento de imaxe e do estado</translation>
+ </message>
+ <message>
+ <source>Mute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>Silenciar as pistas de son</translation>
+ </message>
+ <message>
+ <source>Unmute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>Desilenciar as pistas de son</translation>
+ </message>
+ <message>
+ <source>Begin playback</source>
+ <comment>Media controller element</comment>
+ <translation>Comeza a reprodución</translation>
+ </message>
+ <message>
+ <source>Pause playback</source>
+ <comment>Media controller element</comment>
+ <translation>Pór a reprodución en pausa</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber</source>
+ <comment>Media controller element</comment>
+ <translation>Cursor do filme</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber thumb</source>
+ <comment>Media controller element</comment>
+ <translation>Minuatura do cursor de posición do filme</translation>
+ </message>
+ <message>
+ <source>Rewind movie</source>
+ <comment>Media controller element</comment>
+ <translation>Rebobinar o filme</translation>
+ </message>
+ <message>
+ <source>Return streaming movie to real-time</source>
+ <comment>Media controller element</comment>
+ <translation>Voltar a tempo-real o filme en retransmisión</translation>
+ </message>
+ <message>
+ <source>Current movie time</source>
+ <comment>Media controller element</comment>
+ <translation>Momento actual do filme</translation>
+ </message>
+ <message>
+ <source>Remaining movie time</source>
+ <comment>Media controller element</comment>
+ <translation>Tempo a faltar do filme</translation>
+ </message>
+ <message>
+ <source>Current movie status</source>
+ <comment>Media controller element</comment>
+ <translation>Estado actual do filme</translation>
+ </message>
+ <message>
+ <source>Play movie in full-screen mode</source>
+ <comment>Media controller element</comment>
+ <translation>Reproducir o filme no modo a pantalla completa</translation>
+ </message>
+ <message>
+ <source>Seek quickly back</source>
+ <comment>Media controller element</comment>
+ <translation>Procurar cara atrás rapidamente</translation>
+ </message>
+ <message>
+ <source>Seek quickly forward</source>
+ <comment>Media controller element</comment>
+ <translation>Procurar cara diante rapidamente</translation>
+ </message>
+ <message>
+ <source>Indefinite time</source>
+ <comment>Media time description</comment>
+ <translation>Duración indefinida</translation>
+ </message>
+ <message>
+ <source>%1 days %2 hours %3 minutes %4 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 días %2 horas %3 minutos %4 segundos</translation>
+ </message>
+ <message>
+ <source>%1 hours %2 minutes %3 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 horas %2 minutos %3 segundos</translation>
+ </message>
+ <message>
+ <source>%1 minutes %2 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 minutos %2 segundos</translation>
+ </message>
+ <message>
+ <source>%1 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1 segundos</translation>
+ </message>
+ <message>
+ <source>Scroll here</source>
+ <translation>Desprazar cara aquí</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>Borde esquerdo</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>Cume</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>Borde dereito</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>Fondo</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>Páxina á esquerda</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>Páxina en riba</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>Páxina á dereita</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>Páxina en baixo</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>Desprazar cara á esquerda</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>Desprazar cara arriba</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>Desprazar cara á dereita</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>Desprazar cara abaixo</translation>
+ </message>
+ <message>
+ <source>JavaScript Alert - %1</source>
+ <translation>Alerta de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Confirm - %1</source>
+ <translation>Confirmación de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Prompt - %1</source>
+ <translation>Pregunta de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Problem - %1</source>
+ <translation>Problema de JavaScript: %1</translation>
+ </message>
+ <message>
+ <source>The script on this page appears to have a problem. Do you want to stop the script?</source>
+ <translation>Parece que o script nesta páxina ten problemas. Desexa detelo?</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next character</source>
+ <translation>Mover o cursor ao seguinte carácter</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous character</source>
+ <translation>Mover o cursor ao anterior carácter</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next word</source>
+ <translation>Mover o cursor á seguinte palabra</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous word</source>
+ <translation>Mover o cursor á palabra anterior</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next line</source>
+ <translation>Mover o cursor á seguinte liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous line</source>
+ <translation>Mover o cursor á liña anterior</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the line</source>
+ <translation>Mover o cursor ao comezo da liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the line</source>
+ <translation>Mover o cursor ao final da liña</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the block</source>
+ <translation>Mover o cursor ao comezo do bloque</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the block</source>
+ <translation>Mover o cursor ao final do bloque</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the document</source>
+ <translation>Mover o cursor ao comezo do documento</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the document</source>
+ <translation>Mover o cursor ao final do documento</translation>
+ </message>
+ <message>
+ <source>Select all</source>
+ <translation>Escoller todo</translation>
+ </message>
+ <message>
+ <source>Select to the next character</source>
+ <translation>Escoller até o seguinte carácter</translation>
+ </message>
+ <message>
+ <source>Select to the previous character</source>
+ <translation>Escoller até o anterior carácter</translation>
+ </message>
+ <message>
+ <source>Select to the next word</source>
+ <translation>Escoller até a seguinte palabra</translation>
+ </message>
+ <message>
+ <source>Select to the previous word</source>
+ <translation>Escoller até a anterior palabra</translation>
+ </message>
+ <message>
+ <source>Select to the next line</source>
+ <translation>Escoller até a seguinte liña</translation>
+ </message>
+ <message>
+ <source>Select to the previous line</source>
+ <translation>Escoller até a liña anterior</translation>
+ </message>
+ <message>
+ <source>Select to the start of the line</source>
+ <translation>Escoller até o comezo da liña</translation>
+ </message>
+ <message>
+ <source>Select to the end of the line</source>
+ <translation>Escoller até o final da liña</translation>
+ </message>
+ <message>
+ <source>Select to the start of the block</source>
+ <translation>Escoller até o comezo do bloque</translation>
+ </message>
+ <message>
+ <source>Select to the end of the block</source>
+ <translation>Escoller até o final do bloque</translation>
+ </message>
+ <message>
+ <source>Select to the start of the document</source>
+ <translation>Escoller até o comezo do documento</translation>
+ </message>
+ <message>
+ <source>Select to the end of the document</source>
+ <translation>Escoller até o final do documento</translation>
+ </message>
+ <message>
+ <source>Delete to the start of the word</source>
+ <translation>Escoller até o comezo da palabra</translation>
+ </message>
+ <message>
+ <source>Delete to the end of the word</source>
+ <translation>Borrar até o final da palabra</translation>
+ </message>
+ <message>
+ <source>Insert a new paragraph</source>
+ <translation>Inserir un parágrafo novo</translation>
+ </message>
+ <message>
+ <source>Insert a new line</source>
+ <translation>Inserir unha liña nova</translation>
+ </message>
+ <message>
+ <source>Paste and Match Style</source>
+ <translation>Estilo de apegar e casar</translation>
+ </message>
+ <message>
+ <source>Remove formatting</source>
+ <translation>Eliminar o formatado</translation>
+ </message>
+ <message>
+ <source>Strikethrough</source>
+ <translation>Riscada</translation>
+ </message>
+ <message>
+ <source>Subscript</source>
+ <translation>Subíndice</translation>
+ </message>
+ <message>
+ <source>Superscript</source>
+ <translation>Superíndice</translation>
+ </message>
+ <message>
+ <source>Insert Bulleted List</source>
+ <translation>Inserir unha lista con viñetas</translation>
+ </message>
+ <message>
+ <source>Insert Numbered List</source>
+ <translation>Inserir unha lista numerada</translation>
+ </message>
+ <message>
+ <source>Indent</source>
+ <translation>Sangrar</translation>
+ </message>
+ <message>
+ <source>Outdent</source>
+ <translation>Quitar sangría</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation>Centro</translation>
+ </message>
+ <message>
+ <source>Justify</source>
+ <translation>Xustificado</translation>
+ </message>
+ <message>
+ <source>Align Left</source>
+ <translation>Aliñar á esquerda</translation>
+ </message>
+ <message>
+ <source>Align Right</source>
+ <translation>Aliñar á dereita</translation>
+ </message>
+ <message>
+ <source>Web Inspector - %2</source>
+ <translation>Inspector de webs: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QWhatsThisAction</name>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>Que é isto?</translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>*</source>
+ <translation>*</translation>
+ </message>
+</context>
+<context>
+ <name>QWizard</name>
+ <message>
+ <source>Go Back</source>
+ <translation>Atrás</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; &amp;Anterior</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Continuar</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation>&amp;Seguinte</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>&amp;Seguinte &gt;</translation>
+ </message>
+ <message>
+ <source>Commit</source>
+ <translation>Entregar</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Feito</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>&amp;Finalizar</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Cancelar</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>Axuda</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Axuda</translation>
+ </message>
+</context>
+<context>
+ <name>QWorkspace</name>
+ <message>
+ <source>Close</source>
+ <translation>Pechar</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>Minimizar</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>Restaurar para abaixo</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>&amp;Restaurar</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>&amp;Mover</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>&amp;Tamaño</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>Mi&amp;nimizar</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>Ma&amp;ximizar</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>&amp;Pechar</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>Manter &amp;enriba</translation>
+ </message>
+ <message>
+ <source>Sh&amp;ade</source>
+ <translation>&amp;Repregar</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>&amp;Unshade</source>
+ <translation>&amp;Despregar</translation>
+ </message>
+</context>
+<context>
+ <name>QXml</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>non aconteceu ningún erro</translation>
+ </message>
+ <message>
+ <source>error triggered by consumer</source>
+ <translation>erro lanzado polo consumidor</translation>
+ </message>
+ <message>
+ <source>unexpected end of file</source>
+ <translation>fin inesperada do ficheiro</translation>
+ </message>
+ <message>
+ <source>more than one document type definition</source>
+ <translation>máis dunha definición do tipo de documento</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing element</source>
+ <translation>aconteceu un erro ao interpretar o elemento</translation>
+ </message>
+ <message>
+ <source>tag mismatch</source>
+ <translation>desemparellamento de etiqueta</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing content</source>
+ <translation>aconteceu un erro ao interpretar o contido</translation>
+ </message>
+ <message>
+ <source>unexpected character</source>
+ <translation>carácter inesperado</translation>
+ </message>
+ <message>
+ <source>invalid name for processing instruction</source>
+ <translation>nome non válido para procesar a instrución</translation>
+ </message>
+ <message>
+ <source>version expected while reading the XML declaration</source>
+ <translation>agardábase unha versión ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>wrong value for standalone declaration</source>
+ <translation>valor incorrecto da declaración senlleira</translation>
+ </message>
+ <message>
+ <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+ <translation>agardábase unha declaración de codificación ou unha declaración autónoma ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>standalone declaration expected while reading the XML declaration</source>
+ <translation>agardábase unha declaración autónoma ao ler a declaración XML</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing document type definition</source>
+ <translation>aconteceu un erro mentres se interpretaba a definición do tipo de documento</translation>
+ </message>
+ <message>
+ <source>letter is expected</source>
+ <translation>agárdase unha letra</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing comment</source>
+ <translation>aconteceu erro mentres se interpretaba o comentario</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing reference</source>
+ <translation>aconteceu un erro mentres se interpretaba a referencia</translation>
+ </message>
+ <message>
+ <source>internal general entity reference not allowed in DTD</source>
+ <translation>non se permiten referencias á entidade xeral interna no DTD</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in attribute value</source>
+ <translation>non se permiten referencias a unha entidade xeral externa procesada no valor do atributo</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in DTD</source>
+ <translation>non se permiten referencias a unha entidade xeral externa procesada no DTD</translation>
+ </message>
+ <message>
+ <source>unparsed entity reference in wrong context</source>
+ <translation>aparece un referencia a unha entidade non procesada no contexto errado</translation>
+ </message>
+ <message>
+ <source>recursive entities</source>
+ <translation>entidades recursivas</translation>
+ </message>
+ <message>
+ <source>error in the text declaration of an external entity</source>
+ <translation>erro na declaración de texto dunha entidade externa</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlPatternistCLI</name>
+ <message>
+ <source>Warning in %1, at line %2, column %3: %4</source>
+ <translation>Aviso en %1, na liña %2 e columna %3: %4</translation>
+ </message>
+ <message>
+ <source>Warning in %1: %2</source>
+ <translation>Aviso en %1: %2</translation>
+ </message>
+ <message>
+ <source>Unknown location</source>
+ <translation>Lugar descoñecido</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2, at line %3, column %4: %5</source>
+ <translation>Erro %1 en %2, na liña %3 e columna %4: %5</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2: %3</source>
+ <translation>Aconteceu %1 en %2: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlStream</name>
+ <message>
+ <source>Extra content at end of document.</source>
+ <translation>Contido adicional na fin do documento.</translation>
+ </message>
+ <message>
+ <source>Invalid entity value.</source>
+ <translation>O valor da entidade non é válido.</translation>
+ </message>
+ <message>
+ <source>Invalid XML character.</source>
+ <translation>O carácter XML non é válido.</translation>
+ </message>
+ <message>
+ <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+ <translation>Non se permite a secuencia «]]&gt;» no contido.</translation>
+ </message>
+ <message>
+ <source>Encountered incorrectly encoded content.</source>
+ <translation>Atopouse contido codificado incorrectamente.</translation>
+ </message>
+ <message>
+ <source>Namespace prefix &apos;%1&apos; not declared</source>
+ <translation>Prefixo de espazo de nomes «%1» non declarado</translation>
+ </message>
+ <message>
+ <source>Illegal namespace declaration.</source>
+ <translation>Declaración ilegal de espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>Attribute redefined.</source>
+ <translation>Atributo definido de novo.</translation>
+ </message>
+ <message>
+ <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+ <translation>Carácter «%1» inesperado no texto público de identidade.</translation>
+ </message>
+ <message>
+ <source>Invalid XML version string.</source>
+ <translation>Cadea de versión do XML non válida.</translation>
+ </message>
+ <message>
+ <source>Unsupported XML version.</source>
+ <translation>Versión de XML non soportada.</translation>
+ </message>
+ <message>
+ <source>The standalone pseudo attribute must appear after the encoding.</source>
+ <translation>O pseudo atributo de autonomía debe aparecer após a codificación.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid encoding name.</source>
+ <translation>%1 non é un nome de codificación válido.</translation>
+ </message>
+ <message>
+ <source>Encoding %1 is unsupported</source>
+ <translation>A codificación %1 non está soportada</translation>
+ </message>
+ <message>
+ <source>Standalone accepts only yes or no.</source>
+ <translation>O atributo de autonomía só acepta «yes» ou «no».</translation>
+ </message>
+ <message>
+ <source>Invalid attribute in XML declaration.</source>
+ <translation>Atributo non válido na declaración XML.</translation>
+ </message>
+ <message>
+ <source>Premature end of document.</source>
+ <translation>Fin prematuro do documento.</translation>
+ </message>
+ <message>
+ <source>Invalid document.</source>
+ <translation>Documento non válido.</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <translation>Agardábase</translation>
+ </message>
+ <message>
+ <source>, but got &apos;</source>
+ <translation>, pero obtívose «</translation>
+ </message>
+ <message>
+ <source>Unexpected &apos;</source>
+ <translation>Non se agardaba « </translation>
+ </message>
+ <message>
+ <source>Expected character data.</source>
+ <translation>Agardábanse datos de carácter.</translation>
+ </message>
+ <message>
+ <source>Recursive entity detected.</source>
+ <translation>Detectouse unha entidade recursiva.</translation>
+ </message>
+ <message>
+ <source>Start tag expected.</source>
+ <translation>Agardábase unha etiquera de inicio.</translation>
+ </message>
+ <message>
+ <source>NDATA in parameter entity declaration.</source>
+ <translation>NDATA na declaración da entidade parámetro.</translation>
+ </message>
+ <message>
+ <source>XML declaration not at start of document.</source>
+ <translation>Declaración XML non no inicio do documento.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid processing instruction name.</source>
+ <translation>%1 é un nome non válido de intrucción de procesamento.</translation>
+ </message>
+ <message>
+ <source>Invalid processing instruction name.</source>
+ <translation>Nome non válido de instrución de procesamento.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid PUBLIC identifier.</source>
+ <translation>%1 é un identificador PUBLICO non válido.</translation>
+ </message>
+ <message>
+ <source>Invalid XML name.</source>
+ <translation>Nome XML non válido.</translation>
+ </message>
+ <message>
+ <source>Opening and ending tag mismatch.</source>
+ <translation>As etiquetas de apertura e peche está desemparelladas.</translation>
+ </message>
+ <message>
+ <source>Entity &apos;%1&apos; not declared.</source>
+ <translation>A entidade «%1» non está declarada.</translation>
+ </message>
+ <message>
+ <source>Reference to unparsed entity &apos;%1&apos;.</source>
+ <translation>Referencia a unha entidade «%1» non procesada.</translation>
+ </message>
+ <message>
+ <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+ <translation>Referencia a unha entidade externa «%1» no valor do atributo.</translation>
+ </message>
+ <message>
+ <source>Invalid character reference.</source>
+ <translation>Referencia a un caracter non válido.</translation>
+ </message>
+</context>
+<context>
+ <name>QtXmlPatterns</name>
+ <message>
+ <source>%1 is an unsupported encoding.</source>
+ <translation>A codificación %1 non está soportada.</translation>
+ </message>
+ <message>
+ <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
+ <translation>%1 contén octetos que non están permitidos na codificación pedida, %2.</translation>
+ </message>
+ <message>
+ <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
+ <translation>O código %1, que aparece en %2 coa codificación %3 non é un carácter XML válido.</translation>
+ </message>
+ <message>
+ <source>Network timeout.</source>
+ <translation>A rede esgotou o tempo-límite.</translation>
+ </message>
+ <message>
+ <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
+ <translation>O elemento %1 non pode ser serializado porque aparece fora do elemento documento.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
+ <translation>O atributo %1 non pode ser serializado porque aparece no nivel máximo.</translation>
+ </message>
+ <message>
+ <source>Year %1 is invalid because it begins with %2.</source>
+ <translation>O ano %1 non é válido porque comeza con %2.</translation>
+ </message>
+ <message>
+ <source>Day %1 is outside the range %2..%3.</source>
+ <translation>O día %1 está fora do rango %2..%3.</translation>
+ </message>
+ <message>
+ <source>Month %1 is outside the range %2..%3.</source>
+ <translation>O mes %1 está fora do rango %2..%3.</translation>
+ </message>
+ <message>
+ <source>Overflow: Can&apos;t represent date %1.</source>
+ <translation>Desbordamento: Non é posíbel representar a data %1.</translation>
+ </message>
+ <message>
+ <source>Day %1 is invalid for month %2.</source>
+ <translation>O día %1 non é válido para o mes %2.</translation>
+ </message>
+ <message>
+ <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
+ <translation>A hora 24:%1:%2.%3 non é válida. A hora é 24, pero os minutos, segundos e milisegundos non son todos 0; </translation>
+ </message>
+ <message>
+ <source>Time %1:%2:%3.%4 is invalid.</source>
+ <translation>A hora %1:%2:%3.%4 non é válida.</translation>
+ </message>
+ <message>
+ <source>Overflow: Date can&apos;t be represented.</source>
+ <translation>Desbordamento: Non se pode representar a data.</translation>
+ </message>
+ <message>
+ <source>At least one component must be present.</source>
+ <translation>Debe estar presente polo menos unha compoñente.</translation>
+ </message>
+ <message>
+ <source>At least one time component must appear after the %1-delimiter.</source>
+ <translation>Debe aparecer cando menos unha compoñente de tempo tras o delimitador %1.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid value of type %2.</source>
+ <translation>%1 non é un valor válido do tipo %2.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 from %2, the source value cannot be %3.</source>
+ <translation>Cando se converte de %1 para %2 o valor de orixe non pode ser %3.</translation>
+ </message>
+ <message>
+ <source>Integer division (%1) by zero (%2) is undefined.</source>
+ <translation>A división de enteiros (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Division (%1) by zero (%2) is undefined.</source>
+ <translation>A división (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Modulus division (%1) by zero (%2) is undefined.</source>
+ <translation>A división modular (%1) por cero (%2) non está definida.</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
+ <translation>Non se permite dividir un valor do tipo %1 por %2 (non número).</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
+ <translation>Non se permite dividir un valor do tipo %1 por %2 nin por %3 (máis ou menos cero).</translation>
+ </message>
+ <message>
+ <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
+ <translation>Non se permite multiplicar un valor do tipo %1 por %2 nin por %3 (máis ou menos infinito).</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot have an Effective Boolean Value.</source>
+ <translation>Un valor do tipo %1 non pode ter un Valor Booleano Efectivo.</translation>
+ </message>
+ <message>
+ <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
+ <translation>Non pode calcularse o Valor Booleano Efectivo dunha secuencia que contén dous ou máis valores atómicos.</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 exceeds maximum (%3).</source>
+ <translation>O valor %1 do tipo %2 supera o máximo (%3).</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 is below minimum (%3).</source>
+ <translation>O valor %1 do tipo %2 é menor que o mínimo (%3).</translation>
+ </message>
+ <message>
+ <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
+ <translation>Un valor do tipo %1 debe conter un número par de díxitos. O valor %2 non o ten.</translation>
+ </message>
+ <message>
+ <source>%1 is not valid as a value of type %2.</source>
+ <translation>%1 non é valido como valor do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Ambiguous rule match.</source>
+ <translation>Coincidencia de regra ambigua.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on type %2.</source>
+ <translation>O operador %1 non pode ser usado co tipo %2.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
+ <translation>O operador %1 non pode ser usado en valores atómicos dos tipos %2 nin %3.</translation>
+ </message>
+ <message>
+ <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
+ <translation>A URI dun espazo de nomes no nome dun atributo calculado non pode ser %1.</translation>
+ </message>
+ <message>
+ <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
+ <translation>O nome dun atributo calculado non pode ter a URI %1 de espazo de nomes co nome local %2.</translation>
+ </message>
+ <message>
+ <source>Type error in cast, expected %1, received %2.</source>
+ <translation>Aconteceu un erro de tipo na conversión, agardábase %1, recibiuse %2.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
+ <translation>Cando se convertía a %1 ou a un tipo derivado deste, o valor de orixe debe ser do mesmo tipo, ou debe ser unha cadea de texto. Non se permite o tipo %2.</translation>
+ </message>
+ <message>
+ <source>A comment cannot contain %1</source>
+ <translation>Un comentario non pode conter %1</translation>
+ </message>
+ <message>
+ <source>A comment cannot end with a %1.</source>
+ <translation>Un comentario non pode rematar cun %1.</translation>
+ </message>
+ <message>
+ <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
+ <translation>O valor do espazo de nomes nun construtor de espazos de nome non pode ser unha cadea en branco.</translation>
+ </message>
+ <message>
+ <source>The prefix must be a valid %1, which %2 is not.</source>
+ <translation>O prefixo debe ser un %1 válido por valor, e %2 non o é.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound.</source>
+ <translation>Non foi posíbel vincular o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
+ <translation>O prefixo %1 só pode estar vinculado a %2 e viceversa.</translation>
+ </message>
+ <message>
+ <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
+ <translation>Un nodo atributo non pode ser un fillo dun nodo documento. Polo tanto, o atributo %1 está fora de sitio.</translation>
+ </message>
+ <message>
+ <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
+ <translation>Non pode avaliarse directamente un módulo de biblioteca. Debe ser importada desde un módulo principal.</translation>
+ </message>
+ <message>
+ <source>No template by name %1 exists.</source>
+ <translation>Non hai ningún modelo chamado %1.</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
+ <translation>Os valores do tipo %1 non poden ser predicados. Un predicado debe ter ou tipo numérico ou Valor Booleano Efectivo.</translation>
+ </message>
+ <message>
+ <source>A positional predicate must evaluate to a single numeric value.</source>
+ <translation>Un predicado posicional debe avaliarse a un único valor numérico.</translation>
+ </message>
+ <message>
+ <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
+ <translation>O último paso nunha rota debe conter ou nodos ou valores atómicos. Non pode ser unha mistura dos dous.</translation>
+ </message>
+ <message>
+ <source>The data of a processing instruction cannot contain the string %1</source>
+ <translation>Os datos dunha instrución de procesamento non poden conter a cadea %1</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1</source>
+ <translation>Non existe ningunha asociación cun espazo de nomes para o prefixo %1</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1 in %2</source>
+ <translation>Non existe ningunha asociación cun espazo de nomes para o prefixo %1 en %2</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid %2</source>
+ <translation>%1 non é un %2 válido</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
+ <translation>Pasouse o parámetro %1, pero non existe o %2 correspondente.</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
+ <translation>Requírese o parámetro %1, pero non se forneceu o %2 que lle corresponde.</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1 leva como moito %n argumento, polo que %2 non é válido.</numerusform>
+ <numerusform>%1 leva como moito %n argumentos, polo que %2 non é válido.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1 require polo menos %n argumento, polo que %2 non é valido.</numerusform>
+ <numerusform>%1 require polo menos %n argumentos, polo que %2 non é válido.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
+ <translation>O primeiro argumento de %1 non pode ser do tipo %2. Debe ser un tipo numérico, xs:yearMonthDuration ou xs:dayTimeDuration.</translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>O primeiro argumento de %1 non pode ser do tipo %2. Debe ser de tipo %3, %4 ou %5.</translation>
+ </message>
+ <message>
+ <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>O segundo argumento de %1 non pode ser do tipo %2. Debe ser de tipo %3, %4 ou %5.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid XML 1.0 character.</source>
+ <translation>%1 non é un carácter válido de XML 1.0.</translation>
+ </message>
+ <message>
+ <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
+ <translation>O nodo raíz do segundo argumento da función %1 debe ser un nodo documento. %2 non é un nodo documento.</translation>
+ </message>
+ <message>
+ <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
+ <translation>Se ambos os dous valores teñen desprazamentos de zona, deben ter o mesmo. %1 e %2 non son iguais.</translation>
+ </message>
+ <message>
+ <source>%1 was called.</source>
+ <translation>Chamouse a %1.</translation>
+ </message>
+ <message>
+ <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
+ <translation type="unfinished">%1 debe estar seguido por %2 ou %3, non na fin da cadea substituta.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
+ <translation type="unfinished">Na cadea substituta, %1 debe ir seguido de cando menos un díxito cando non
+estea escapada.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
+ <translation type="unfinished">Na cadea substituta, %1 só pode ser usado para escaparse a si mesmo ou %2,
+non %3.</translation>
+ </message>
+ <message>
+ <source>%1 matches newline characters</source>
+ <translation type="unfinished">%1 casa con caracteres de nova liña</translation>
+ </message>
+ <message>
+ <source>%1 and %2 match the start and end of a line.</source>
+ <translation type="unfinished">%1 e %2 casan con comezo e fin de liña</translation>
+ </message>
+ <message>
+ <source>Matches are case insensitive</source>
+ <translation type="unfinished">As concordancias non son sensíbeis á capitalización</translation>
+ </message>
+ <message>
+ <source>Whitespace characters are removed, except when they appear in character classes</source>
+ <translation type="unfinished">Os espazos en branco son eliminados, excepto se aparecen en clases de
+caracteres</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid regular expression pattern: %2</source>
+ <translation type="unfinished">%1 é un padrón non válido de expresión regular: %2</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
+ <translation type="unfinished">%1 é unha bandeira non válida de expresión regular. As valedoiras son:</translation>
+ </message>
+ <message>
+ <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
+ <translation type="unfinished">Se o primeiro argumento é a secuencia baleira ou unha cadea de lonxitude
+cero (sen espazo de nomes), non se pode especificar un prefixo.
+Especificouse o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>It will not be possible to retrieve %1.</source>
+ <translation type="unfinished">Non será posíbel acadar %1.</translation>
+ </message>
+ <message>
+ <source>The default collection is undefined</source>
+ <translation type="unfinished">Non se definiu a colección predeterminada.</translation>
+ </message>
+ <message>
+ <source>%1 cannot be retrieved</source>
+ <translation type="unfinished">Non é posíbel acadar %1</translation>
+ </message>
+ <message>
+ <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
+ <translation type="unfinished">A forma de normalización %1 non está soportada. As formas soportadas son %2,
+%3, %4, %5 e ningunha, i.e. a cadea en branco (sen normalización).</translation>
+ </message>
+ <message>
+ <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
+ <translation type="unfinished">O desprazamento de zona debe estar no intervalo %1..%2 inclusive. %3 está
+fora de intervalo.</translation>
+ </message>
+ <message>
+ <source>%1 is not a whole number of minutes.</source>
+ <translation type="unfinished">%1 non é un número absoluto de minutos.</translation>
+ </message>
+ <message>
+ <source>The URI cannot have a fragment</source>
+ <translation type="unfinished">A URI non pode ter un anaco</translation>
+ </message>
+ <message>
+ <source>Required cardinality is %1; got cardinality %2.</source>
+ <translation type="unfinished">A cardinalidade requirida é %1; obtívose a cardinalidade %2.</translation>
+ </message>
+ <message>
+ <source>The item %1 did not match the required type %2.</source>
+ <translation type="unfinished">O ítem %1 non é do tipo requirido %2.</translation>
+ </message>
+ <message>
+ <source>The variable %1 is unused</source>
+ <translation type="unfinished">A variábel %1 non é usada</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint selector</source>
+ <translation type="unfinished">Selector de restrición de identidade do esquema XML do W3C</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint field</source>
+ <translation type="unfinished">Campo de restrición de identidade do esquema XML do W3C</translation>
+ </message>
+ <message>
+ <source>A construct was encountered which is disallowed in the current language(%1).</source>
+ <translation type="unfinished">Atopouse unha construción que non está permitida na linguaxe actual (%1).</translation>
+ </message>
+ <message>
+ <source>%1 is an unknown schema type.</source>
+ <translation type="unfinished">%1 é un tipo de esquema descoñecido.</translation>
+ </message>
+ <message>
+ <source>A template with name %1 has already been declared.</source>
+ <translation type="unfinished">Xa se declarou un modelo co nome %1.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid numeric literal.</source>
+ <translation type="unfinished">%1 non é un texto numérico válido.</translation>
+ </message>
+ <message>
+ <source>Only one %1 declaration can occur in the query prolog.</source>
+ <translation type="unfinished">Só pode haber unha declaración de %1 no prólogo da procura.</translation>
+ </message>
+ <message>
+ <source>The initialization of variable %1 depends on itself</source>
+ <translation type="unfinished">A inicialización da variábel %1 depende de si mesma</translation>
+ </message>
+ <message>
+ <source>No variable with name %1 exists</source>
+ <translation type="unfinished">Non hai ningunha variábel chamada %1</translation>
+ </message>
+ <message>
+ <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
+ <translation type="unfinished">Non está soportada a versión %1. A versión soportada de XQuery é a 1.0.</translation>
+ </message>
+ <message>
+ <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
+ <translation type="unfinished">A codificación %1 non é válida. Só debe conter caracteres Latinos, non pode
+conter espazos, e debe casar coa expresión regular %2.</translation>
+ </message>
+ <message>
+ <source>No function with signature %1 is available</source>
+ <translation type="unfinished">Non está dispoñíbel ningunha función coa sinatura %1</translation>
+ </message>
+ <message>
+ <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">Debe haber unha declaración dun espazo de nomes predeterminado antes das
+declaracións de funcións, variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>Namespace declarations must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">Debe haber declaracións dun espazo de nomes antes das declaracións de
+funcións, variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>Module imports must occur before function, variable, and option declarations.</source>
+ <translation type="unfinished">As importacións de módulos deben estar antes das declaracións de funcións,
+variábeis e opcións.</translation>
+ </message>
+ <message>
+ <source>The keyword %1 cannot occur with any other mode name.</source>
+ <translation type="unfinished">A palabra-chave %1 só pode aparecer con calquera outro nome de modo.</translation>
+ </message>
+ <message>
+ <source>The value of attribute %1 must be of type %2, which %3 isn&apos;t.</source>
+ <translation type="unfinished">O valor do atributo %1 debe ser do tipo %2 e %3 non o é.</translation>
+ </message>
+ <message>
+ <source>It is not possible to redeclare prefix %1.</source>
+ <translation type="unfinished">Non é posíbel declarar de novo o prefixo %1.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source>
+ <translation type="unfinished">Non foi posíbel atopar o prefixo %1. Por omisión, xa está vinculado co
+espazo de nomes %2.</translation>
+ </message>
+ <message>
+ <source>Prefix %1 is already declared in the prolog.</source>
+ <translation type="unfinished">O prefixo %1 xa está declarado no prólogo.</translation>
+ </message>
+ <message>
+ <source>The name of an option must have a prefix. There is no default namespace for options.</source>
+ <translation type="unfinished">O nome dunha opción debe ter un prefixo. Non hai un espazo de nomes
+predeterminado para as opcións.</translation>
+ </message>
+ <message>
+ <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
+ <translation type="unfinished">A funcionalidade de Importación de Esquema non está soportada, polo tanto
+non pode haber declaracións %1.</translation>
+ </message>
+ <message>
+ <source>The target namespace of a %1 cannot be empty.</source>
+ <translation type="unfinished">O espazo de nomes de destino dun %1 non pode estar en branco.</translation>
+ </message>
+ <message>
+ <source>The module import feature is not supported</source>
+ <translation type="unfinished">A funcionalidade de importación de módulos non está soportada</translation>
+ </message>
+ <message>
+ <source>A variable with name %1 has already been declared.</source>
+ <translation type="unfinished">Xa foi declarada unha variábel co nome %1.</translation>
+ </message>
+ <message>
+ <source>No value is available for the external variable with name %1.</source>
+ <translation type="unfinished">Non se dispón de ningún valor para a variábel externa chamada %1.</translation>
+ </message>
+ <message>
+ <source>A stylesheet function must have a prefixed name.</source>
+ <translation type="unfinished">As funcións de folla de estilo deben ter un nome con prefixo.</translation>
+ </message>
+ <message>
+ <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+ <translation type="unfinished">O espazo de nomes das funcións definidas polo usuario non pode estar en
+branco (probe co prefixo predefinido %1, que está para casos como este)</translation>
+ </message>
+ <message>
+ <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
+ <translation type="unfinished">O espazo de nomes %1 está reservado; polo tanto as funcións definidas polo
+usuario non poden usalo. Ténteo co prefixo predefinido %2, que está para
+casos como este.</translation>
+ </message>
+ <message>
+ <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
+ <translation type="unfinished">O espazo de nomes dunha función definida polo usuario nun módulo de
+biblioteca debe ser equivalente ao espazo de nomes do módulo. Con outras
+verbas: debe ser %1 no canto de %2</translation>
+ </message>
+ <message>
+ <source>A function already exists with the signature %1.</source>
+ <translation type="unfinished">Xa existe unha función coa sinatura %1.</translation>
+ </message>
+ <message>
+ <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
+ <translation type="unfinished">Non se soportan as funcións externas. Todas as funcións soportadas poden ser
+usadas directamente, non fai falla declaralas como externas</translation>
+ </message>
+ <message>
+ <source>An argument with name %1 has already been declared. Every argument name must be unique.</source>
+ <translation type="unfinished">Xa foi declarado un argumento co nome %1. O nome de cada argumento debe ser
+único.</translation>
+ </message>
+ <message>
+ <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
+ <translation type="unfinished">Cando se emprega unha función %1 para procurar nun patrón, o argumento debe
+ser unha referencia variábel ou unha cadea literal.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, o primeiro argumento da función %1 cando sexa empregada
+para facer procuras debe ser unha cadea de texto.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, o primeiro argumento da función %1 cando sexa empregada
+para facer procuras debe ser unha cadea de texto ou unha referencia variábel.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
+ <translation type="unfinished">Nun patrón XSL-T, a función %1 non pode ter un terceiro argumento.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
+ <translation type="unfinished">Nun patrón XSL-T, só pode empregar para procuras as funcións %1 e %2, non a %
+3.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
+ <translation type="unfinished">Nun patrón XSL-T non pode empregarse o eixo %1, só os %2 e %3.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid template mode name.</source>
+ <translation type="unfinished">%1 non é un nome de modo válido do modelo.</translation>
+ </message>
+ <message>
+ <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
+ <translation type="unfinished">O nome dunha variábel asociada a unha expresión for debe ser diferente da
+variábel posicional. Por isto, as dúas variábeis chamadas %1 chocan.</translation>
+ </message>
+ <message>
+ <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
+ <translation type="unfinished">Non está soportada a funcionalidade de Validación do Esquema. Polo tanto, as
+expresións %1 non poden ser usadas.</translation>
+ </message>
+ <message>
+ <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
+ <translation type="unfinished">Non está soportada ningunha das expresións pragma. Polo tanto, debe haber
+presente unha expresión de reserva</translation>
+ </message>
+ <message>
+ <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
+ <translation type="unfinished">Os nomes dos parámetros do modelo deben ser únicos, %1 está duplicado.</translation>
+ </message>
+ <message>
+ <source>The %1-axis is unsupported in XQuery</source>
+ <translation type="unfinished">Non está soportado o eixo %1 en XQuery</translation>
+ </message>
+ <message>
+ <source>No function with name %1 is available.</source>
+ <translation type="unfinished">Non hai ningunha función chamada %1.</translation>
+ </message>
+ <message>
+ <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
+ <translation type="unfinished">A URI do espazo de nomes non pode ser unha cadea valeira cando se estexa a
+asociar cun prefixo, %1.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid namespace URI.</source>
+ <translation type="unfinished">%1 non é unha URI válida de espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>It is not possible to bind to the prefix %1</source>
+ <translation type="unfinished">Non é posíbel asociar co prefixo %1</translation>
+ </message>
+ <message>
+ <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation type="unfinished">O espazo de nomes %1 só pode estar vinculado a %2 (e está, en calquera caso,
+predeclarado).</translation>
+ </message>
+ <message>
+ <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation type="unfinished">O prefixo %1 só pode estar vinculado a %2 (e está, en calquera caso,
+predeclarado).</translation>
+ </message>
+ <message>
+ <source>Two namespace declaration attributes have the same name: %1.</source>
+ <translation type="unfinished">Dous atributos na declaración dun espazo de nomes teñen o mesmo nome: %1.</translation>
+ </message>
+ <message>
+ <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
+ <translation type="unfinished">A URI do espazo de nomes debe ser constante e non pode conter expresións.</translation>
+ </message>
+ <message>
+ <source>An attribute with name %1 has already appeared on this element.</source>
+ <translation type="unfinished">Xa apareceu un atributo co nome %1 neste elemento.</translation>
+ </message>
+ <message>
+ <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
+ <translation type="unfinished">Hai un construtor directo dun elemento que non está ben formado. %1 remata
+con %2.</translation>
+ </message>
+ <message>
+ <source>The name %1 does not refer to any schema type.</source>
+ <translation type="unfinished">O nome %1 non se refire a ningún tipo de esquema.</translation>
+ </message>
+ <message>
+ <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
+ <translation type="unfinished">%1 é un tipo complexo. Non é posíbel converter a tipos complexos. Porén, si
+que pode converter a tipos atómicos como %2.</translation>
+ </message>
+ <message>
+ <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
+ <translation type="unfinished">%1 non é un tipo atómico. Só é posíbel converter a tipos atómicos.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid name for a processing-instruction.</source>
+ <translation type="unfinished">%1 non é un nome válido para unha instrución de procesamento.</translation>
+ </message>
+ <message>
+ <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
+ <translation type="unfinished">%1 non está nas declaracións de atributos ao alcance. Lembre que non está
+soportada a funcionalidade de importación de esquemas.</translation>
+ </message>
+ <message>
+ <source>The name of an extension expression must be in a namespace.</source>
+ <translation type="unfinished">O nome dunha expresión de extensión debe estar nun espazo de nomes.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed at this location.</source>
+ <translation type="unfinished">Neste lugar non se permite o elemento %1.</translation>
+ </message>
+ <message>
+ <source>Text nodes are not allowed at this location.</source>
+ <translation type="unfinished">Neste lugar non se permiten nodos de texto.</translation>
+ </message>
+ <message>
+ <source>Parse error: %1</source>
+ <translation type="unfinished">Erro de procesamento: %1</translation>
+ </message>
+ <message>
+ <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
+ <translation type="unfinished">O valor do atributo da versión de XSL-T debe ser un valor do tipo %1, e %2
+non o é.</translation>
+ </message>
+ <message>
+ <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
+ <translation type="unfinished">A executar unha folla de estilos XSL-T 1.0 cun procesador 2.0.</translation>
+ </message>
+ <message>
+ <source>Unknown XSL-T attribute %1.</source>
+ <translation type="unfinished">Non se coñece o atributo XSL-T %1.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 and %2 are mutually exclusive.</source>
+ <translation type="unfinished">Os atributos %1 e %2 exclúense mutuamente.</translation>
+ </message>
+ <message>
+ <source>In a simplified stylesheet module, attribute %1 must be present.</source>
+ <translation type="unfinished">Nun módulo de folla de estilos simplificada debe estar presente o atributo %
+1.</translation>
+ </message>
+ <message>
+ <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
+ <translation type="unfinished">Se o elemento %1 non ten o atributo %2 non pode ter os atributos %3 nin %4.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have at least one of the attributes %2 or %3.</source>
+ <translation type="unfinished">O elemento %1 debe ter polo menos un dos atributos %2 ou %3.</translation>
+ </message>
+ <message>
+ <source>At least one mode must be specified in the %1-attribute on element %2.</source>
+ <translation type="unfinished">Debe especificarse polo menos un modo no atributo %1 do elemento %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 must come last.</source>
+ <translation type="unfinished">O elemento %1 debe ir o último.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur before %2.</source>
+ <translation type="unfinished">Debe estar presente polo menos un elemento %1 antes de %2.</translation>
+ </message>
+ <message>
+ <source>Only one %1-element can appear.</source>
+ <translation type="unfinished">Só pode aparecer un elemento %1.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur inside %2.</source>
+ <translation type="unfinished">Debe estar presente polo menos un elemento %1 dentro de %2.</translation>
+ </message>
+ <message>
+ <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
+ <translation type="unfinished">Non se pode empregar un construtor de secuencia cando o atributo %1 está
+presente en %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
+ <translation type="unfinished">O elemento %1 debe ter ou un atributo %2 ou un construtor de secuencia.</translation>
+ </message>
+ <message>
+ <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
+ <translation type="unfinished">Non se pode subministrar un valor predeterminado mediante un atributo %1 nin
+un construtor de secuencia cando se require un parámetro.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have children.</source>
+ <translation type="unfinished">O elemento %1 non pode ter fillos.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have a sequence constructor.</source>
+ <translation type="unfinished">O elemento %1 non pode ter un construtor de secuencia.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
+ <translation type="unfinished">O atributo %1 non pode aparecer en %2 cando é filla de %3.</translation>
+ </message>
+ <message>
+ <source>A parameter in a function cannot be declared to be a tunnel.</source>
+ <translation type="unfinished">Non se pode declarar como túnel un parámetro nunha función.</translation>
+ </message>
+ <message>
+ <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
+ <translation type="unfinished">Este procesador non é coñecedor do Schema e polo tanto %1 non pode
+empregarse.</translation>
+ </message>
+ <message>
+ <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
+ <translation type="unfinished">Os elementos da folla de estilo de máximo nivel debe estar nun espazo de
+nomes non nulo, e %1 non o é.</translation>
+ </message>
+ <message>
+ <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
+ <translation type="unfinished">O valor do atributo %1 no elemento %2 debe ser %3 ou %4, non %5.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 cannot have the value %2.</source>
+ <translation type="unfinished">O atributo %1 non pode ter o valor %2.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 can only appear on the first %2 element.</source>
+ <translation type="unfinished">O atributo %1 só pode aparecer no primeiro elemento %2.</translation>
+ </message>
+ <message>
+ <source>At least one %1 element must appear as child of %2.</source>
+ <translation type="unfinished">Debe aparecer cando menos un elemento %1 como fillo de %2.</translation>
+ </message>
+ <message>
+ <source>Empty particle cannot be derived from non-empty particle.</source>
+ <translation type="unfinished">Unha partícula baleira non pode derivarse dunha non baleira.</translation>
+ </message>
+ <message>
+ <source>Derived particle is missing element %1.</source>
+ <translation type="unfinished">Na partícula derivada falta o elemento %1.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 is missing value constraint as defined in base particle.</source>
+ <translation type="unfinished">No elemento derivado %1 falta a restrición aos valores definida na partícula
+de base.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 has weaker value constraint than base particle.</source>
+ <translation type="unfinished">O elemento derivado %1 ten unha restrición aos valores máis feble do que a
+da súa partícula de base.</translation>
+ </message>
+ <message>
+ <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source>
+ <translation type="unfinished">A restrición de valor fixo do elemento %1 é diferente da de valor da
+partícula base.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 cannot be nillable as base element is not nillable.</source>
+ <translation type="unfinished">O elemento derivado %1 non se pode anular porque o elemento de base non se
+pode anular.</translation>
+ </message>
+ <message>
+ <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source>
+ <translation type="unfinished">O bloque de restricións do elemento derivado %1 non pode ser máis feble do
+que son as do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Simple type of derived element %1 cannot be validly derived from base element.</source>
+ <translation type="unfinished">O tipo simple do elemento derivado %1 non se pode derivar con validez a
+partir do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Complex type of derived element %1 cannot be validly derived from base element.</source>
+ <translation type="unfinished">O tipo complexo do elemento derivado %1 non se pode derivar con validez a
+partir do elemento de base.</translation>
+ </message>
+ <message>
+ <source>Element %1 is missing in derived particle.</source>
+ <translation type="unfinished">Falta o elemento %1 na partícula derivada.</translation>
+ </message>
+ <message>
+ <source>Element %1 does not match namespace constraint of wildcard in base particle.</source>
+ <translation type="unfinished">O elemento %1 non casa coa restrición do espazo de nomes de comodín na
+partícula de base.</translation>
+ </message>
+ <message>
+ <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source>
+ <translation type="unfinished">O comodín da partícula derivada non é un subconxunto válido do da partícula
+de base.</translation>
+ </message>
+ <message>
+ <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source>
+ <translation type="unfinished">O processContent do comodín na partícula derivada é máis feble que o do
+comodín na partícula de base.</translation>
+ </message>
+ <message>
+ <source>Derived particle allows content that is not allowed in the base particle.</source>
+ <translation type="unfinished">A partícula derivada permite contido non permitido na partícula de base.</translation>
+ </message>
+ <message>
+ <source>%1 has inheritance loop in its base type %2.</source>
+ <translation type="unfinished">%1 ten un bucle de herdanza no seu tipo base %2.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of base type %1.</source>
+ <translation type="unfinished">Herdanza circular do tipo de base %1.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of union %1.</source>
+ <translation type="unfinished">Herdanza circular da unión %1.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source>
+ <translation type="unfinished">Non se permite que %1 derive de %2 debido a unha restrición xa que o este
+defíneo como final.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source>
+ <translation type="unfinished">Non se permite que %1 derive de %2 por extensión debido a unha restrición xa
+que o este defíneo como final.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 cannot be complex type %2.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 non pode ser do tipo complexo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot have direct base type %2.</source>
+ <translation type="unfinished">O tipo simple %1 non pode ter unha base directa do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is not allowed to have base type %2.</source>
+ <translation type="unfinished">Ao tipo simple %1 non se lle permite ter unha base do tipo %2.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 can only have simple atomic type as base type.</source>
+ <translation type="unfinished">O tipo simple %1 só pode ter un tipo atómico simple como tipo de base.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
+ <translation type="unfinished">O tipo simple %1 non pode derivar do %2 xa que este define a restrición como
+final.</translation>
+ </message>
+ <message>
+ <source>Variety of item type of %1 must be either atomic or union.</source>
+ <translation type="unfinished">A variedade do tipo de elemento de %1 debe ser ou ou atómico ou unión.</translation>
+ </message>
+ <message>
+ <source>Variety of member types of %1 must be atomic.</source>
+ <translation type="unfinished">A variedade dos tipos membro de %1 debe sen atómica.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
+ <translation type="unfinished">Non se permite que %1 derive de %2 por lista xa que esta defínea como final.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is only allowed to have %2 facet.</source>
+ <translation type="unfinished">Só se permite que o tipo simple %1 teña a faceta %2.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 must have variety of type list.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 debe ser variedade do tipo lista.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 has defined derivation by restriction as final.</source>
+ <translation type="unfinished">O tipo base do tipo simple %1 definiu a derivación por restrición como final.</translation>
+ </message>
+ <message>
+ <source>Item type of base type does not match item type of %1.</source>
+ <translation type="unfinished">O tipo de elemento do tipo de base non casa co tipo de elemento de %1.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 contains not allowed facet type %2.</source>
+ <translation type="unfinished">O tipo simple %1 contén unha faceta non permitida do tipo %2.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source>
+ <translation type="unfinished">Non se permite que %1 derive de %2 por unión xa que este defínea como final.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have any facets.</source>
+ <translation type="unfinished">%1 non pode ter ningunha faceta.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 must have variety of union.</source>
+ <translation type="unfinished">O tipo de base %1 do tipo simple %2 debe ser unha variedade de unión.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
+ <translation type="unfinished">Non se permite que o tipo base %1 do tipo simple %2 teña restrición no
+atributo %3.</translation>
+ </message>
+ <message>
+ <source>Member type %1 cannot be derived from member type %2 of %3&apos;s base type %4.</source>
+ <translation type="unfinished">O tipo membro %1 non se pode derivar do tipo membro %2 do tipo base %4 de %3.</translation>
+ </message>
+ <message>
+ <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
+ <translation type="unfinished">O método de derivación de %1 debe ser por extensión porque o tipo base %2 é
+un tipo simple.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has duplicated element %2 in its content model.</source>
+ <translation type="unfinished">O tipo complexo %1 contén por duplicado o elemento %2 no seu modelo de
+contido.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has non-deterministic content.</source>
+ <translation type="unfinished">O tipo complexo %1 ten contido non determinista.</translation>
+ </message>
+ <message>
+ <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source>
+ <translation type="unfinished">Os atributos do tipo complexo %1 non son unha extensión válida dos atributos
+do tipo base %2: %3.</translation>
+ </message>
+ <message>
+ <source>Content model of complex type %1 is not a valid extension of content model of %2.</source>
+ <translation type="unfinished">O modelo de contido do tipo complexo %1 non é unha extensión válida do
+modelo de contido de %2.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have simple content.</source>
+ <translation type="unfinished">O tipo complexo %1 debe ter contido simple.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have the same simple type as its base class %2.</source>
+ <translation type="unfinished">O tipo complexo %1 debe ter o mesmo tipo simple que a súa clase de base %2.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 cannot be derived from base type %2%3.</source>
+ <translation type="unfinished">O tipo complexo %1 non pode derivarse do tipo de base %2%3.</translation>
+ </message>
+ <message>
+ <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source>
+ <translation type="unfinished">Os atributos do tipo complexo %1 non son unha restrición válida baseada nos
+atributos do tipo base %2: %3.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
+ <translation type="unfinished">O tipo complexo %1 con contido simple non se pode derivar do tipo de base
+complexo %2.</translation>
+ </message>
+ <message>
+ <source>Item type of simple type %1 cannot be a complex type.</source>
+ <translation type="unfinished">O tipo de elemento do tipo simple %1 non pode ser un tipo complexo.</translation>
+ </message>
+ <message>
+ <source>Member type of simple type %1 cannot be a complex type.</source>
+ <translation type="unfinished">O tipo membro do tipo simple %1 non pode ser un tipo complexo.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have a member type with the same name as itself.</source>
+ <translation type="unfinished">Non se permite que %1 teña un tipo membro co mesmo nome ca el.</translation>
+ </message>
+ <message>
+ <source>%1 facet collides with %2 facet.</source>
+ <translation type="unfinished">A faceta %1 entra en conflito doa %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must have the same value as %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ter o mesmo valor que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be equal or greater than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser maior ou igual que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que ou igual que a %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid regular expression</source>
+ <translation type="unfinished">A faceta %1 contén unha expresión regular non válida</translation>
+ </message>
+ <message>
+ <source>Unknown notation %1 used in %2 facet.</source>
+ <translation type="unfinished">Empregouse a notación non válida %1 na faceta %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid value %2: %3.</source>
+ <translation type="unfinished">A faceta %1 contén o valor non válido %2: %3.</translation>
+ </message>
+ <message>
+ <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source>
+ <translation type="unfinished">A faceta %1 non pode ser %2 nin %3 se a faceta %4 do tipo de base é %5.</translation>
+ </message>
+ <message>
+ <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
+ <translation type="unfinished">A faceta %1 non pode ser %2 se a faceta %3 do tipo de base é %4.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que ou igual que a %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet and %2 facet cannot appear together.</source>
+ <translation type="unfinished">As facetas %1 e %2 non poden aparecer xuntas.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 debe ser maior que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet.</source>
+ <translation type="unfinished">A faceta %1 debe ser menor que a %2.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than or equal to %2 facet of base type.</source>
+ <translation type="unfinished">A faceta %1 deber ser maior ou igual que a faceta %2 do tipo de base.</translation>
+ </message>
+ <message>
+ <source>Simple type contains not allowed facet %1.</source>
+ <translation type="unfinished">O tipo simple contén a faceta non permitida %1.</translation>
+ </message>
+ <message>
+ <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
+ <translation type="unfinished">As facetas %1, %2, %3, %4, %5 e %6 non están permitidas cando se deriva por
+lista.</translation>
+ </message>
+ <message>
+ <source>Only %1 and %2 facets are allowed when derived by union.</source>
+ <translation type="unfinished">Só se permiten as facetas %1 e %2 cando se deriva por unión.</translation>
+ </message>
+ <message>
+ <source>%1 contains %2 facet with invalid data: %3.</source>
+ <translation type="unfinished">%1 contén a faceta %2 con datos non válidos: %3.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains attribute %2 twice.</source>
+ <translation type="unfinished">O grupo de atributos %1 contén o atributo %2 dúas veces.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
+ <translation type="unfinished">O grupo de atributos %1 contén dous atributos diferentes con tipos derivados
+de %2</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+ <translation type="unfinished">O grupo de atributos %1 contén o atributo %2, que ten restrición de valores
+pero un tipo que herda de %3.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains attribute %2 twice.</source>
+ <translation type="unfinished">O tipo complexo %1 contén o atributo %2 dúas veces.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
+ <translation type="unfinished">O tipo complexo %1 contén dous atributos diferentes con tipos derivados de %2.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+ <translation type="unfinished">O tipo complexo %1 contén o atributo %2, que ten restrición de valores pero
+un tipo que herda de %3.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
+ <translation type="unfinished">O elemento %1 non se lle permite ter unha restrición de valores se o seu tipo
+de base
+é complexo.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source>
+ <translation type="unfinished">O elemento %1 non se lle permite ter unha restrición de valores se o seu tipo
+deriva de %2.</translation>
+ </message>
+ <message>
+ <source>Value constraint of element %1 is not of elements type: %2.</source>
+ <translation type="unfinished">A restrición aos valores do elemento %1 non é do tipo elementos: %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source>
+ <translation type="unfinished">Non se permite que o elemento %1 teña afiliación a grupo de substitución xa
+que
+non é un elemento global.</translation>
+ </message>
+ <message>
+ <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source>
+ <translation type="unfinished">O tipo do elemento %1 non pode derivarse do tipo de afiliación ao grupo de
+substitución.</translation>
+ </message>
+ <message>
+ <source>Value constraint of attribute %1 is not of attributes type: %2.</source>
+ <translation type="unfinished">A restrición aos valores do atributo %1 non é ao tipo do atributo: %2.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 has value constraint but has type derived from %2.</source>
+ <translation type="unfinished">O atributo %1 ten restrición de valores pero ten tipo derivado de %2.</translation>
+ </message>
+ <message>
+ <source>%1 attribute in derived complex type must be %2 like in base type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source>
+ <translation type="unfinished">O atributo %1 do tipo complexo derivado debe ter unha restrición de valores
+%2
+como no tipo de base.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>processContent of base wildcard must be weaker than derived wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 exists twice with different types.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Particle contains non-deterministic wildcards.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but derived attribute is not.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not exist in the base definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not match the wildcard in the base definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but missing in derived definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived definition contains an %1 element that does not exists in the base definition</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Derived wildcard is not a subset of the base wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 from base type is missing in derived type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 differs from type of base attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base definition contains an %1 element that is missing in the derived definition</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Can not process unknown element %1, expected elements are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed in this scope, possible elements are: %2.</source>
+ <translation type="unfinished">Non se permite o elemento %1 neste ámbito, os elementos posíbeis son: %2.</translation>
+ </message>
+ <message>
+ <source>Child element is missing in that scope, possible child elements are: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Document is not a XML schema.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element contains invalid content: {%3}.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element has neither %2 attribute nor %3 child element.</source>
+ <translation type="unfinished">O elemento %1 non ten nin o atributo %2 nin o elemento fillo %3.</translation>
+ </message>
+ <message>
+ <source>%1 element with %2 child element must not have a %3 attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must be %3 or %4.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ser %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ter un valor de %3.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3 or %4.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 debe ter un valor de %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 element must not have %2 and %3 attribute together.</source>
+ <translation type="unfinished">O elemento %1 non debe ter á vez os atributos %2 e %3.</translation>
+ </message>
+ <message>
+ <source>Content of %1 attribute of %2 element must not be from namespace %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must not be %3.</source>
+ <translation type="unfinished">O atributo %1 do elemento %2 non debe ser %3.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specifying use=&apos;prohibited&apos; inside an attribute group has no effect.</source>
+ <translation type="unfinished">Indicar use=&apos;prohibited&apos; dentro dun grupo de atributos non ten efecto.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 or %3 attribute.</source>
+ <translation type="unfinished">O elemento %1 debe ter o do atributo %2 ou o %3.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source>
+ <translation type="unfinished">O elemento %1 debe ter ou o atributo %2 ou un elemento fillo %3 ou %4.</translation>
+ </message>
+ <message>
+ <source>%1 element requires either %2 or %3 attribute.</source>
+ <translation type="unfinished">O elemento %1 require o atributo %2 ou o %3.</translation>
+ </message>
+ <message>
+ <source>Text or entity references not allowed inside %1 element</source>
+ <translation type="unfinished">Non se permite referencias nin texto nin a entidades dentro dun elemento %1</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this context.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element has larger value than %3 attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Prefix of qualified name %1 is not defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must either contain %3 or the other values.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Component with ID %1 has been defined previously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute group %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element group %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notation %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Identity constraint %1 already defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicated facets in simple type %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 references unknown %2 or %3 element %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 references identity constraint %2 that is no %3 or %4 element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has a different number of fields from the identity constraint %2 that it references.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Item type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Member type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Base type %1 of complex type cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 cannot have complex base type that has a %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Type of %1 element must be a simple type, %2 is not.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Substitution group %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Substitution group %1 has circular definition.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duplicated element names %1 in %2 element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Reference %1 of %2 element cannot be resolved.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Circular group reference for %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this scope</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute group %1 has circular reference.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 attribute in %2 must have %3 use like in base type %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 has attribute wildcard but its base type %2 has not.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Namespace prefix of qualified name %1 is not defined.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 is not valid according to %2.</source>
+ <translation type="unfinished">%1 non é válido segundo %2.</translation>
+ </message>
+ <message>
+ <source>String content does not match the length facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «length».</translation>
+ </message>
+ <message>
+ <source>String content does not match the minLength facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «minLength».</translation>
+ </message>
+ <message>
+ <source>String content does not match the maxLength facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «maxLength».</translation>
+ </message>
+ <message>
+ <source>String content does not match pattern facet.</source>
+ <translation type="unfinished">O contido da cadea non coincide coa faceta «pattern».</translation>
+ </message>
+ <message>
+ <source>String content is not listed in the enumeration facet.</source>
+ <translation type="unfinished">O contido da cadea non está enumerado na enumeración de facetas.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Double content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the fractionDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the totalDigits facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Date time content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minInclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minExclusive facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Duration content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Boolean content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the length facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the minLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content does not match the maxLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Binary content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Invalid QName content: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QName content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>QName content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Notation content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match length facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match minLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match maxLength facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>List content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Union content is not listed in the enumeration facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Union content does not match pattern facet.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Data of type %1 are not allowed to be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is missing child element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>There is one IDREF value with no corresponding ID: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loaded schema file is invalid.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1 contains invalid data.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No schema defined for validation.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No definition for element %1 available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not known to the schema.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not defined in this scope.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Declaration for element %1 does not exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains invalid content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is declared as abstract.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is not nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid data: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element contains content although it is nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Fixed value constraint not allowed if element is nillable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not validly substitutable with element type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Complex type %1 is not allowed to be abstract.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed attributes.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child element.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match its type definition: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match defined value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed text content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 cannot contain other elements, as it has a fixed content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 is missing required attribute %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 does not match the attribute wildcard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Declaration for attribute %1 does not exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains two attributes of type %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid content.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Element %1 contains unknown attribute %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match its type definition: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match defined value constraint.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Non-unique value found for constraint %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains absent fields.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains references nillable element %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No referenced value found for key reference %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>More than one value found for field %1.</source>
+ <translation type="unfinished">Atopouse máis dun valor para o campo %1.</translation>
+ </message>
+ <message>
+ <source>Field %1 has no simple type.</source>
+ <translation type="unfinished">O campo %1 non ten un tipo simple.</translation>
+ </message>
+ <message>
+ <source>ID value &apos;%1&apos; is not unique.</source>
+ <translation type="unfinished">O valor do ID «%1» non é único.</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
+ <translation type="unfinished">O atributo «%1» contén contido non válido para un QName: %2.</translation>
+ </message>
+ <message>
+ <source>empty</source>
+ <translation type="unfinished">baleiro</translation>
+ </message>
+ <message>
+ <source>zero or one</source>
+ <translation type="unfinished">cero ou un</translation>
+ </message>
+ <message>
+ <source>exactly one</source>
+ <translation type="unfinished">exactamente un</translation>
+ </message>
+ <message>
+ <source>one or more</source>
+ <translation type="unfinished">un ou máis</translation>
+ </message>
+ <message>
+ <source>zero or more</source>
+ <translation type="unfinished">cero ou máis</translation>
+ </message>
+ <message>
+ <source>Required type is %1, but %2 was found.</source>
+ <translation type="unfinished">O tipo requirido é %1, pero atopouse %2.</translation>
+ </message>
+ <message>
+ <source>Promoting %1 to %2 may cause loss of precision.</source>
+ <translation type="unfinished">Converter de %1 a %2 pode causar perda de precisión.</translation>
+ </message>
+ <message>
+ <source>The focus is undefined.</source>
+ <translation type="unfinished">O foco non está definido.</translation>
+ </message>
+ <message>
+ <source>It&apos;s not possible to add attributes after any other kind of node.</source>
+ <translation type="unfinished">Non é posíbel engadir atributos tras calquera outro tipo de nodo.</translation>
+ </message>
+ <message>
+ <source>An attribute by name %1 has already been created.</source>
+ <translation type="unfinished">Xa se creou un atributo co nome %1.</translation>
+ </message>
+ <message>
+ <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_help_sl.ts b/translations/qt_help_sl.ts
index 7d76e58..db9ab3c 100644
--- a/translations/qt_help_sl.ts
+++ b/translations/qt_help_sl.ts
@@ -177,7 +177,7 @@
</message>
<message>
<source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
- <translation>Sklicana datoteka %1 se mora nahajti v mapi (%1) ali njeni podmapi. Preskakujem jo.</translation>
+ <translation>Sklicana datoteka %1 se mora nahajti v mapi (%2) ali njeni podmapi. Preskakujem jo.</translation>
</message>
<message>
<source>The file %1 does not exist! Skipping it.</source>
diff --git a/translations/qt_sl.ts b/translations/qt_sl.ts
index 6bc552b..fb16fee 100644
--- a/translations/qt_sl.ts
+++ b/translations/qt_sl.ts
@@ -382,13 +382,13 @@ da je nameščen paket libgstreamer-plugins-base.</translation>
<source>Decay HF ratio (%)</source>
<extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.
</extracomment>
- <translation type="unfinished"></translation>
+ <translation>VF razmerje zamrtja (%)</translation>
</message>
<message>
<source>Decay time (ms)</source>
<extracomment>DecayTime: Time over which reverberation is diminished.
</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Čas zamrtja (ms)</translation>
</message>
<message>
<source>Density (%)</source>
@@ -1519,11 +1519,11 @@ v
</message>
<message>
<source>Empty signal assignment</source>
- <translation type="unfinished">Prazna prireditev signalu</translation>
+ <translation>Prazna prireditev signalu</translation>
</message>
<message>
<source>Empty property assignment</source>
- <translation type="unfinished">Prazna prireditev lastnosti</translation>
+ <translation>Prazna prireditev lastnosti</translation>
</message>
<message>
<source>Attached properties cannot be used here</source>
@@ -1717,19 +1717,19 @@ v
<name>QDeclarativeCompositeTypeManager</name>
<message>
<source>Resource %1 unavailable</source>
- <translation>Vir %1 ni na voljo</translation>
+ <translation type="obsolete">Vir %1 ni na voljo</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>Imenskega prostora %1 ni moč uporabiti kot vrste</translation>
+ <translation type="obsolete">Imenskega prostora %1 ni moč uporabiti kot vrste</translation>
</message>
<message>
<source>%1 %2</source>
- <translation>%1 %2</translation>
+ <translation type="obsolete">%1 %2</translation>
</message>
<message>
<source>Type %1 unavailable</source>
- <translation>Vrsta %1 ni na voljo</translation>
+ <translation type="obsolete">Vrsta %1 ni na voljo</translation>
</message>
</context>
<context>
@@ -1771,7 +1771,7 @@ v
</message>
<message>
<source>transaction: missing callback</source>
- <translation type="unfinished">transaction: manjka povratni klic</translation>
+ <translation>transaction: manjka povratni klic</translation>
</message>
<message>
<source>SQL: database version mismatch</source>
@@ -2113,6 +2113,25 @@ v
</message>
</context>
<context>
+ <name>QDeclarativeTypeData</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation>Skript %1 ni na voljo</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>Vrsta %1 ni na voljo</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>Imenskega prostora %1 ni moč uporabiti kot vrste</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeVME</name>
<message>
<source>Unable to create object of type %1</source>
@@ -2685,7 +2704,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<name>QFontDatabase</name>
<message>
<source>Normal</source>
- <translation>Normalno</translation>
+ <translation>Običajno</translation>
</message>
<message>
<source>Bold</source>
@@ -2697,7 +2716,7 @@ Ali jo kljub temu želite izbrisati?</translation>
</message>
<message>
<source>Black</source>
- <translation type="unfinished"></translation>
+ <translation>Krepko</translation>
</message>
<message>
<source>Demi</source>
@@ -2924,7 +2943,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<message>
<source>Connecting to host failed:
%1</source>
- <translation>Povezovanje z gostiteljem %1 ni uspelo:
+ <translation>Povezovanje z gostiteljem ni uspelo:
%1</translation>
</message>
<message>
@@ -3331,7 +3350,7 @@ Ali jo kljub temu želite izbrisati?</translation>
<name>QLibrary</name>
<message>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>Ni bilo moč izvesti funkcije mmap za »%1«: %2</translation>
+ <translation type="obsolete">Ni bilo moč izvesti funkcije mmap za »%1«: %2</translation>
</message>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
@@ -3339,7 +3358,7 @@ Ali jo kljub temu želite izbrisati?</translation>
</message>
<message>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>Ni bilo moč izvesti funkcije unmap za »%1«: %2</translation>
+ <translation type="obsolete">Ni bilo moč izvesti funkcije unmap za »%1«: %2</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
@@ -4618,15 +4637,15 @@ Izberite drugo ime datoteke.</translation>
</message>
<message>
<source>First page</source>
- <translation>&amp;Prva stran</translation>
+ <translation>Prva stran</translation>
</message>
<message>
<source>Last page</source>
- <translation>&amp;Zadnja stran</translation>
+ <translation>Zadnja stran</translation>
</message>
<message>
<source>Fit width</source>
- <translation>Prilagodi &amp;širini</translation>
+ <translation>Prilagodi širini</translation>
</message>
<message>
<source>Fit page</source>
@@ -6469,7 +6488,7 @@ Izberite drugo ime datoteke.</translation>
</message>
<message>
<source>Save edits?</source>
- <translation>&amp;Shranmi urejan?.</translation>
+ <translation>Ali shranim urejanja?.</translation>
</message>
<message>
<source>Cancel</source>
@@ -9770,428 +9789,4 @@ Izberite drugo ime datoteke.</translation>
<translation>Lastnost »%1« vsebuje neveljavno vsebino QName: %2.</translation>
</message>
</context>
-<context>
- <name></name>
- <message>
- <source>Remaining move time</source>
- <comment>QWebPage~|Media controller element</comment>
- <translation type="obsolete">Preostali čas filma</translation>
- </message>
- <message>
- <source>attribute group %1 contains attribute %2 twice</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina lastnosti %1 dvakrat vsebuje lastnost %2</translation>
- </message>
- <message>
- <source>complex type %1 contains attribute %2 twice</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">kompleksna vrsta %1 dvakrat vsebuje lastnost %2</translation>
- </message>
- <message>
- <source>element %1 exists twice with different types</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 obstaja dvakrat, z različnima vrstama</translation>
- </message>
- <message>
- <source>can not process unknown element %1, expected elements are: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">ni moč obdelati neznanega elementa %1, pričakovani elementi so: %2</translation>
- </message>
- <message>
- <source>element %1 is not allowed in this scope, possible elements are: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem obsegu ni dovoljen, možni elementi so: %2</translation>
- </message>
- <message>
- <source>child element is missing in that scope, possible child elements are: %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">v tem obsegu manjka podelement, možni podelementi so: %1</translation>
- </message>
- <message>
- <source>document is not a XML schema</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">dokument ni shema XML</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3} ni vrednost vrste %4</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element contains invalid content: {%3}</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 vsebuje neveljavno vsebino: {%3}</translation>
- </message>
- <message>
- <source>%1 element is not allowed inside %2 element if %3 attribute is present</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 znotraj elementa %2 ni dovoljen, če je prisotna lastnost %3</translation>
- </message>
- <message>
- <source>%1 element has neither %2 attribute nor %3 child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 nima niti lastnosti %2 niti podelementa %3</translation>
- </message>
- <message>
- <source>%1 element with %2 child element must not have a %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 s podelementom %2 ne sme imeti lastnosti %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must be %3 or %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora biti %3 ali %4</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must have a value of %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora imeti vrednost %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must have a value of %3 or %4</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 mora imeti vrednost %3 ali %4</translation>
- </message>
- <message>
- <source>%1 element must not have %2 and %3 attribute together</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 hkrati ne sme imeti lastnosti %2 in %3</translation>
- </message>
- <message>
- <source>content of %1 attribute of %2 element must not be from namespace %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vsebina lastnosti %1 elementa %2 ne sme biti iz imenskega prostora %3</translation>
- </message>
- <message>
- <source>%1 attribute of %2 element must not be %3</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 elementa %2 ne sme biti %3</translation>
- </message>
- <message>
- <source>%1 element must have either %2 or %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 mora imeti lastnost %2 ali %3</translation>
- </message>
- <message>
- <source>%1 element requires either %2 or %3 attribute</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 potrebuje vsaj lastnost %2 ali %3</translation>
- </message>
- <message>
- <source>%1 element is not allowed in this context</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem kontekstu ni dovoljen</translation>
- </message>
- <message>
- <source>component with id %1 has been defined previously</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">komponenta z ID-jem %1 je že bila definirana</translation>
- </message>
- <message>
- <source>element %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 je že definiran</translation>
- </message>
- <message>
- <source>attribute %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 je že definirana</translation>
- </message>
- <message>
- <source>type %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vrsta %1 je že definirana</translation>
- </message>
- <message>
- <source>attribute group %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina lastnosti %1 je že definirana</translation>
- </message>
- <message>
- <source>element group %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">skupina elementov %1 je že definirana</translation>
- </message>
- <message>
- <source>notation %1 already defined</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">zapis %1 je že definiran</translation>
- </message>
- <message>
- <source>type of %1 element must be a simple type, %2 is not</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vrsta elementa %1 mora biti preprosta, %2 to ni</translation>
- </message>
- <message>
- <source>duplicated element names %1 in %2 element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">podvojeni imeni elementov %1 v elementu %2</translation>
- </message>
- <message>
- <source>%1 is not valid according to %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">%1 glede na %2 ni veljaven</translation>
- </message>
- <message>
- <source>invalid QName content: %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">neveljavna vsebina QName: %1</translation>
- </message>
- <message>
- <source>data of type %1 are not allowed to be empty</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">podatki vrste %1 ne smejo biti prazni</translation>
- </message>
- <message>
- <source>element %1 is missing child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">elementu %1 manjka podelement</translation>
- </message>
- <message>
- <source>%1 contains invalid data</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">%1 vsebuje neveljavne podatke</translation>
- </message>
- <message>
- <source>no definition for element %1 available</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">definicija za element %1 ni na voljo</translation>
- </message>
- <message>
- <source>element %1 is not defined in this scope</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 v tem obsegu ni definiran</translation>
- </message>
- <message>
- <source>declaration for element %1 does not exist</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">deklaracija elementa %1 ne obstaja</translation>
- </message>
- <message>
- <source>element %1 contains invalid content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje neveljavno vsebino</translation>
- </message>
- <message>
- <source>element %1 is declared as abstract</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 je deklariran kot abstrakten</translation>
- </message>
- <message>
- <source>complex type %1 is not allowed to be abstract</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">kompleksna vrsta %1 ne sme biti abstraktna</translation>
- </message>
- <message>
- <source>element %1 contains not allowed attributes</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljene lastnosti</translation>
- </message>
- <message>
- <source>element %1 contains not allowed child element</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljen podelement</translation>
- </message>
- <message>
- <source>content of element %1 does not match its type definition: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">vsebina elementa %1 ne ustreza zanj določeni vrsti: %2</translation>
- </message>
- <message>
- <source>element %1 contains not allowed child content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljeno vsebino v podelementih</translation>
- </message>
- <message>
- <source>element %1 contains not allowed text content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje nedovoljeno besedilno vsebino</translation>
- </message>
- <message>
- <source>element %1 can not contain other elements, as it has a fixed content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 ne more vsebovati drugih elementov, ker ima fiksno vsebino</translation>
- </message>
- <message>
- <source>element %1 is missing required attribute %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">elementu %1 manjka obvezna lastnost %2</translation>
- </message>
- <message>
- <source>declaration for attribute %1 does not exist</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">deklaracija lastnosti %1 ne obstaja</translation>
- </message>
- <message>
- <source>element %1 contains two attributes of type %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje dve lastnosti vrste %2</translation>
- </message>
- <message>
- <source>attribute %1 contains invalid content</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">lastnost %1 vsebuje neveljavno vsebino</translation>
- </message>
- <message>
- <source>element %1 contains unknown attribute %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">element %1 vsebuje neznano lastnost %2</translation>
- </message>
- <message>
- <source>more than one value found for field %1</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">za polje %1 je bila najdena več kot ena vrednost</translation>
- </message>
- <message>
- <source>field %1 has no simple type</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">polje %1 nima preproste vrste</translation>
- </message>
- <message>
- <source>ID value &apos;%1&apos; is not unique</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">Vrednost ID »%1« ni edinstvena</translation>
- </message>
- <message>
- <source>&apos;%1&apos; attribute contains invalid QName content: %2</source>
- <comment>QtXmlPatterns~|</comment>
- <translation type="obsolete">Lastnost »%1« vsebuje neveljavno vsebino QName: %2</translation>
- </message>
- <message>
- <source>Cannot start playback.
-
-Check your Gstreamer installation and make sure you
-have libgstreamer-plugins-base installed.</source>
- <comment>Phonon::Gstreamer::MediaObject|</comment>
- <translation type="obsolete">Ni moč začeti predvajanja.
-
-Preverite namestitev GStreamerja in se prepričajte,
-da je nameščen paket libgstreamer-plugins-base.</translation>
- </message>
- <message>
- <source>Frequency band, %1 Hz</source>
- <comment>Phonon::MMF::AudioEqualizer|</comment>
- <translation type="obsolete">Frekvenčni pas, %1 Hz</translation>
- </message>
- <message>
- <source>audio equalizer</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">izenačevalnik zvoka</translation>
- </message>
- <message>
- <source>Bass boost</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Ojačanje basov</translation>
- </message>
- <message>
- <source>Distance Attenuation</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Utišanje zaradi razdalje</translation>
- </message>
- <message>
- <source>Environmental Reverb</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Okoljsko odmevanje</translation>
- </message>
- <message>
- <source>Loudness</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Glasnost</translation>
- </message>
- <message>
- <source>Source Orientation</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Usmerjenost vira</translation>
- </message>
- <message>
- <source>Stereo Widening</source>
- <comment>Phonon::MMF::EffectFactory|</comment>
- <translation type="obsolete">Razširitev sterea</translation>
- </message>
- <message>
- <source>Invalid hostname</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Neveljavno ime gostitelja</translation>
- </message>
- <message>
- <source>Operation not supported on %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Dejanje na %1 ni podprto</translation>
- </message>
- <message>
- <source>Invalid URI: %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Neveljaven URI: %1</translation>
- </message>
- <message>
- <source>Socket error on %1: %2</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Napaka vtičnice na %1: %2</translation>
- </message>
- <message>
- <source>Remote host closed the connection prematurely on %1</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Oddaljen gostitelj je predčasno prekinil povezavo na %1</translation>
- </message>
- <message>
- <source>No host name given</source>
- <comment>QObject|</comment>
- <translation type="obsolete">Podano ni bilo nobeno ime gostitelja</translation>
- </message>
- <message>
- <source>Private key does not certificate public key, %1</source>
- <comment>QSslSocket|</comment>
- <translation type="obsolete">Zasebni ključ ne potrjuje javnega ključa, %1</translation>
- </message>
- <message>
- <source>No variable by name %1 exists</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Spremenljivka z imenom %1 ne obstaja</translation>
- </message>
- <message>
- <source>No value is available for the external variable by name %1.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Za zunanjo spremenljivko z imenom %1 ni na voljo nobene vrednosti.</translation>
- </message>
- <message>
- <source>A template by name %1 has already been declared.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Predloga z imenom %1 je že bila deklarirana.</translation>
- </message>
- <message>
- <source>The value of attribute %1 must of type %2, which %3 isn&apos;t.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Vrednost lastnosti %1 mora biti vrste %2, %3 pa to ni.</translation>
- </message>
- <message>
- <source>A variable by name %1 has already been declared.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Spremenljivka z imenom %1 je že bila deklarirana.</translation>
- </message>
- <message>
- <source>An argument by name %1 has already been declared. Every argument name must be unique.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Argument z imenom %1 je že bil deklariran. Vsako ime argumenta mora biti edinstveno.</translation>
- </message>
- <message>
- <source>No function by name %1 is available.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Na voljo ni nobene funkcije z imenom %1.</translation>
- </message>
- <message>
- <source>An attribute by name %1 has already appeared on this element.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Atribut z imenom %1 se je v tem elementu že pojavil.</translation>
- </message>
- <message>
- <source>Component with id %1 has been defined previously.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Komponenta z ID-jem %1 je že bila definirana.</translation>
- </message>
- <message>
- <source>Element %1 can not contain other elements, as it has a fixed content.</source>
- <comment>QtXmlPatterns|</comment>
- <translation type="obsolete">Element %1 ne more vsebovati drugih elementov, ker ima fiksno vsebino.</translation>
- </message>
-</context>
</TS>
diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp
index f2ebe7c..cfe5956 100644
--- a/util/unicode/main.cpp
+++ b/util/unicode/main.cpp
@@ -403,7 +403,7 @@ struct PropertyFlags {
// from DerivedAge.txt
QChar::UnicodeVersion age : 4;
int digitValue;
- uint line_break_class : 6;
+ LineBreakClass line_break_class;
int mirrorDiff : 16;
@@ -429,7 +429,7 @@ static int appendToSpecialCaseMap(const QList<int> &map)
QList<int> utf16map;
for (int i = 0; i < map.size(); ++i) {
int val = map.at(i);
- if (val > 0xffff) {
+ if (val >= 0x10000) {
utf16map << QChar::highSurrogate(val);
utf16map << QChar::lowSurrogate(val);
} else {
@@ -505,7 +505,7 @@ struct UnicodeData {
// from BidiMirroring.txt
int mirroredChar;
- // CompositionExclusions.txt
+ // DerivedNormalizationProps.txt
bool excludedComposition;
// computed position of unicode property set
@@ -726,8 +726,8 @@ static void readUnicodeData()
data.p.category = categoryMap.value(properties[UD_Category], QChar::NoCategory);
if (data.p.category == QChar::NoCategory)
qFatal("unassigned char category: %s", properties[UD_Category].constData());
- data.p.combiningClass = properties[UD_CombiningClass].toInt();
+ data.p.combiningClass = properties[UD_CombiningClass].toInt();
if (!combiningClassUsage.contains(data.p.combiningClass))
combiningClassUsage[data.p.combiningClass] = 1;
else
@@ -738,27 +738,29 @@ static void readUnicodeData()
if (!properties[UD_UpperCase].isEmpty()) {
int upperCase = properties[UD_UpperCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(upperCase - codepoint) >= (1<<14))
+ int diff = upperCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "upperCaseDiff exceeded (" << hex << codepoint << "->" << upperCase << ")";
- data.p.upperCaseDiff = upperCase - codepoint;
- maxUpperCaseDiff = qMax(maxUpperCaseDiff, qAbs(data.p.upperCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.upperCaseDiff = diff;
+ maxUpperCaseDiff = qMax(maxUpperCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || upperCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our upper casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(upperCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(upperCase));
}
}
if (!properties[UD_LowerCase].isEmpty()) {
int lowerCase = properties[UD_LowerCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(lowerCase - codepoint) >= (1<<14))
+ int diff = lowerCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "lowerCaseDiff exceeded (" << hex << codepoint << "->" << lowerCase << ")";
- data.p.lowerCaseDiff = lowerCase - codepoint;
- maxLowerCaseDiff = qMax(maxLowerCaseDiff, qAbs(data.p.lowerCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.lowerCaseDiff = diff;
+ maxLowerCaseDiff = qMax(maxLowerCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || lowerCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our lower casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(lowerCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(lowerCase));
}
}
// we want toTitleCase to map to ToUpper in case we don't have any titlecase.
@@ -767,14 +769,15 @@ static void readUnicodeData()
if (!properties[UD_TitleCase].isEmpty()) {
int titleCase = properties[UD_TitleCase].toInt(&ok, 16);
Q_ASSERT(ok);
- if (qAbs(titleCase - codepoint) >= (1<<14))
+ int diff = titleCase - codepoint;
+ if (qAbs(diff) >= (1<<14))
qWarning() << "titleCaseDiff exceeded (" << hex << codepoint << "->" << titleCase << ")";
- data.p.titleCaseDiff = titleCase - codepoint;
- maxTitleCaseDiff = qMax(maxTitleCaseDiff, qAbs(data.p.titleCaseDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
+ data.p.titleCaseDiff = diff;
+ maxTitleCaseDiff = qMax(maxTitleCaseDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || titleCase >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our title casing code
Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(titleCase));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(titleCase));
}
}
@@ -1003,16 +1006,16 @@ static void readDerivedNormalizationProps()
&& d.decomposition.size() > 1) {
Q_ASSERT(d.decomposition.size() == 2);
- uint part1 = d.decomposition.at(0);
- uint part2 = d.decomposition.at(1);
+ int part1 = d.decomposition.at(0);
+ int part2 = d.decomposition.at(1);
// all non-starters are listed in DerivedNormalizationProps.txt
// and already excluded from composition
Q_ASSERT(unicodeData.value(part1, UnicodeData(part1)).p.combiningClass == 0);
++numLigatures;
- highestLigature = qMax(highestLigature, (int)part1);
- Ligature l = {(ushort)part1, (ushort)part2, codepoint};
+ highestLigature = qMax(highestLigature, part1);
+ Ligature l = {(ushort)part1, (ushort)part2, (ushort)codepoint};
ligatureHashes[part2].append(l);
}
}
@@ -1109,6 +1112,7 @@ static void computeUniqueProperties()
static void readLineBreak()
{
+ qDebug() << "Reading LineBreak.txt";
QFile f("data/LineBreak.txt");
if (!f.exists())
qFatal("Couldn't find LineBreak.txt");
@@ -1145,7 +1149,7 @@ static void readLineBreak()
Q_ASSERT(ok);
}
- LineBreakClass lb = line_break_map.value(l[1].trimmed(), LineBreak_Unassigned);
+ LineBreakClass lb = line_break_map.value(l[1], LineBreak_Unassigned);
if (lb == LineBreak_Unassigned)
qFatal("unassigned line break class: %s", l[1].constData());
@@ -1190,7 +1194,10 @@ static void readSpecialCasing()
bool ok;
int codepoint = l[0].trimmed().toInt(&ok, 16);
Q_ASSERT(ok);
- Q_ASSERT(codepoint <= 0xffff);
+
+ // if the condition below doesn't hold anymore we need to modify our
+ // lower/upper/title casing code and case folding code
+ Q_ASSERT(codepoint < 0x10000);
// qDebug() << "codepoint" << hex << codepoint;
// qDebug() << line;
@@ -1290,16 +1297,18 @@ static void readCaseFolding()
UnicodeData ud = unicodeData.value(codepoint, UnicodeData(codepoint));
if (foldMap.size() == 1) {
- if (qAbs(foldMap.at(0) - codepoint) >= (1<<14))
- qWarning() << "caseFoldDiff exceeded (" << hex << codepoint << "->" << foldMap.at(0) << ")";
- ud.p.caseFoldDiff = foldMap.at(0) - codepoint;
- maxCaseFoldDiff = qMax(maxCaseFoldDiff, qAbs(ud.p.caseFoldDiff));
- if (codepoint > 0xffff) {
- // if the condition below doesn't hold anymore we need to modify our case folding code
- //qDebug() << codepoint << QChar::highSurrogate(codepoint) << QChar::highSurrogate(foldMap.at(0));
- Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(foldMap.at(0)));
+ int caseFolded = foldMap.at(0);
+ int diff = caseFolded - codepoint;
+ if (qAbs(diff) >= (1<<14))
+ qWarning() << "caseFoldDiff exceeded (" << hex << codepoint << "->" << caseFolded << ")";
+ ud.p.caseFoldDiff = diff;
+ maxCaseFoldDiff = qMax(maxCaseFoldDiff, qAbs(diff));
+ if (codepoint >= 0x10000 || caseFolded >= 0x10000) {
+ // if the conditions below doesn't hold anymore we need to modify our case folding code
+ Q_ASSERT(QChar::highSurrogate(codepoint) == QChar::highSurrogate(caseFolded));
+ Q_ASSERT(QChar::lowSurrogate(codepoint) + diff == QChar::lowSurrogate(caseFolded));
}
- if (foldMap.at(0) != codepoint + ud.p.lowerCaseDiff)
+ if (caseFolded != codepoint + ud.p.lowerCaseDiff)
qDebug() << hex << codepoint;
} else {
qFatal("we currently don't support full case foldings");
@@ -1329,13 +1338,15 @@ static void readGraphemeBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1348,7 +1359,7 @@ static void readGraphemeBreak()
Q_ASSERT(ok);
}
- GraphemeBreak brk = grapheme_break_map.value(l[1].trimmed(), GraphemeBreak_Unassigned);
+ GraphemeBreak brk = grapheme_break_map.value(l[1], GraphemeBreak_Unassigned);
if (brk == GraphemeBreak_Unassigned)
qFatal("unassigned grapheme break class: %s", l[1].constData());
@@ -1378,13 +1389,15 @@ static void readWordBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1397,7 +1410,7 @@ static void readWordBreak()
Q_ASSERT(ok);
}
- WordBreak brk = word_break_map.value(l[1].trimmed(), WordBreak_Unassigned);
+ WordBreak brk = word_break_map.value(l[1], WordBreak_Unassigned);
if (brk == WordBreak_Unassigned)
qFatal("unassigned word break class: %s", l[1].constData());
@@ -1427,13 +1440,15 @@ static void readSentenceBreak()
int comment = line.indexOf('#');
if (comment >= 0)
line = line.left(comment);
+ line.replace(" ", "");
if (line.isEmpty())
continue;
QList<QByteArray> l = line.split(';');
+ Q_ASSERT(l.size() == 2);
- QByteArray codes = l[0].trimmed();
+ QByteArray codes = l[0];
codes.replace("..", ".");
QList<QByteArray> cl = codes.split('.');
@@ -1446,7 +1461,7 @@ static void readSentenceBreak()
Q_ASSERT(ok);
}
- SentenceBreak brk = sentence_break_map.value(l[1].trimmed(), SentenceBreak_Unassigned);
+ SentenceBreak brk = sentence_break_map.value(l[1], SentenceBreak_Unassigned);
if (brk == SentenceBreak_Unassigned)
qFatal("unassigned sentence break class: %s", l[1].constData());
@@ -1624,17 +1639,22 @@ static void readBlocks()
QByteArray blockName = line.mid(semicolon + 1);
int blockIndex = blockNames.indexOf(blockName);
- if (blockIndex < 0) {
+ if (blockIndex == -1) {
+ blockIndex = blockNames.size();
blockNames.append(blockName);
- blockIndex = blockNames.indexOf(blockName);
- Q_ASSERT(blockIndex >= 0);
}
- int dotdot = codePoints.indexOf("..");
- Q_ASSERT(dotdot >= 0);
- bool unused;
- int first = codePoints.left(dotdot).toInt(&unused, 16);
- int last = codePoints.mid(dotdot + 2).toInt(&unused, 16);
+ codePoints.replace("..", ".");
+ QList<QByteArray> cl = codePoints.split('.');
+
+ bool ok;
+ int first = cl[0].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ int last = first;
+ if (cl.size() == 2) {
+ last = cl[1].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ }
BlockInfo blockInfo = { blockIndex, first, last };
blockInfoList.append(blockInfo);
@@ -1670,7 +1690,6 @@ static void readScripts()
if (!f.exists())
qFatal("Couldn't find %s", files[i]);
-
f.open(QFile::ReadOnly);
while (!f.atEnd()) {
@@ -1693,28 +1712,25 @@ static void readScripts()
QByteArray scriptName = line.mid(semicolon + 1);
int scriptIndex = scriptNames.indexOf(scriptName);
- if (scriptIndex < 0) {
+ if (scriptIndex == -1) {
+ scriptIndex = scriptNames.size();
scriptNames.append(scriptName);
- scriptIndex = scriptNames.indexOf(scriptName);
- Q_ASSERT(scriptIndex >= 0);
}
- int dotdot = codePoints.indexOf("..");
- bool unused;
- int first = -1, last = -1;
- if (dotdot >= 0) {
- first = codePoints.left(dotdot).toInt(&unused, 16);
- last = codePoints.mid(dotdot + 2).toInt(&unused, 16);
- } else {
- first = codePoints.toInt(&unused, 16);
- }
+ codePoints.replace("..", ".");
+ QList<QByteArray> cl = codePoints.split('.');
- if (last != -1) {
- for (int i = first; i <= last; ++i)
- scriptAssignment[i] = scriptIndex;
- } else {
- scriptAssignment[first] = scriptIndex;
+ bool ok;
+ int first = cl[0].toInt(&ok, 16);
+ Q_ASSERT(ok);
+ int last = first;
+ if (cl.size() == 2) {
+ last = cl[1].toInt(&ok, 16);
+ Q_ASSERT(ok);
}
+
+ for (int i = first; i <= last; ++i)
+ scriptAssignment[i] = scriptIndex;
}
}
}
@@ -1849,21 +1865,18 @@ QByteArray createScriptTableDeclaration()
declaration += ", /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " */\n";
} else {
const int value = extraBlockList.size() + scriptSentinel;
- const int offset =
- ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
+ const int offset = ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
declaration += " ";
declaration += QByteArray::number(value);
declaration += ", /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " at offset ";
declaration += QByteArray::number(offset);
declaration += " */\n";
@@ -1880,16 +1893,14 @@ QByteArray createScriptTableDeclaration()
for (int i = 0; i < extraBlockList.size(); ++i) {
const int value = i + scriptSentinel;
- const int offset =
- ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
+ const int offset = ((value - scriptSentinel) * unicodeBlockSize) + unicodeBlockCount;
const ExtraBlock &extraBlock = extraBlockList.at(i);
const int block = extraBlock.block;
declaration += "\n\n /* U+";
declaration += QByteArray::number(block, 16).rightJustified(4, '0');
declaration += '-';
- declaration +=
- QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
+ declaration += QByteArray::number(block + unicodeBlockSize - 1, 16).rightJustified(4, '0');
declaration += " at offset ";
declaration += QByteArray::number(offset);
declaration += " */\n ";
@@ -1905,9 +1916,24 @@ QByteArray createScriptTableDeclaration()
else
declaration += ' ';
}
+ if (declaration.endsWith(' '))
+ declaration.chop(1);
}
declaration += "\n};\n\n} // namespace QUnicodeTables\n\n";
+ declaration +=
+ "Q_CORE_EXPORT int QT_FASTCALL QUnicodeTables::script(uint ucs4)\n"
+ "{\n"
+ " if (ucs4 > 0xffff)\n"
+ " return Common;\n"
+ " int script = uc_scripts[ucs4 >> 7];\n"
+ " if (script < ScriptSentinel)\n"
+ " return script;\n"
+ " script = (((script - ScriptSentinel) * UnicodeBlockSize) + UnicodeBlockCount);\n"
+ " script = uc_scripts[script + (ucs4 & 0x7f)];\n"
+ " return script;\n"
+ "}\n\n";
+
qDebug("createScriptTableDeclaration: table size is %d bytes",
unicodeBlockCount + (extraBlockList.size() * unicodeBlockSize));
@@ -2168,6 +2194,11 @@ static QByteArray createPropertyInfo()
" return uc_properties + index;\n"
"}\n\n";
+ out += "Q_CORE_EXPORT QUnicodeTables::LineBreakClass QT_FASTCALL QUnicodeTables::lineBreakClass(uint ucs4)\n"
+ "{\n"
+ " return (QUnicodeTables::LineBreakClass)qGetProp(ucs4)->line_break_class;\n"
+ "}\n\n";
+
out += "static const ushort specialCaseMap[] = {\n ";
for (int i = 0; i < specialCaseMap.size(); ++i) {
out += QByteArray(" 0x") + QByteArray::number(specialCaseMap.at(i), 16);
@@ -2204,7 +2235,7 @@ static QByteArray createCompositionInfo()
const int SMP_BLOCKSIZE = 256;
const int SMP_SHIFT = 8;
- if(SMP_END <= highestComposedCharacter)
+ if (SMP_END <= highestComposedCharacter)
qFatal("end of table smaller than highest composed character at %x", highestComposedCharacter);
QList<DecompositionBlock> blocks;
@@ -2417,15 +2448,15 @@ static QByteArray createLigatureInfo()
int uc = block*BMP_BLOCKSIZE + i;
QList<Ligature> l = ligatureHashes.value(uc);
if (!l.isEmpty()) {
- b.decompositionPositions.append(tableIndex);
qSort(l);
ligatures.append(l.size());
- for (int i = 0; i < l.size(); ++i) {
- Q_ASSERT(l.at(i).u2 == uc);
- ligatures.append(l.at(i).u1);
- ligatures.append(l.at(i).ligature);
+ for (int j = 0; j < l.size(); ++j) {
+ Q_ASSERT(l.at(j).u2 == uc);
+ ligatures.append(l.at(j).u1);
+ ligatures.append(l.at(j).ligature);
}
+ b.decompositionPositions.append(tableIndex);
tableIndex += 2*l.size() + 1;
} else {
b.decompositionPositions.append(0xffff);
@@ -2450,12 +2481,11 @@ static QByteArray createLigatureInfo()
qDebug(" %d unique blocks in BMP.", blocks.size());
qDebug(" block data uses: %d bytes", bmp_block_data);
qDebug(" trie data uses : %d bytes", bmp_trie);
- qDebug(" ligature data uses : %d bytes", ligatures.size()*2);
- qDebug(" memory usage: %d bytes", bmp_mem + ligatures.size() * 2);
+ qDebug("\n ligature data uses : %d bytes", ligatures.size()*2);
+ qDebug(" memory usage: %d bytes", bmp_mem + ligatures.size() * 2);
QByteArray out;
-
out += "static const unsigned short uc_ligature_trie[] = {\n";
// first write the map
@@ -2531,6 +2561,7 @@ QByteArray createCasingInfo()
return out;
}
+
int main(int, char **)
{
initAgeMap();
@@ -2650,14 +2681,14 @@ int main(int, char **)
f.write("\n");
f.write(scriptEnumDeclaration);
f.write("\n");
- f.write(lineBreakClass);
- f.write("\n");
f.write(grapheme_break_string);
f.write("\n");
f.write(word_break_string);
f.write("\n");
f.write(sentence_break_string);
f.write("\n");
+ f.write(lineBreakClass);
+ f.write("\n");
f.write(methods);
f.write("} // namespace QUnicodeTables\n\n"
"QT_END_NAMESPACE\n\n"