summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/embedded/fluidlauncher/fluidlauncher.pro3
-rw-r--r--demos/multimedia/player/player.pro10
-rw-r--r--demos/qmediaplayer/qmediaplayer.pro2
-rw-r--r--dist/changes-4.4.02
-rw-r--r--dist/changes-4.7.06
-rw-r--r--doc/src/examples/plugandpaint.qdoc2
-rw-r--r--doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp1
-rw-r--r--mkspecs/common/symbian/symbian-mmp.conf11
-rw-r--r--mkspecs/common/symbian/symbian.conf18
-rw-r--r--src/3rdparty/clucene/src/CLucene/util/bufferedstream.h2
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog26
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/wtf/VMTags.h39
-rw-r--r--src/3rdparty/javascriptcore/VERSION4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/UStringImpl.h1
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h8
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h2
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h5
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/StringImpl.h1
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.h2
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp4
-rw-r--r--src/3rdparty/webkit/WebCore/svg/SVGAnimatedPropertySynchronizer.h6
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathValue.cpp5
-rw-r--r--src/3rdparty/webkit/WebCore/xml/XPathValue.h13
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui10
-rw-r--r--src/corelib/animation/qabstractanimation.cpp77
-rw-r--r--src/corelib/animation/qabstractanimation_p.h11
-rw-r--r--src/corelib/io/qdatastream.cpp7
-rw-r--r--src/corelib/io/qfilesystemwatcher.cpp5
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp8
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp20
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h3
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp2
-rw-r--r--src/corelib/kernel/qobject.cpp53
-rw-r--r--src/corelib/kernel/qobject_p.h28
-rw-r--r--src/corelib/thread/qmutex.h18
-rw-r--r--src/corelib/tools/qdatetime.cpp9
-rw-r--r--src/gui/dialogs/qdialog.cpp14
-rw-r--r--src/gui/dialogs/qdialog.h2
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp3
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp12
-rw-r--r--src/gui/image/qicon.cpp19
-rw-r--r--src/gui/image/qicon.h2
-rw-r--r--src/gui/image/qiconengine.cpp20
-rw-r--r--src/gui/image/qiconengine.h5
-rw-r--r--src/gui/image/qiconloader.cpp6
-rw-r--r--src/gui/kernel/qapplication_win.cpp25
-rw-r--r--src/gui/kernel/qcocoamenuloader_mac.mm7
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h11
-rw-r--r--src/gui/kernel/qwidget.cpp6
-rw-r--r--src/gui/painting/qdrawhelper.cpp21
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp2
-rw-r--r--src/gui/painting/qpaintengineex.cpp3
-rw-r--r--src/gui/painting/qpainterpath.cpp2
-rw-r--r--src/gui/styles/qcommonstyle.cpp2
-rw-r--r--src/gui/styles/qmacstyle_mac.mm16
-rw-r--r--src/gui/text/qtextodfwriter.cpp12
-rw-r--r--src/gui/widgets/qabstractscrollarea.cpp1
-rw-r--r--src/gui/widgets/qmenu_mac.mm19
-rw-r--r--src/network/bearer/qnetworkconfigmanager_p.cpp2
-rw-r--r--src/network/kernel/qhostinfo.cpp22
-rw-r--r--src/network/kernel/qhostinfo_p.h3
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp6
-rw-r--r--src/opengl/qglextensions.cpp11
-rw-r--r--src/opengl/qpixmapdata_x11gl_egl.cpp19
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.h41
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.mm671
-rw-r--r--src/plugins/bearer/generic/qgenericengine.cpp5
-rw-r--r--src/plugins/bearer/generic/qgenericengine.h1
-rw-r--r--src/plugins/bearer/icd/qicdengine.cpp8
-rw-r--r--src/plugins/bearer/icd/qicdengine.h2
-rw-r--r--src/plugins/bearer/nativewifi/qnativewifiengine.cpp7
-rw-r--r--src/plugins/bearer/nativewifi/qnativewifiengine.h1
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp6
-rw-r--r--src/plugins/bearer/networkmanager/qnetworkmanagerengine.h3
-rw-r--r--src/plugins/bearer/symbian/symbianengine.cpp7
-rw-r--r--src/plugins/bearer/symbian/symbianengine.h1
-rw-r--r--src/script/api/qscriptengine.cpp4
-rw-r--r--src/script/bridge/qscriptqobject.cpp9
-rw-r--r--src/script/bridge/qscriptvariant.cpp6
-rw-r--r--src/src.pro2
-rw-r--r--src/svg/qsvghandler.cpp9
-rw-r--r--tests/auto/collections/tst_collections.cpp1
-rw-r--r--tests/auto/qdialog/tst_qdialog.cpp8
-rw-r--r--tests/auto/qdiriterator/tst_qdiriterator.cpp10
-rw-r--r--tests/auto/qfiledialog/tst_qfiledialog.cpp2
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp38
-rw-r--r--tests/auto/qgraphicsview/tst_qgraphicsview.cpp28
-rw-r--r--tests/auto/qhostinfo/tst_qhostinfo.cpp45
-rw-r--r--tests/auto/qicon/tst_qicon.cpp23
-rw-r--r--tests/auto/qitemmodel/tst_qitemmodel.cpp2
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp31
-rw-r--r--tests/auto/qthread/tst_qthread.cpp4
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/main.cpp9
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/object.cpp3
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/object.h1
-rw-r--r--tools/assistant/tools/assistant/helpviewer.cpp11
-rw-r--r--tools/assistant/tools/assistant/helpviewer.h3
-rw-r--r--tools/assistant/tools/assistant/helpviewer_qwv.cpp22
-rw-r--r--tools/designer/src/components/propertyeditor/propertyeditor.cpp2
-rw-r--r--tools/designer/src/lib/shared/filterwidget.cpp14
-rw-r--r--tools/pixeltool/qpixeltool.cpp2
-rw-r--r--tools/qdoc3/config.h1
-rw-r--r--tools/qdoc3/doc.cpp11
-rw-r--r--tools/qdoc3/htmlgenerator.cpp424
-rw-r--r--tools/qdoc3/htmlgenerator.h1
-rw-r--r--tools/qdoc3/test/assistant.qdocconf40
-rw-r--r--tools/qdoc3/test/designer.qdocconf40
-rw-r--r--tools/qdoc3/test/linguist.qdocconf40
-rw-r--r--tools/qdoc3/test/qdeclarative.qdocconf41
-rw-r--r--tools/qdoc3/test/qmake.qdocconf40
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf21
-rw-r--r--tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf20
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf18
-rw-r--r--tools/qdoc3/test/qt.qdocconf21
-rw-r--r--tools/qdoc3/test/qt_zh_CN.qdocconf20
-rw-r--r--tools/qtconfig/mainwindow.cpp2
-rw-r--r--tools/qtestlib/wince/cetest/main.cpp8
-rw-r--r--translations/assistant_de.ts40
-rw-r--r--translations/designer_de.ts95
-rw-r--r--translations/linguist_de.ts27
-rw-r--r--translations/qt_de.ts744
-rw-r--r--translations/qt_help_de.ts26
125 files changed, 2287 insertions, 1142 deletions
diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro
index 13274c3..c6a105e 100644
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro
@@ -57,9 +57,10 @@ wince*{
symbian {
load(data_caging_paths)
+ include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+ RSS_RULES = # Clear RSS_RULES, otherwise fluidlauncher will get put into QtDemos folder
TARGET.UID3 = 0xA000A641
- ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
defineReplace(regResourceDir) {
symbian-abld|symbian-sbsv2 {
diff --git a/demos/multimedia/player/player.pro b/demos/multimedia/player/player.pro
index fb93416..0b868bd 100644
--- a/demos/multimedia/player/player.pro
+++ b/demos/multimedia/player/player.pro
@@ -3,7 +3,6 @@ TARGET = player
QT += gui mediaservices
-
HEADERS = \
player.h \
playercontrols.h \
@@ -18,5 +17,12 @@ SOURCES = \
videowidget.cpp
target.path = $$[QT_INSTALL_DEMOS]/multimedia/player
-INSTALLS += target
+sources.files = $$SOURCES $$HEADERS *.pro
+sources.path = $$[QT_INSTALL_DEMOS]/multimedia/player
+
+INSTALLS += target sources
+
+symbian {
+ TARGET.UID3 = 0xA000E3FA
+}
diff --git a/demos/qmediaplayer/qmediaplayer.pro b/demos/qmediaplayer/qmediaplayer.pro
index 9407a81..cfe3905 100644
--- a/demos/qmediaplayer/qmediaplayer.pro
+++ b/demos/qmediaplayer/qmediaplayer.pro
@@ -17,7 +17,7 @@ HEADERS += mediaplayer.h
target.path = $$[QT_INSTALL_DEMOS]/qmediaplayer
sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES *.pro *.html *.doc images
-sources.path = $$[QT_INSTALL_DEMOS]/qmediaplayer
+sources.path = $$[QT_INSTALL_DEMOS]/qmediaplayer qmediaplayer.pro
INSTALLS += target sources
wince*{
diff --git a/dist/changes-4.4.0 b/dist/changes-4.4.0
index a33b510..3e7d14d 100644
--- a/dist/changes-4.4.0
+++ b/dist/changes-4.4.0
@@ -1999,7 +1999,7 @@ Qt for Embedded Linux
* Made the SL5000, USB, VR41xx and Yopy drivers available as plugins.
- Decoration drivers
- * Made the Styled, Windows and Default decorations avaiable as plugins
+ * Made the Styled, Windows and Default decorations available as plugins
- Demo applications
* Added embeddedsvgviewer, styledemo & fluidlauncher applications to
diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0
index b9aa64d..d5b4672 100644
--- a/dist/changes-4.7.0
+++ b/dist/changes-4.7.0
@@ -8,11 +8,11 @@ The Qt version 4.7 series is binary compatible with the 4.6.x series.
Applications compiled for 4.6 will continue to run with 4.7.
Some of the changes listed in this file include issue tracking numbers
-corresponding to tasks in the Task Tracker:
+corresponding to tasks in the Qt Bug Tracker:
- http://qt.nokia.com/developer/task-tracker
+ http://bugreports.qt.nokia.com/
-Each of these identifiers can be entered in the task tracker to obtain more
+Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
diff --git a/doc/src/examples/plugandpaint.qdoc b/doc/src/examples/plugandpaint.qdoc
index a502e18..0e2bfd0 100644
--- a/doc/src/examples/plugandpaint.qdoc
+++ b/doc/src/examples/plugandpaint.qdoc
@@ -513,7 +513,7 @@
Since the approach is identical to
\l{tools/plugandpaintplugins/basictools}{Basic Tools}, we won't
- review the code here. The only part of interes is the
+ review the code here. The only part of interest is the
\c .pro file, since Extra Filters is a dynamic plugin
(\l{tools/plugandpaintplugins/basictools}{Basic Tools} is
linked statically into the Plug & Paint executable).
diff --git a/doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp b/doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp
index d97d61a..800a332 100644
--- a/doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp
+++ b/doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp
@@ -40,5 +40,6 @@
****************************************************************************/
//! [0]
+#include <QDBusMetaType>
qDBusRegisterMetaType<MyClass>();
//! [0]
diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf
index 507b60c..1ab228f 100644
--- a/mkspecs/common/symbian/symbian-mmp.conf
+++ b/mkspecs/common/symbian/symbian-mmp.conf
@@ -38,17 +38,6 @@ INCLUDEPATH = \
# RVCT seems to do this automatically, but WINSCW compiler does not, so add it here.
MMP_RULES += "USERINCLUDE ."
-# Supports S60 3.0, 3.1, 3.2 and 5.0 by default
-default_deployment.pkg_prerules = \
- "; Default HW/platform dependencies" \
- "[0x101F7961],0,0,0,{\"S60ProductID\"}" \
- "[0x102032BE],0,0,0,{\"S60ProductID\"}" \
- "[0x102752AE],0,0,0,{\"S60ProductID\"}" \
- "[0x1028315F],0,0,0,{\"S60ProductID\"}" \
- " "
-
-DEPLOYMENT += default_deployment
-
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
} else {
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 1df3671..0bd0bf2 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -112,3 +112,21 @@ QMAKE_GZIP = gzip -9f
QT_ARCH = symbian
load(qt_config)
load(symbian/platform_paths)
+
+# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
+# if multiple languages need to be supported by pkg file. In that case the developer should declare
+# multiple language compatible dependency statements him/herself.
+
+default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
+
+# Supports S60 3.0, 3.1, 3.2 and 5.0 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\"}" \
+ " "
+
+DEPLOYMENT += default_deployment
+
diff --git a/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h b/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h
index b73ad98..d905955 100644
--- a/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h
+++ b/src/3rdparty/clucene/src/CLucene/util/bufferedstream.h
@@ -46,7 +46,7 @@ protected:
/**
* This function must be implemented by the subclasses.
* It should write a maximum of @p space characters at the buffer
- * position pointed to by @p start. If no more data is avaiable due to
+ * position pointed to by @p start. If no more data is available due to
* end of file, -1 should be returned. If an error occurs, the status
* should be set to Error, an error message should be set and the function
* must return -1.
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog b/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
index 4f6e565..11572b0 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
@@ -1,3 +1,29 @@
+2010-04-14 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Mac OS X: Use deployment target to determine whether memory tagging should be enabled
+ https://bugs.webkit.org/show_bug.cgi?id=34888
+
+ When building on (Snow) Leopard but targeting Tiger
+ (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined),
+ WebKit would crash on Tiger because the tags passed to mmap
+ caused those function calls to fail.
+
+ Conversely, when building on Tiger but targeting Leopard
+ (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit
+ would crash on Leopard because the tags passed to vm_map and
+ vm_allocate caused those function calls to fail.
+
+ Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to
+ govern the tag definitions. Use the same tags for vm_map and
+ vm_allocate regardless of target, since they work on
+ both. Fall back to the mmap tags that work on Tiger (that is,
+ "no tags") if targeting Tiger, since those tags also work on
+ Leopard.
+
+ * wtf/VMTags.h:
+
2010-03-29 Patrick Gansterer <paroga@paroga.com>
Reviewed by Darin Adler.
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/VMTags.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/VMTags.h
index 34e2494..75bec11 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/VMTags.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/VMTags.h
@@ -30,25 +30,48 @@
// On Mac OS X, the VM subsystem allows tagging memory requested from mmap and vm_map
// in order to aid tools that inspect system memory use.
-#if OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#if OS(DARWIN)
#include <mach/vm_statistics.h>
+#if !defined(TARGETING_TIGER)
+
#if defined(VM_MEMORY_TCMALLOC)
#define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(VM_MEMORY_TCMALLOC)
#else
#define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(53)
#endif // defined(VM_MEMORY_TCMALLOC)
-#if defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
-#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE)
-#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#if defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
#else
-#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63)
#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(64)
+#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
+
+#if defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#else
#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(65)
-#endif // defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
+#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+
+#else // !defined(TARGETING_TIGER)
+
+// mmap on Tiger fails with tags that work on Leopard, so fall
+// back to Tiger-compatible tags (that also work on Leopard)
+// when targeting Tiger.
+#define VM_TAG_FOR_TCMALLOC_MEMORY -1
+#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY -1
+#define VM_TAG_FOR_REGISTERFILE_MEMORY -1
+
+#endif // !defined(TARGETING_TIGER)
+
+// Tags for vm_map and vm_allocate work on both Tiger and Leopard.
+
+#if defined(VM_MEMORY_JAVASCRIPT_CORE)
+#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE)
+#else
+#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63)
+#endif // defined(VM_MEMORY_JAVASCRIPT_CORE)
#if defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
@@ -56,7 +79,7 @@
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(69)
#endif // defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
-#else // OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#else // OS(DARWIN)
#define VM_TAG_FOR_TCMALLOC_MEMORY -1
#define VM_TAG_FOR_COLLECTOR_MEMORY -1
@@ -64,6 +87,6 @@
#define VM_TAG_FOR_REGISTERFILE_MEMORY -1
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY -1
-#endif // OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#endif // OS(DARWIN)
#endif // VMTags_h
diff --git a/src/3rdparty/javascriptcore/VERSION b/src/3rdparty/javascriptcore/VERSION
index 2b885a7..9a02027 100644
--- a/src/3rdparty/javascriptcore/VERSION
+++ b/src/3rdparty/javascriptcore/VERSION
@@ -4,8 +4,8 @@ This is a snapshot of JavaScriptCore from
The commit imported was from the
- javascriptcore-snapshot-07042010 branch/tag
+ javascriptcore-snapshot-20042010 branch/tag
and has the sha1 checksum
- 475f8c67522d8b3f3163dc3a6b24d6083fd0ac19
+ c589321ffdda5e93cf77e2cf2cf43afe3e996f6e
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
index 6f23c7d..dab7f51 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
@@ -168,14 +168,14 @@ inline void Structure::transitionTableAdd(const StructureTransitionTableHash::Ke
if (!specificValue) {
TransitionTable::iterator find = transitionTable()->find(key);
if (find == transitionTable()->end())
- transitionTable()->add(key, Transition(structure, 0));
+ transitionTable()->add(key, Transition(structure, (Structure*)0));
else
find->second.first = structure;
} else {
// If we're adding a transition to a specific value, then there cannot be
// an existing transition
ASSERT(!transitionTable()->contains(key));
- transitionTable()->add(key, Transition(0, structure));
+ transitionTable()->add(key, Transition((Structure*)0, structure));
}
}
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/UStringImpl.h b/src/3rdparty/webkit/JavaScriptCore/runtime/UStringImpl.h
index 4dccb25..065443a 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/UStringImpl.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/UStringImpl.h
@@ -58,7 +58,6 @@ protected:
};
using Noncopyable::operator new;
- void* operator new(size_t, void* inPlace) { return inPlace; }
// For SmallStringStorage, which allocates an array and uses an in-place new.
UStringOrRopeImpl() { }
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h b/src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h
index 09094d1..4631055 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/HashMap.h
@@ -88,9 +88,9 @@ namespace WTF {
// must have the following function members:
// static unsigned hash(const T&);
// static bool equal(const ValueType&, const T&);
- template<typename T, typename HashTranslator> iterator find(const T&);
- template<typename T, typename HashTranslator> const_iterator find(const T&) const;
- template<typename T, typename HashTranslator> bool contains(const T&) const;
+ template<typename TYPE, typename HashTranslator> iterator find(const TYPE&);
+ template<typename TYPE, typename HashTranslator> const_iterator find(const TYPE&) const;
+ template<typename TYPE, typename HashTranslator> bool contains(const TYPE&) const;
// An alternate version of add() that finds the object by hashing and comparing
// with some other type, to avoid the cost of type conversion if the object is already
@@ -98,7 +98,7 @@ namespace WTF {
// static unsigned hash(const T&);
// static bool equal(const ValueType&, const T&);
// static translate(ValueType&, const T&, unsigned hashCode);
- template<typename T, typename HashTranslator> pair<iterator, bool> add(const T&, const MappedType&);
+ template<typename TYPE, typename HashTranslator> pair<iterator, bool> add(const TYPE&, const MappedType&);
void checkConsistency() const;
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
index a0c7466..49d6ec3 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
@@ -122,8 +122,10 @@ inline double trunc(double num) { return num > 0 ? floor(num) : ceil(num); }
#endif
#if COMPILER(MSVC)
-
+// The 64bit version of abs() is already defined in stdlib.h which comes with VC10
+#if COMPILER(MSVC9)
inline long long abs(long long num) { return _abs64(num); }
+#endif
inline bool isinf(double num) { return !_finite(num) && !_isnan(num); }
inline bool isnan(double num) { return !!_isnan(num); }
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
index fa78b45..2a5a48f 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
@@ -63,6 +63,8 @@
#define WTF_COMPILER_MSVC 1
#if _MSC_VER < 1400
#define WTF_COMPILER_MSVC7 1
+#elif _MSC_VER < 1600
+#define WTF_COMPILER_MSVC9 1
#endif
#endif
diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h
index 8eb55c1..2ad437b 100644
--- a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h
+++ b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMGlobalObject.h
@@ -70,6 +70,9 @@ namespace WebCore {
virtual const JSC::ClassInfo* classInfo() const { return &s_info; }
static const JSC::ClassInfo s_info;
+ private:
+ static void destroyJSDOMGlobalObjectData(void*);
+
protected:
struct JSDOMGlobalObjectData : public JSC::JSGlobalObject::JSGlobalObjectData {
JSDOMGlobalObjectData(DOMWrapperWorld* world, Destructor destructor = destroyJSDOMGlobalObjectData)
@@ -89,8 +92,6 @@ namespace WebCore {
};
private:
- static void destroyJSDOMGlobalObjectData(void*);
-
JSDOMGlobalObjectData* d() const { return static_cast<JSDOMGlobalObjectData*>(JSC::JSVariableObject::d); }
};
diff --git a/src/3rdparty/webkit/WebCore/platform/text/StringImpl.h b/src/3rdparty/webkit/WebCore/platform/text/StringImpl.h
index 81cd149..9a62cba 100644
--- a/src/3rdparty/webkit/WebCore/platform/text/StringImpl.h
+++ b/src/3rdparty/webkit/WebCore/platform/text/StringImpl.h
@@ -249,7 +249,6 @@ public:
private:
using Noncopyable::operator new;
- void* operator new(size_t, void* inPlace) { ASSERT(inPlace); return inPlace; }
static PassRefPtr<StringImpl> createStrippingNullCharactersSlowCase(const UChar*, unsigned length);
diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
index baaa8b9..ab73891 100644
--- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
@@ -108,7 +108,7 @@ String TextStream::release()
return String::adopt(m_text);
}
-#if OS(WINDOWS) && PLATFORM(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
TextStream& TextStream::operator<<(__int64 i)
{
char buffer[printBufferSize];
diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
index dfaa048..1225505 100644
--- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
+++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
@@ -45,7 +45,7 @@ public:
TextStream& operator<<(const char*);
TextStream& operator<<(void*);
TextStream& operator<<(const String&);
-#if OS(WINDOWS) && PLATFORM(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
TextStream& operator<<(unsigned __int64);
TextStream& operator<<(__int64);
#endif
diff --git a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
index 01e425f..9d869ab 100644
--- a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
@@ -140,7 +140,7 @@ static BYTE* endPaint;
typedef HDC (WINAPI *PtrBeginPaint)(HWND, PAINTSTRUCT*);
typedef BOOL (WINAPI *PtrEndPaint)(HWND, const PAINTSTRUCT*);
-#if OS(WINDOWS) && PLATFORM(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
extern "C" HDC __stdcall _HBeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
extern "C" BOOL __stdcall _HEndPaint(HWND hWnd, const PAINTSTRUCT* lpPaint);
#endif
@@ -978,7 +978,7 @@ bool PluginView::platformStart()
// Calling SetWindowLongPtrA here makes the window proc ASCII, which is required by at least
// the Shockwave Director plug-in.
-#if OS(WINDOWS) && PLATFORM(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
::SetWindowLongPtrA(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)DefWindowProcA);
#elif OS(WINCE)
::SetWindowLong(platformPluginWidget(), GWL_WNDPROC, (LONG)DefWindowProc);
diff --git a/src/3rdparty/webkit/WebCore/svg/SVGAnimatedPropertySynchronizer.h b/src/3rdparty/webkit/WebCore/svg/SVGAnimatedPropertySynchronizer.h
index ddd0493..695b71e 100644
--- a/src/3rdparty/webkit/WebCore/svg/SVGAnimatedPropertySynchronizer.h
+++ b/src/3rdparty/webkit/WebCore/svg/SVGAnimatedPropertySynchronizer.h
@@ -41,13 +41,15 @@ struct GetOwnerElementForType<OwnerType, true> : public Noncopyable {
template<typename OwnerType>
struct GetOwnerElementForType<OwnerType, false> : public Noncopyable {
- static SVGElement* ownerElement(OwnerType* type)
+ static SVGElement* ownerElement(OwnerType* type);
+};
+template<typename OwnerType>
+SVGElement* GetOwnerElementForType<OwnerType, false>::ownerElement(OwnerType* type)
{
SVGElement* context = type->contextElement();
ASSERT(context);
return context;
}
-};
// IsDerivedFromSVGElement implementation
template<typename OwnerType>
diff --git a/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp b/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp
index 29e211e..f5acb38 100644
--- a/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp
+++ b/src/3rdparty/webkit/WebCore/xml/XPathValue.cpp
@@ -68,7 +68,12 @@ NodeSet& Value::modifiableNodeSet()
return m_data->m_nodeSet;
}
+#if COMPILER(WINSCW)
+// FIXME --nl-- Symbian WINSCW compiler complains with 'ambiguous access to overloaded function' (double, unsigned long, unsigned int)
+unsigned int Value::toBoolean() const
+#else
bool Value::toBoolean() const
+#endif
{
switch (m_type) {
case NodeSetValue:
diff --git a/src/3rdparty/webkit/WebCore/xml/XPathValue.h b/src/3rdparty/webkit/WebCore/xml/XPathValue.h
index a0cd24d..bd44c91 100644
--- a/src/3rdparty/webkit/WebCore/xml/XPathValue.h
+++ b/src/3rdparty/webkit/WebCore/xml/XPathValue.h
@@ -66,8 +66,11 @@ namespace WebCore {
Value(Node* value) : m_type(NodeSetValue), m_bool(false), m_number(0), m_data(ValueData::create()) { m_data->m_nodeSet.append(value); }
// This is needed to safely implement constructing from bool - with normal function overloading, any pointer type would match.
+#if COMPILER(WINSCW)
+ Value(bool);
+#else
template<typename T> Value(T);
-
+#endif
static const struct AdoptTag {} adopt;
Value(NodeSet& value, const AdoptTag&) : m_type(NodeSetValue), m_bool(false), m_number(0), m_data(ValueData::create()) { value.swap(m_data->m_nodeSet); }
@@ -80,7 +83,12 @@ namespace WebCore {
const NodeSet& toNodeSet() const;
NodeSet& modifiableNodeSet();
+#if COMPILER(WINSCW)
+ // FIXME --nl-- Symbian WINSCW compiler complains with 'ambiguous access to overloaded function' (double, unsigned long, unsigned int)
+ unsigned int toBoolean() const;
+#else
bool toBoolean() const;
+#endif
double toNumber() const;
String toString() const;
@@ -90,8 +98,9 @@ namespace WebCore {
double m_number;
RefPtr<ValueData> m_data;
};
-
+#if !COMPILER(WINSCW)
template<>
+#endif
inline Value::Value(bool value)
: m_type(BooleanValue)
, m_bool(value)
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
index 4f2b3b8..ae5e0b5 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
+++ b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Widget</string>
+ <string notr="true">Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -28,7 +28,7 @@
<item>
<widget class="QLabel" name="lbl1">
<property name="text">
- <string/>
+ <string notr="true"/>
</property>
</widget>
</item>
@@ -47,21 +47,21 @@
</size>
</property>
<property name="text">
- <string>Image from Qt to HTML</string>
+ <string notr="true">Image from Qt to HTML</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl3">
<property name="text">
- <string>Pixmap from Qt to HTML</string>
+ <string notr="true">Pixmap from Qt to HTML</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl4">
<property name="text">
- <string/>
+ <string notr="true"/>
</property>
</widget>
</item>
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 82b3003..01570ad 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -173,11 +173,12 @@ QUnifiedTimer::QUnifiedTimer() :
time.invalidate();
}
-QUnifiedTimer *QUnifiedTimer::instance()
+
+QUnifiedTimer *QUnifiedTimer::instance(bool create)
{
QUnifiedTimer *inst;
#ifndef QT_NO_THREAD
- if (!unifiedTimer()->hasLocalData()) {
+ if (create && !unifiedTimer()->hasLocalData()) {
inst = new QUnifiedTimer;
unifiedTimer()->setLocalData(inst);
} else {
@@ -190,10 +191,16 @@ QUnifiedTimer *QUnifiedTimer::instance()
return inst;
}
+QUnifiedTimer *QUnifiedTimer::instance()
+{
+ return instance(true);
+}
+
void QUnifiedTimer::ensureTimerUpdate()
{
- if (isPauseTimerActive)
- updateAnimationsTime();
+ QUnifiedTimer *inst = QUnifiedTimer::instance(false);
+ if (inst && inst->isPauseTimerActive)
+ inst->updateAnimationsTime();
}
void QUnifiedTimer::updateAnimationsTime()
@@ -219,6 +226,13 @@ void QUnifiedTimer::updateAnimationsTime()
}
}
+void QUnifiedTimer::updateAnimationTimer()
+{
+ QUnifiedTimer *inst = QUnifiedTimer::instance(false);
+ if (inst)
+ inst->restartAnimationTimer();
+}
+
void QUnifiedTimer::restartAnimationTimer()
{
if (runningLeafAnimations == 0 && !runningPauseAnimations.isEmpty()) {
@@ -269,34 +283,41 @@ void QUnifiedTimer::timerEvent(QTimerEvent *event)
void QUnifiedTimer::registerAnimation(QAbstractAnimation *animation, bool isTopLevel)
{
- registerRunningAnimation(animation);
+ QUnifiedTimer *inst = instance(true); //we create the instance if needed
+ inst->registerRunningAnimation(animation);
if (isTopLevel) {
Q_ASSERT(!QAbstractAnimationPrivate::get(animation)->hasRegisteredTimer);
QAbstractAnimationPrivate::get(animation)->hasRegisteredTimer = true;
- animationsToStart << animation;
- if (!startStopAnimationTimer.isActive())
- startStopAnimationTimer.start(STARTSTOP_TIMER_DELAY, this);
+ inst->animationsToStart << animation;
+ if (!inst->startStopAnimationTimer.isActive())
+ inst->startStopAnimationTimer.start(STARTSTOP_TIMER_DELAY, inst);
}
}
void QUnifiedTimer::unregisterAnimation(QAbstractAnimation *animation)
{
- unregisterRunningAnimation(animation);
+ QUnifiedTimer *inst = QUnifiedTimer::instance(false);
+ if (inst) {
+ //at this point the unified timer should have been created
+ //but it might also have been already destroyed in case the application is shutting down
- if (!QAbstractAnimationPrivate::get(animation)->hasRegisteredTimer)
- return;
+ inst->unregisterRunningAnimation(animation);
- int idx = animations.indexOf(animation);
- if (idx != -1) {
- animations.removeAt(idx);
- // this is needed if we unregister an animation while its running
- if (idx <= currentAnimationIdx)
- --currentAnimationIdx;
+ if (!QAbstractAnimationPrivate::get(animation)->hasRegisteredTimer)
+ return;
- if (animations.isEmpty() && !startStopAnimationTimer.isActive())
- startStopAnimationTimer.start(STARTSTOP_TIMER_DELAY, this);
- } else {
- animationsToStart.removeOne(animation);
+ int idx = inst->animations.indexOf(animation);
+ if (idx != -1) {
+ inst->animations.removeAt(idx);
+ // this is needed if we unregister an animation while its running
+ if (idx <= inst->currentAnimationIdx)
+ --inst->currentAnimationIdx;
+
+ if (inst->animations.isEmpty() && !inst->startStopAnimationTimer.isActive())
+ inst->startStopAnimationTimer.start(STARTSTOP_TIMER_DELAY, inst);
+ } else {
+ inst->animationsToStart.removeOne(animation);
+ }
}
QAbstractAnimationPrivate::get(animation)->hasRegisteredTimer = false;
}
@@ -371,11 +392,11 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
bool isTopLevel = !group || group->state() == QAbstractAnimation::Stopped;
if (oldState == QAbstractAnimation::Running) {
if (newState == QAbstractAnimation::Paused && hasRegisteredTimer)
- QUnifiedTimer::instance()->ensureTimerUpdate();
+ QUnifiedTimer::ensureTimerUpdate();
//the animation, is not running any more
- QUnifiedTimer::instance()->unregisterAnimation(q);
+ QUnifiedTimer::unregisterAnimation(q);
} else if (newState == QAbstractAnimation::Running) {
- QUnifiedTimer::instance()->registerAnimation(q, isTopLevel);
+ QUnifiedTimer::registerAnimation(q, isTopLevel);
}
q->updateState(newState, oldState);
@@ -397,7 +418,7 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
if (oldState == QAbstractAnimation::Stopped) {
if (isTopLevel) {
// currentTime needs to be updated if pauseTimer is active
- QUnifiedTimer::instance()->ensureTimerUpdate();
+ QUnifiedTimer::ensureTimerUpdate();
q->setCurrentTime(totalCurrentTime);
}
}
@@ -456,7 +477,7 @@ QAbstractAnimation::~QAbstractAnimation()
d->state = Stopped;
emit stateChanged(oldState, d->state);
if (oldState == QAbstractAnimation::Running)
- QUnifiedTimer::instance()->unregisterAnimation(this);
+ QUnifiedTimer::unregisterAnimation(this);
}
}
@@ -555,14 +576,14 @@ void QAbstractAnimation::setDirection(Direction direction)
// the commands order below is important: first we need to setCurrentTime with the old direction,
// then update the direction on this and all children and finally restart the pauseTimer if needed
if (d->hasRegisteredTimer)
- QUnifiedTimer::instance()->ensureTimerUpdate();
+ QUnifiedTimer::ensureTimerUpdate();
d->direction = direction;
updateDirection(direction);
if (d->hasRegisteredTimer)
// needed to update the timer interval in case of a pause animation
- QUnifiedTimer::instance()->restartAnimationTimer();
+ QUnifiedTimer::updateAnimationTimer();
emit directionChanged(direction);
}
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index 2282cdb..fcfe824 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -124,9 +124,10 @@ private:
public:
//XXX this is needed by dui
static Q_CORE_EXPORT QUnifiedTimer *instance();
+ static QUnifiedTimer *instance(bool create);
- void registerAnimation(QAbstractAnimation *animation, bool isTopLevel);
- void unregisterAnimation(QAbstractAnimation *animation);
+ static void registerAnimation(QAbstractAnimation *animation, bool isTopLevel);
+ static void unregisterAnimation(QAbstractAnimation *animation);
//defines the timing interval. Default is DEFAULT_TIMER_INTERVAL
void setTimingInterval(int interval)
@@ -151,13 +152,13 @@ public:
this is used for updating the currentTime of all animations in case the pause
timer is active or, otherwise, only of the animation passed as parameter.
*/
- void ensureTimerUpdate();
+ static void ensureTimerUpdate();
/*
this will evaluate the need of restarting the pause timer in case there is still
some pause animations running.
*/
- void restartAnimationTimer();
+ static void updateAnimationTimer();
protected:
void timerEvent(QTimerEvent *);
@@ -187,6 +188,8 @@ private:
void registerRunningAnimation(QAbstractAnimation *animation);
void unregisterRunningAnimation(QAbstractAnimation *animation);
+ void restartAnimationTimer();
+
void updateAnimationsTime();
int closestPauseAnimationTimeToFinish();
};
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index 2731ae1..3a9d284 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -1144,16 +1144,17 @@ QDataStream &QDataStream::operator<<(double f)
CHECK_STREAM_PRECOND(*this)
#ifndef Q_DOUBLE_FORMAT
- if (!noswap) {
+ if (noswap) {
+ dev->write((char *)&f, sizeof(double));
+ } else {
union {
double val1;
quint64 val2;
} x;
x.val1 = f;
x.val2 = qbswap(x.val2);
- f = x.val1;
+ dev->write((char *)&x.val2, sizeof(double));
}
- dev->write((char *)&f, sizeof(double));
#else
union {
double val1;
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index 00af3fd..18c3c9f 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -426,6 +426,11 @@ QFileSystemWatcher::QFileSystemWatcher(const QStringList &paths, QObject *parent
/*!
Destroys the file system watcher.
+
+ \note To avoid deadlocks on shutdown, all instances of QFileSystemWatcher
+ need to be destroyed before QCoreApplication. Note that passing
+ QCoreApplication::instance() as the parent object when creating
+ QFileSystemWatcher is not sufficient.
*/
QFileSystemWatcher::~QFileSystemWatcher()
{
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index eeca07e..ec49f1a 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -542,11 +542,13 @@ qint64 QFSFileEnginePrivate::nativeSize() const
if (errorCode == ERROR_ACCESS_DENIED || errorCode == ERROR_SHARING_VIOLATION) {
QByteArray path = nativeFilePath;
// path for the FindFirstFile should not end with a trailing slash
- while (path.endsWith('\\'))
- path.chop(1);
+ while (!path.isEmpty() && reinterpret_cast<const wchar_t *>(
+ path.constData() + path.length())[-1] == '\\')
+ path.chop(2);
// FindFirstFile can not handle drives
- if (!path.endsWith(':')) {
+ if (!path.isEmpty() && reinterpret_cast<const wchar_t *>(
+ path.constData() + path.length())[-1] != ':') {
WIN32_FIND_DATA findData;
HANDLE hFind = ::FindFirstFile((const wchar_t*)path.constData(),
&findData);
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 8c96057..3b86e89 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -638,6 +638,7 @@ void QSocketActiveObject::deleteLater()
QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent)
: QAbstractEventDispatcher(parent),
+ m_selectThread(0),
m_activeScheduler(0),
m_wakeUpAO(0),
m_completeDeferredAOs(0),
@@ -665,11 +666,19 @@ void QEventDispatcherSymbian::startingUp()
wakeUp();
}
+QSelectThread& QEventDispatcherSymbian::selectThread() {
+ if (!m_selectThread)
+ m_selectThread = new QSelectThread;
+ return *m_selectThread;
+}
+
void QEventDispatcherSymbian::closingDown()
{
- if (m_selectThread.isRunning()) {
- m_selectThread.stop();
+ if (m_selectThread && m_selectThread->isRunning()) {
+ m_selectThread->stop();
}
+ delete m_selectThread;
+ m_selectThread = 0;
delete m_completeDeferredAOs;
delete m_wakeUpAO;
@@ -941,12 +950,13 @@ void QEventDispatcherSymbian::registerSocketNotifier ( QSocketNotifier * notifie
{
QSocketActiveObject *socketAO = q_check_ptr(new QSocketActiveObject(this, notifier));
m_notifiers.insert(notifier, socketAO);
- m_selectThread.requestSocketEvents(notifier, &socketAO->iStatus);
+ selectThread().requestSocketEvents(notifier, &socketAO->iStatus);
}
void QEventDispatcherSymbian::unregisterSocketNotifier ( QSocketNotifier * notifier )
{
- m_selectThread.cancelSocketEvents(notifier);
+ if (m_selectThread)
+ m_selectThread->cancelSocketEvents(notifier);
if (m_notifiers.contains(notifier)) {
QSocketActiveObject *sockObj = *m_notifiers.find(notifier);
m_deferredSocketEvents.removeAll(sockObj);
@@ -957,7 +967,7 @@ void QEventDispatcherSymbian::unregisterSocketNotifier ( QSocketNotifier * notif
void QEventDispatcherSymbian::reactivateSocketNotifier(QSocketNotifier *notifier)
{
- m_selectThread.requestSocketEvents(notifier, &m_notifiers[notifier]->iStatus);
+ selectThread().requestSocketEvents(notifier, &m_notifiers[notifier]->iStatus);
}
void QEventDispatcherSymbian::registerTimer ( int timerId, int interval, QObject * object )
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index 1ab31cc..5281199 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -259,8 +259,9 @@ private:
bool sendPostedEvents();
bool sendDeferredSocketEvents();
+ QSelectThread& selectThread();
private:
- QSelectThread m_selectThread;
+ QSelectThread *m_selectThread;
CQtActiveScheduler *m_activeScheduler;
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index 2633a7c..135ec303 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -595,7 +595,7 @@ void QEventDispatcherWin32Private::registerTimer(WinTimerInfo *t)
} else {
ok = t->fastTimerId = qtimeSetEvent(t->interval, 1, qt_fast_timer_proc, (DWORD_PTR)t,
TIME_CALLBACK_FUNCTION | TIME_PERIODIC | TIME_KILL_SYNCHRONOUS);
- if (ok == 0) { // fall back to normal timer if no more multimedia timers avaiable
+ if (ok == 0) { // fall back to normal timer if no more multimedia timers available
ok = SetTimer(internalHwnd, t->timerId, (uint) t->interval, 0);
}
}
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index c13d829..6a6db51 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -101,7 +101,7 @@ static QBasicAtomicInt objectCount = Q_BASIC_ATOMIC_INITIALIZER(0);
/** \internal
* mutex to be locked when accessing the connectionlists or the senders list
*/
-static QMutex *signalSlotLock(const QObject *o)
+static inline QMutex *signalSlotLock(const QObject *o)
{
if (!signalSlotMutexes) {
QMutexPool *mp = new QMutexPool;
@@ -393,27 +393,6 @@ void QObjectPrivate::cleanConnectionLists()
}
}
-QObjectPrivate::Sender *QObjectPrivate::setCurrentSender(QObject *receiver,
- Sender *sender)
-{
- Sender *previousSender = receiver->d_func()->currentSender;
- receiver->d_func()->currentSender = sender;
- return previousSender;
-}
-
-void QObjectPrivate::resetCurrentSender(QObject *receiver,
- Sender *currentSender,
- Sender *previousSender)
-{
- // ref is set to zero when this object is deleted during the metacall
- if (currentSender->ref == 1)
- receiver->d_func()->currentSender = previousSender;
- // if we've recursed, we need to tell the caller about the objects deletion
- if (previousSender)
- previousSender->ref = currentSender->ref;
-}
-
-
typedef QMultiHash<QObject *, QObject **> GuardHash;
Q_GLOBAL_STATIC(GuardHash, guardHash)
Q_GLOBAL_STATIC(QMutex, guardHashLock)
@@ -880,19 +859,14 @@ QObject::~QObject()
if (d->declarativeData)
QAbstractDeclarativeData::destroyed(d->declarativeData, this);
- {
- QMutex *signalSlotMutex = 0;
- QT_TRY {
- signalSlotMutex = signalSlotLock(this);
- } QT_CATCH(const std::bad_alloc &) {
- // out of memory - swallow to prevent a crash
- }
- QMutexLocker locker(signalSlotMutex);
+ // set ref to zero to indicate that this object has been deleted
+ if (d->currentSender != 0)
+ d->currentSender->ref = 0;
+ d->currentSender = 0;
- // set ref to zero to indicate that this object has been deleted
- if (d->currentSender != 0)
- d->currentSender->ref = 0;
- d->currentSender = 0;
+ if (d->connectionLists || d->senders) {
+ QMutex *signalSlotMutex = signalSlotLock(this);
+ QMutexLocker locker(signalSlotMutex);
// disconnect all receivers
if (d->connectionLists) {
@@ -910,7 +884,7 @@ QObject::~QObject()
}
QMutex *m = signalSlotLock(c->receiver);
- bool needToUnlock = QOrderedMutexLocker::relock(locker.mutex(), m);
+ bool needToUnlock = QOrderedMutexLocker::relock(signalSlotMutex, m);
if (c->receiver) {
*c->prev = c->next;
@@ -938,7 +912,7 @@ QObject::~QObject()
QObject *sender = node->sender;
QMutex *m = signalSlotLock(sender);
node->prev = &node;
- bool needToUnlock = QOrderedMutexLocker::relock(locker.mutex(), m);
+ bool needToUnlock = QOrderedMutexLocker::relock(signalSlotMutex, m);
//the node has maybe been removed while the mutex was unlocked in relock?
if (!node || node->sender != sender) {
m->unlock();
@@ -972,7 +946,8 @@ QObject::~QObject()
qt_removeObject(this);
- QCoreApplication::removePostedEvents(this);
+ if (d->postedEvents)
+ QCoreApplication::removePostedEvents(this, 0);
if (d->parent) // remove it from parent object
d->setParent_helper(0);
@@ -3231,9 +3206,9 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
argv ? argv : empty_argv);
}
- QMutexLocker locker(signalSlotLock(sender));
QThreadData *currentThreadData = QThreadData::current();
+ QMutexLocker locker(signalSlotLock(sender));
QObjectConnectionListVector *connectionLists = sender->d_func()->connectionLists;
if (!connectionLists) {
locker.unlock();
@@ -3329,7 +3304,7 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
if (connectionLists->orphaned) {
if (!connectionLists->inUse)
delete connectionLists;
- } else {
+ } else if (connectionLists->dirty) {
sender->d_func()->cleanConnectionLists();
}
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 341b3e9..4800e6a 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -156,9 +156,9 @@ public:
void removePendingChildInsertedEvents(QObject *child);
#endif
- static Sender *setCurrentSender(QObject *receiver,
+ static inline Sender *setCurrentSender(QObject *receiver,
Sender *sender);
- static void resetCurrentSender(QObject *receiver,
+ static inline void resetCurrentSender(QObject *receiver,
Sender *currentSender,
Sender *previousSender);
static int *setDeleteWatch(QObjectPrivate *d, int *newWatch);
@@ -215,9 +215,29 @@ public:
inline bool QObjectPrivate::isSignalConnected(uint signal_index) const
{
return signal_index >= sizeof(connectedSignals) * 8
+ || (connectedSignals[signal_index >> 5] & (1 << (signal_index & 0x1f))
|| qt_signal_spy_callback_set.signal_begin_callback
- || qt_signal_spy_callback_set.signal_end_callback
- || (connectedSignals[signal_index >> 5] & (1 << (signal_index & 0x1f)));
+ || qt_signal_spy_callback_set.signal_end_callback);
+}
+
+inline QObjectPrivate::Sender *QObjectPrivate::setCurrentSender(QObject *receiver,
+ Sender *sender)
+{
+ Sender *previousSender = receiver->d_func()->currentSender;
+ receiver->d_func()->currentSender = sender;
+ return previousSender;
+}
+
+inline void QObjectPrivate::resetCurrentSender(QObject *receiver,
+ Sender *currentSender,
+ Sender *previousSender)
+{
+ // ref is set to zero when this object is deleted during the metacall
+ if (currentSender->ref == 1)
+ receiver->d_func()->currentSender = previousSender;
+ // if we've recursed, we need to tell the caller about the objects deletion
+ if (previousSender)
+ previousSender->ref = currentSender->ref;
}
diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h
index 677412e..509f300 100644
--- a/src/corelib/thread/qmutex.h
+++ b/src/corelib/thread/qmutex.h
@@ -95,21 +95,23 @@ class Q_CORE_EXPORT QMutexLocker
{
public:
inline explicit QMutexLocker(QMutex *m)
- : val(reinterpret_cast<quintptr>(m))
{
- Q_ASSERT_X((val & quintptr(1u)) == quintptr(0),
+ Q_ASSERT_X((reinterpret_cast<quintptr>(m) & quintptr(1u)) == quintptr(0),
"QMutexLocker", "QMutex pointer is misaligned");
- relock();
+ if (m) {
+ m->lock();
+ val = reinterpret_cast<quintptr>(m) | quintptr(1u);
+ } else {
+ val = 0;
+ }
}
inline ~QMutexLocker() { unlock(); }
inline void unlock()
{
- if (val) {
- if ((val & quintptr(1u)) == quintptr(1u)) {
- val &= ~quintptr(1u);
- mutex()->unlock();
- }
+ if ((val & quintptr(1u)) == quintptr(1u)) {
+ val &= ~quintptr(1u);
+ mutex()->unlock();
}
}
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index c12095f..9afcd80 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -88,7 +88,8 @@ enum {
SECS_PER_HOUR = 3600,
MSECS_PER_HOUR = 3600000,
SECS_PER_MIN = 60,
- MSECS_PER_MIN = 60000
+ MSECS_PER_MIN = 60000,
+ JULIAN_DAY_FOR_EPOCH = 2440588 // result of julianDayFromGregorianDate(1970, 1, 1)
};
static inline QDate fixedDate(int y, int m, int d)
@@ -2321,8 +2322,8 @@ void QDateTime::setTimeSpec(Qt::TimeSpec spec)
qint64 toMSecsSinceEpoch_helper(qint64 jd, int msecs)
{
- int days = jd - julianDayFromGregorianDate(1970, 1, 1);
- qint64 retval = (qlonglong(days) * MSECS_PER_DAY) + msecs;
+ qint64 days = jd - JULIAN_DAY_FOR_EPOCH;
+ qint64 retval = (days * MSECS_PER_DAY) + msecs;
return retval;
}
@@ -4017,7 +4018,7 @@ static void localToUtc(QDate &date, QTime &time, int isdst)
localTM.tm_year = fakeDate.year() - 1900;
localTM.tm_isdst = (int)isdst;
#if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN)
- time_t secsSince1Jan1970UTC = toMSecsSinceEpoch_helper(fakeDate.toJulianDay(), QTime().msecsTo(time));
+ time_t secsSince1Jan1970UTC = (toMSecsSinceEpoch_helper(fakeDate.toJulianDay(), QTime().msecsTo(time)) / 1000);
#else
#if defined(Q_OS_WIN)
_tzset();
diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp
index a6bd78a..e4f45ba 100644
--- a/src/gui/dialogs/qdialog.cpp
+++ b/src/gui/dialogs/qdialog.cpp
@@ -393,7 +393,6 @@ void QDialogPrivate::resetModalitySetByOpen()
resetModalityTo = -1;
}
-#if defined(Q_WS_WINCE) || defined(Q_WS_S60)
#ifdef Q_WS_WINCE_WM
void QDialogPrivate::_q_doneAction()
{
@@ -408,12 +407,12 @@ void QDialogPrivate::_q_doneAction()
bool QDialog::event(QEvent *e)
{
bool result = QWidget::event(e);
-#ifdef Q_WS_WINCE
+#if defined(Q_WS_WINCE)
if (e->type() == QEvent::OkRequest) {
accept();
result = true;
- }
-#else
+ } else
+#elif defined(Q_WS_S60)
if ((e->type() == QEvent::StyleChange) || (e->type() == QEvent::Resize )) {
if (!testAttribute(Qt::WA_Moved)) {
Qt::WindowStates state = windowState();
@@ -422,11 +421,14 @@ bool QDialog::event(QEvent *e)
if (state != windowState())
setWindowState(state);
}
- }
+ } else
#endif
+ if (e->type() == QEvent::Move) {
+ setAttribute(Qt::WA_Moved, true); // as explicit as the user wants it to be
+ }
+
return result;
}
-#endif
/*!
Returns the modal dialog's result code, \c Accepted or \c Rejected.
diff --git a/src/gui/dialogs/qdialog.h b/src/gui/dialogs/qdialog.h
index 777256a..7ab0cb6 100644
--- a/src/gui/dialogs/qdialog.h
+++ b/src/gui/dialogs/qdialog.h
@@ -107,9 +107,7 @@ public Q_SLOTS:
protected:
QDialog(QDialogPrivate &, QWidget *parent, Qt::WindowFlags f = 0);
-#if defined(Q_WS_WINCE) || defined(Q_WS_S60)
bool event(QEvent *e);
-#endif
void keyPressEvent(QKeyEvent *);
void closeEvent(QCloseEvent *);
void showEvent(QShowEvent *);
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 9759b39..20ea262 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -10086,6 +10086,9 @@ bool QGraphicsTextItem::sceneEvent(QEvent *event)
#endif //QT_NO_IM
}
break;
+ case QEvent::ShortcutOverride:
+ dd->sendControlEvent(event);
+ return true;
default:
break;
}
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index a767987..114de85 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -733,11 +733,13 @@ void QGraphicsViewPrivate::_q_unsetViewportCursor()
}
// Restore the original viewport cursor.
- hasStoredOriginalCursor = false;
- if (dragMode == QGraphicsView::ScrollHandDrag)
- viewport->setCursor(Qt::OpenHandCursor);
- else
- viewport->setCursor(originalCursor);
+ if (hasStoredOriginalCursor) {
+ hasStoredOriginalCursor = false;
+ if (dragMode == QGraphicsView::ScrollHandDrag)
+ viewport->setCursor(Qt::OpenHandCursor);
+ else
+ viewport->setCursor(originalCursor);
+ }
}
#endif
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index fad51f4..bc52e99 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -879,6 +879,25 @@ QList<QSize> QIcon::availableSizes(Mode mode, State state) const
}
/*!
+ \since 4.7
+
+ Returns the name used to create the icon, if available.
+
+ Depending on the way the icon was created, it may have an associated
+ name. This is the case for icons created with fromTheme() or icons
+ using a QIconEngine which supports the QIconEngineV2::IconNameHook.
+
+ \sa fromTheme(), QIconEngine
+*/
+QString QIcon::name() const
+{
+ if (!d || !d->engine || d->engine_version < 2)
+ return QString();
+ QIconEngineV2 *engine = static_cast<QIconEngineV2*>(d->engine);
+ return engine->iconName();
+}
+
+/*!
\since 4.6
Sets the search paths for icon themes to \a paths.
diff --git a/src/gui/image/qicon.h b/src/gui/image/qicon.h
index 2812703..faef07b 100644
--- a/src/gui/image/qicon.h
+++ b/src/gui/image/qicon.h
@@ -81,6 +81,8 @@ public:
QSize actualSize(const QSize &size, Mode mode = Normal, State state = Off) const;
+ QString name() const;
+
void paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment = Qt::AlignCenter, Mode mode = Normal, State state = Off) const;
inline void paint(QPainter *painter, int x, int y, int w, int h, Qt::Alignment alignment = Qt::AlignCenter, Mode mode = Normal, State state = Off) const
{ paint(painter, QRect(x, y, w, h), alignment, mode, state); }
diff --git a/src/gui/image/qiconengine.cpp b/src/gui/image/qiconengine.cpp
index 4c7c728..050d48d 100644
--- a/src/gui/image/qiconengine.cpp
+++ b/src/gui/image/qiconengine.cpp
@@ -183,6 +183,10 @@ void QIconEngine::addFile(const QString &/*fileName*/, const QSize &/*size*/, QI
that should be filled with icon sizes. Engines that work in terms
of a scalable, vectorial format normally return an empty list.
+ \value IconNameHook Allows to query the name used to create the
+ icon, for example when instantiating an icon using
+ QIcon::fromTheme().
+
\sa virtual_hook()
*/
@@ -301,4 +305,20 @@ QList<QSize> QIconEngineV2::availableSizes(QIcon::Mode mode, QIcon::State state)
return arg.sizes;
}
+/*!
+ \since 4.7
+
+ Returns the name used to create the engine, if available.
+
+ \note This is a helper method and the actual work is done by
+ virtual_hook() method, hence this method depends on icon engine support
+ and may not work with all icon engines.
+ */
+QString QIconEngineV2::iconName()
+{
+ QString name;
+ virtual_hook(QIconEngineV2::IconNameHook, reinterpret_cast<void*>(&name));
+ return name;
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/image/qiconengine.h b/src/gui/image/qiconengine.h
index 1f9266b..6d8b6ad 100644
--- a/src/gui/image/qiconengine.h
+++ b/src/gui/image/qiconengine.h
@@ -80,7 +80,7 @@ public:
virtual void virtual_hook(int id, void *data);
public:
- enum IconEngineHook { AvailableSizesHook = 1 };
+ enum IconEngineHook { AvailableSizesHook = 1, IconNameHook };
struct AvailableSizesArgument
{
@@ -92,6 +92,9 @@ public:
// ### Qt 5: make this function const and virtual.
QList<QSize> availableSizes(QIcon::Mode mode = QIcon::Normal,
QIcon::State state = QIcon::Off);
+
+ // ### Qt 5: make this function const and virtual.
+ QString iconName();
};
QT_END_NAMESPACE
diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp
index 72ec2e8..a515ef8 100644
--- a/src/gui/image/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -554,6 +554,12 @@ void QIconLoaderEngine::virtual_hook(int id, void *data)
}
}
break;
+ case QIconEngineV2::IconNameHook:
+ {
+ QString &name = *reinterpret_cast<QString*>(data);
+ name = m_iconName;
+ }
+ break;
default:
QIconEngineV2::virtual_hook(id, data);
}
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 1d8eb4c..fb2837e 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -79,6 +79,7 @@ extern void qt_wince_hide_taskbar(HWND hwnd); //defined in qguifunctions_wince.c
#include "qlayout.h"
#include "qtooltip.h"
#include "qt_windows.h"
+#include "qscrollbar.h"
#if defined(QT_NON_COMMERCIAL)
#include "qnc_win.h"
#endif
@@ -701,6 +702,21 @@ void QApplicationPrivate::initializeWidgetPaletteHash()
QApplication::setPalette(menu, "QMenuBar");
}
+static void qt_set_windows_updateScrollBar(QWidget *widget)
+{
+ QList<QObject*> children = widget->children();
+ for (int i = 0; i < children.size(); ++i) {
+ QObject *o = children.at(i);
+ if(!o->isWidgetType())
+ continue;
+ if (QWidget *w = static_cast<QWidget *>(o))
+ qt_set_windows_updateScrollBar(w);
+ }
+ if (qobject_cast<QScrollBar*>(widget))
+ widget->updateGeometry();
+}
+
+
/*****************************************************************************
qt_init() - initializes Qt for Windows
*****************************************************************************/
@@ -1930,6 +1946,15 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa
}
}
}
+ else if (msg.wParam == SPI_SETNONCLIENTMETRICS) {
+ widget = (QETWidget*)QWidget::find(hwnd);
+ if (widget && !widget->parentWidget()) {
+ qt_set_windows_updateScrollBar(widget);
+ QEvent e(QEvent::LayoutRequest);
+ QApplication::sendEvent(widget, &e);
+ }
+ }
+
break;
case WM_PAINT: // paint event
diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm
index b58fd7c..8d65aa1 100644
--- a/src/gui/kernel/qcocoamenuloader_mac.mm
+++ b/src/gui/kernel/qcocoamenuloader_mac.mm
@@ -53,6 +53,12 @@
QT_FORWARD_DECLARE_CLASS(QCFString)
QT_FORWARD_DECLARE_CLASS(QString)
+#ifndef QT_NO_TRANSLATION
+ QT_BEGIN_NAMESPACE
+ extern QString qt_mac_applicationmenu_string(int type);
+ QT_END_NAMESPACE
+#endif
+
QT_USE_NAMESPACE
@implementation QT_MANGLE_NAMESPACE(QCocoaMenuLoader)
@@ -226,7 +232,6 @@ QT_USE_NAMESPACE
- (void)qtTranslateApplicationMenu
{
#ifndef QT_NO_TRANSLATION
- extern QString qt_mac_applicationmenu_string(int type);
[servicesItem setTitle: qt_mac_QStringToNSString(qt_mac_applicationmenu_string(0))];
[hideItem setTitle: qt_mac_QStringToNSString(qt_mac_applicationmenu_string(1).arg(qAppName()))];
[hideAllOthersItem setTitle: qt_mac_QStringToNSString(qt_mac_applicationmenu_string(2))];
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index ec00915..e94d247 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -101,6 +101,17 @@ QT_END_NAMESPACE
return !(isPopup || isToolTip || isTool);
}
+- (void)becomeMainWindow
+{
+ [super becomeMainWindow];
+ // Cocoa sometimes tell a hidden window to become the
+ // main window (and as such, show it). This can e.g
+ // happend when the application gets activated. If
+ // this is the case, we tell it to hide again:
+ if (![self isVisible])
+ [self orderOut:self];
+}
+
- (void)toggleToolbarShown:(id)sender
{
macSendToolbarChangeEvent([self QT_MANGLE_NAMESPACE(qt_qwidget)]);
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 10fa4b9..046bc7f 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -7307,9 +7307,9 @@ void QWidgetPrivate::show_helper()
setVisible(false).
- \note If you are working with QDialog or its subclasses and you invoke
- the show() function after this function, the dialog will be displayed in
- its original position.
+ \note Since Qt 4.7, when calling hide() and then show() on QDialog
+ derived widgets will show on the previous (as in "Where the user moved it to")
+ position.
\sa hideEvent(), isHidden(), show(), setVisible(), isVisible(), close()
*/
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index b440fce..bfa1136 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -674,6 +674,11 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *
int image_width = data->texture.width;
int image_height = data->texture.height;
+ int image_x1 = data->texture.x1;
+ int image_y1 = data->texture.y1;
+ int image_x2 = data->texture.x2;
+ int image_y2 = data->texture.y2;
+
const qreal cx = x + 0.5;
const qreal cy = y + 0.5;
@@ -708,17 +713,17 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator *
y2 = y1 + 1;
y2 %= image_height;
} else {
- if (x1 < 0) {
- x2 = x1 = 0;
- } else if (x1 >= image_width - 1) {
- x2 = x1 = image_width - 1;
+ if (x1 < image_x1) {
+ x2 = x1 = image_x1;
+ } else if (x1 >= image_x2 - 1) {
+ x2 = x1 = image_x2 - 1;
} else {
x2 = x1 + 1;
}
- if (y1 < 0) {
- y2 = y1 = 0;
- } else if (y1 >= image_height - 1) {
- y2 = y1 = image_height - 1;
+ if (y1 < image_y1) {
+ y2 = y1 = image_y1;
+ } else if (y1 >= image_y2 - 1) {
+ y2 = y1 = image_y2 - 1;
} else {
y2 = y1 + 1;
}
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 8f14583..9148ac2 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -2552,7 +2552,7 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
int sr_t = qFloor(sr.top());
int sr_b = qCeil(sr.bottom()) - 1;
- if (!s->flags.antialiased && sr_l == sr_r && sr_t == sr_b) {
+ if (s->matrix.type() <= QTransform::TxScale && !s->flags.antialiased && sr_l == sr_r && sr_t == sr_b) {
// as fillRect will apply the aliased coordinate delta we need to
// subtract it here as we don't use it for image drawing
QTransform old = s->matrix;
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 9366513..a78cafb 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -974,6 +974,9 @@ void QPaintEngineEx::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, con
void QPaintEngineEx::drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount,
const QPixmap &pixmap, QPainter::PixmapFragmentHints /*hints*/)
{
+ if (pixmap.isNull())
+ return;
+
qreal oldOpacity = state()->opacity;
QTransform oldTransform = state()->matrix;
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index f78de34..965b84c 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -1914,7 +1914,7 @@ static bool qt_painterpath_check_crossing(const QPainterPath *path, const QRectF
case QPainterPath::MoveToElement:
if (i > 0
- && qFuzzyCompare(last_pt.x(), last_start.y())
+ && qFuzzyCompare(last_pt.x(), last_start.x())
&& qFuzzyCompare(last_pt.y(), last_start.y())
&& qt_painterpath_isect_line_rect(last_pt.x(), last_pt.y(),
last_start.x(), last_start.y(), rect))
diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index b0e2d37..8036728 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -981,7 +981,7 @@ void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewIt
qreal y = position.y() + line.y() + line.ascent();
p->save();
p->setFont(option->font);
- p->drawText(int(x), int(y), elidedText);
+ p->drawText(QPointF(x, y), elidedText);
p->restore();
break;
}
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 074dd89..f5b0b0c 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -2143,7 +2143,7 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
if (qstyleoption_cast<const QStyleOptionComboBox *>(opt) != 0)
ret = 0;
else
- ret = QWindowsStyle::pixelMetric(metric, opt, widget);
+ ret = 1;
break;
case PM_MaximumDragDistance:
ret = -1;
@@ -3099,14 +3099,16 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
HIRect hirect = qt_hirectForQRect(opt->rect);
HIThemeDrawButton(&hirect, &bi, cg, kHIThemeOrientationNormal, 0);
break; }
+
case PE_Frame: {
QPen oldPen = p->pen();
- QPen newPen;
- newPen.setBrush(opt->palette.dark());
- p->setPen(newPen);
+ p->setPen(opt->palette.base().color().darker(140));
p->drawRect(opt->rect.adjusted(0, 0, -1, -1));
+ p->setPen(opt->palette.base().color().darker(180));
+ p->drawLine(opt->rect.topLeft(), opt->rect.topRight());
p->setPen(oldPen);
break; }
+
case PE_FrameLineEdit:
if (const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {
if (frame->state & State_Sunken) {
@@ -3279,10 +3281,14 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (header->orientation == Qt::Horizontal){
switch (header->position) {
case QStyleOptionHeader::Beginning:
+ ir.adjust(-1, -1, 0, 0);
break;
case QStyleOptionHeader::Middle:
+ ir.adjust(-1, -1, 0, 0);
+ break;
+ case QStyleOptionHeader::OnlyOneSection:
case QStyleOptionHeader::End:
- ir.adjust(-1, 0, 0, 0);
+ ir.adjust(-1, -1, 1, 0);
break;
default:
break;
diff --git a/src/gui/text/qtextodfwriter.cpp b/src/gui/text/qtextodfwriter.cpp
index d369bff0..7992de5 100644
--- a/src/gui/text/qtextodfwriter.cpp
+++ b/src/gui/text/qtextodfwriter.cpp
@@ -493,10 +493,10 @@ void QTextOdfWriter::writeBlockFormat(QXmlStreamWriter &writer, QTextBlockFormat
format.nonBreakableLines() ? QString::fromLatin1("true") : QString::fromLatin1("false"));
if (format.hasProperty(QTextFormat::TabPositions)) {
QList<QTextOption::Tab> tabs = format.tabPositions();
- writer.writeStartElement(styleNS, QString::fromLatin1("style-tab-stops"));
+ writer.writeStartElement(styleNS, QString::fromLatin1("tab-stops"));
QList<QTextOption::Tab>::Iterator iterator = tabs.begin();
while(iterator != tabs.end()) {
- writer.writeEmptyElement(styleNS, QString::fromLatin1("style-tab-stop"));
+ writer.writeEmptyElement(styleNS, QString::fromLatin1("tab-stop"));
writer.writeAttribute(styleNS, QString::fromLatin1("position"), pixelToPoint(iterator->position) );
QString type;
switch(iterator->type) {
@@ -511,7 +511,7 @@ void QTextOdfWriter::writeBlockFormat(QXmlStreamWriter &writer, QTextBlockFormat
++iterator;
}
- writer.writeEndElement(); // style-tab-stops
+ writer.writeEndElement(); // tab-stops
}
writer.writeEndElement(); // paragraph-properties
@@ -698,11 +698,11 @@ void QTextOdfWriter::writeTableCellFormat(QXmlStreamWriter &writer, QTextTableCe
if (padding > 0)
writer.writeAttribute(foNS, QString::fromLatin1("padding-top"), pixelToPoint(padding));
if (format.bottomPadding() > 0)
- writer.writeAttribute(foNS, QString::fromLatin1("padding-top"), pixelToPoint(format.bottomPadding()));
+ writer.writeAttribute(foNS, QString::fromLatin1("padding-bottom"), pixelToPoint(format.bottomPadding()));
if (format.leftPadding() > 0)
- writer.writeAttribute(foNS, QString::fromLatin1("padding-top"), pixelToPoint(format.leftPadding()));
+ writer.writeAttribute(foNS, QString::fromLatin1("padding-left"), pixelToPoint(format.leftPadding()));
if (format.rightPadding() > 0)
- writer.writeAttribute(foNS, QString::fromLatin1("padding-top"), pixelToPoint(format.rightPadding()));
+ writer.writeAttribute(foNS, QString::fromLatin1("padding-right"), pixelToPoint(format.rightPadding()));
}
if (format.hasProperty(QTextFormat::TextVerticalAlignment)) {
diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp
index 73ec53e..8cffebd 100644
--- a/src/gui/widgets/qabstractscrollarea.cpp
+++ b/src/gui/widgets/qabstractscrollarea.cpp
@@ -983,6 +983,7 @@ bool QAbstractScrollArea::event(QEvent *e)
case QEvent::StyleChange:
case QEvent::LayoutDirectionChange:
case QEvent::ApplicationLayoutDirectionChange:
+ case QEvent::LayoutRequest:
d->layoutChildren();
// fall through
default:
diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm
index 6a0eb53..7645c23 100644
--- a/src/gui/widgets/qmenu_mac.mm
+++ b/src/gui/widgets/qmenu_mac.mm
@@ -665,6 +665,7 @@ void qt_mac_set_modal_state_helper_recursive(OSMenuRef menu, OSMenuRef merge, bo
}
}
#else
+ bool modalWindowOnScreen = qApp->activeModalWidget() != 0;
for (NSMenuItem *item in [menu itemArray]) {
OSMenuRef submenu = [item submenu];
if (submenu != merge) {
@@ -674,10 +675,20 @@ void qt_mac_set_modal_state_helper_recursive(OSMenuRef menu, OSMenuRef merge, bo
// The item should follow what the QAction has.
if ([item tag]) {
QAction *action = reinterpret_cast<QAction *>([item tag]);
- syncNSMenuItemEnabled(item, action->isEnabled());
- } else {
- syncNSMenuItemEnabled(item, YES);
- }
+ syncNSMenuItemEnabled(item, action->isEnabled());
+ } else {
+ syncNSMenuItemEnabled(item, YES);
+ }
+ // We sneak in some extra code here to handle a menu problem:
+ // If there is no window on screen, we cannot set 'nil' as
+ // menu item target, because then cocoa will disable the item
+ // (guess it assumes that there will be no first responder to
+ // catch the trigger anyway?) OTOH, If we have a modal window,
+ // then setting the menu loader as target will make cocoa not
+ // deliver the trigger because the loader is then seen as modally
+ // shaddowed). So either way there are shortcomings. Instead, we
+ // decide the target as late as possible:
+ [item setTarget:modalWindowOnScreen ? nil : getMenuLoader()];
} else {
syncNSMenuItemEnabled(item, NO);
}
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp
index a651dd1..a7bd2d5 100644
--- a/src/network/bearer/qnetworkconfigmanager_p.cpp
+++ b/src/network/bearer/qnetworkconfigmanager_p.cpp
@@ -381,7 +381,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)),
this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)));
- QMetaObject::invokeMethod(engine, "requestUpdate");
+ QMetaObject::invokeMethod(engine, "initialize");
}
}
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index baf69e7..7e006e0 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -488,9 +488,23 @@ QHostInfoLookupManager::~QHostInfoLookupManager()
wasDeleted = true;
// don't qDeleteAll currentLookups, the QThreadPool has ownership
- qDeleteAll(postponedLookups);
- qDeleteAll(scheduledLookups);
- qDeleteAll(finishedLookups);
+ clear();
+}
+
+void QHostInfoLookupManager::clear()
+{
+ {
+ QMutexLocker locker(&mutex);
+ qDeleteAll(postponedLookups);
+ qDeleteAll(scheduledLookups);
+ qDeleteAll(finishedLookups);
+ postponedLookups.clear();
+ scheduledLookups.clear();
+ finishedLookups.clear();
+ }
+
+ threadPool.waitForDone();
+ cache.clear();
}
void QHostInfoLookupManager::work()
@@ -636,7 +650,7 @@ void qt_qhostinfo_clear_cache()
{
QHostInfoLookupManager* manager = theHostInfoLookupManager();
if (manager) {
- manager->cache.clear();
+ manager->clear();
}
}
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index 4fc74e9..e11766b 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -116,7 +116,7 @@ public:
// These functions are outside of the QHostInfo class and strictly internal.
// Do NOT use them outside of QAbstractSocket.
QHostInfo Q_NETWORK_EXPORT qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id);
-void Q_NETWORK_EXPORT qt_qhostinfo_clear_cache();
+void Q_AUTOTEST_EXPORT qt_qhostinfo_clear_cache();
void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(bool e);
class QHostInfoCache
@@ -161,6 +161,7 @@ public:
QHostInfoLookupManager();
~QHostInfoLookupManager();
+ void clear();
void work();
// called from QHostInfo
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index c89d34f..955a129 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -573,9 +573,9 @@ void QGL2PaintEngineExPrivate::resetGLState()
glStencilMask(0xff);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc(GL_ALWAYS, 0, 0xff);
- glDisableVertexAttribArray(QT_TEXTURE_COORDS_ATTR);
- glDisableVertexAttribArray(QT_VERTEX_COORDS_ATTR);
- glDisableVertexAttribArray(QT_OPACITY_ATTR);
+ ctx->d_func()->setVertexAttribArrayEnabled(QT_TEXTURE_COORDS_ATTR, false);
+ ctx->d_func()->setVertexAttribArrayEnabled(QT_VERTEX_COORDS_ATTR, false);
+ ctx->d_func()->setVertexAttribArrayEnabled(QT_OPACITY_ATTR, false);
#ifndef QT_OPENGL_ES_2
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // color may have been changed by glVertexAttrib()
#endif
diff --git a/src/opengl/qglextensions.cpp b/src/opengl/qglextensions.cpp
index ef3c4cd..8e2bbd4 100644
--- a/src/opengl/qglextensions.cpp
+++ b/src/opengl/qglextensions.cpp
@@ -235,11 +235,6 @@ bool qt_resolve_eglimage_gl_extensions(QGLContext *ctx)
bool qt_resolve_glsl_extensions(QGLContext *ctx)
{
- // Geometry shaders are optional...
- glProgramParameteriEXT = (_glProgramParameteriEXT) ctx->getProcAddress(QLatin1String("glProgramParameteriEXT"));
- glFramebufferTextureEXT = (_glFramebufferTextureEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureEXT"));
- glFramebufferTextureLayerEXT = (_glFramebufferTextureLayerEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureLayerEXT"));
- glFramebufferTextureFaceEXT = (_glFramebufferTextureFaceEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureFaceEXT"));
#if defined(QT_OPENGL_ES_2)
// The GLSL shader functions are always present in OpenGL/ES 2.0.
@@ -254,6 +249,12 @@ bool qt_resolve_glsl_extensions(QGLContext *ctx)
if (glCreateShader)
return true;
+ // Geometry shaders are optional...
+ glProgramParameteriEXT = (_glProgramParameteriEXT) ctx->getProcAddress(QLatin1String("glProgramParameteriEXT"));
+ glFramebufferTextureEXT = (_glFramebufferTextureEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureEXT"));
+ glFramebufferTextureLayerEXT = (_glFramebufferTextureLayerEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureLayerEXT"));
+ glFramebufferTextureFaceEXT = (_glFramebufferTextureFaceEXT) ctx->getProcAddress(QLatin1String("glFramebufferTextureFaceEXT"));
+
glCreateShader = (_glCreateShader) ctx->getProcAddress(QLatin1String("glCreateShader"));
if (glCreateShader) {
glShaderSource = (_glShaderSource) ctx->getProcAddress(QLatin1String("glShaderSource"));
diff --git a/src/opengl/qpixmapdata_x11gl_egl.cpp b/src/opengl/qpixmapdata_x11gl_egl.cpp
index 3ab385a..4d726b6 100644
--- a/src/opengl/qpixmapdata_x11gl_egl.cpp
+++ b/src/opengl/qpixmapdata_x11gl_egl.cpp
@@ -66,7 +66,8 @@ QT_BEGIN_NAMESPACE
// different contexts:
Q_GLOBAL_STATIC(QEglContext, qt_x11gl_rgbContext);
-Q_GLOBAL_STATIC(QEglContext, qt_x11gl_argbContext)
+Q_GLOBAL_STATIC(QEglContext, qt_x11gl_argbContext);
+Q_GLOBAL_STATIC_WITH_ARGS(QGLContext, qt_x11gl_fake_shared_context, (QX11GLPixmapData::glFormat()));
QEglContext* QX11GLPixmapData::rgbContext = 0;
QEglContext* QX11GLPixmapData::argbContext = 0;
@@ -112,7 +113,13 @@ bool QX11GLPixmapData::hasX11GLPixmaps()
if (!argbContext) {
argbContext = qt_x11gl_argbContext();
argbContext->setConfig(argbConfig);
- argbContext->createContext();
+ bool success = argbContext->createContext(rgbContext);
+ if (!success) {
+ qWarning("QX11GLPixmapData - RGB & ARGB contexts aren't shared");
+ success = argbContext->createContext();
+ if (!success)
+ argbContext = rgbContext; // Might work, worth a shot at least.
+ }
}
if (!argbContext->isValid())
@@ -258,6 +265,14 @@ QPaintEngine* QX11GLPixmapData::paintEngine() const
ctx = new QGLContext(glFormat());
Q_ASSERT(ctx->d_func()->eglContext == 0);
ctx->d_func()->eglContext = hasAlphaChannel() ? argbContext : rgbContext;
+
+ // While we use a seperate QGLContext for each pixmap, the underlying QEglContext is
+ // the same. So we must use a "fake" QGLContext and fool the texture cache into thinking
+ // each pixmap's QGLContext is sharing with this central one. The only place this is
+ // going to fail is where we the underlying EGL RGB and ARGB contexts aren't sharing.
+ ctx->d_func()->sharing = true;
+ QGLContextGroup::addShare(ctx, qt_x11gl_fake_shared_context());
+
// Update the glFormat for the QGLContext:
qt_glformat_from_eglconfig(ctx->d_func()->glFormat, ctx->d_func()->eglContext->config());
}
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.h b/src/plugins/bearer/corewlan/qcorewlanengine.h
index 5c69299..3c24c54 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.h
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.h
@@ -47,15 +47,18 @@
#include <QMap>
#include <QTimer>
#include <SystemConfiguration/SystemConfiguration.h>
+#include <QThread>
#ifndef QT_NO_BEARERMANAGEMENT
QT_BEGIN_NAMESPACE
class QNetworkConfigurationPrivate;
+class QScanThread;
class QCoreWlanEngine : public QBearerEngineImpl
{
+ friend class QScanThread;
Q_OBJECT
public:
@@ -70,6 +73,7 @@ public:
void connectToId(const QString &id);
void disconnectFromId(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkSession::State sessionStateForId(const QString &id);
@@ -84,27 +88,52 @@ public:
private Q_SLOTS:
void doRequestUpdate();
+ void networksChanged();
private:
bool isWifiReady(const QString &dev);
- QMap<QString, QString> configurationInterface;
- QStringList scanForSsids(const QString &interfaceName);
-
- bool isKnownSsid(const QString &ssid);
QList<QNetworkConfigurationPrivate *> foundConfigurations;
SCDynamicStoreRef storeSession;
CFRunLoopSourceRef runloopSource;
bool hasWifi;
+ bool scanning;
+ QScanThread *scanThread;
protected:
- QMap<QString, QMap<QString,QString> > userProfiles;
-
void startNetworkChangeLoop();
+
+};
+
+class QScanThread : public QThread
+{
+ Q_OBJECT
+
+public:
+ QScanThread(QObject *parent = 0);
+ ~QScanThread();
+
+ void quit();
+ QList<QNetworkConfigurationPrivate *> getConfigurations();
+ QString interfaceName;
+ QMap<QString, QString> configurationInterface;
void getUserConfigurations();
QString getNetworkNameFromSsid(const QString &ssid);
QString getSsidFromNetworkName(const QString &name);
+ bool isKnownSsid(const QString &ssid);
+ QMap<QString, QMap<QString,QString> > userProfiles;
+
+signals:
+ void networksChanged();
+
+protected:
+ void run();
+
+private:
+ QList<QNetworkConfigurationPrivate *> fetchedConfigurations;
+ QMutex mutex;
QStringList foundNetwork(const QString &id, const QString &ssid, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose);
+
};
QT_END_NAMESPACE
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm
index 268126a..3206833 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.mm
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm
@@ -67,10 +67,6 @@
#include <private/qt_cocoa_helpers_mac_p.h>
#include "private/qcore_mac_p.h"
-#ifndef QT_NO_BEARERMANAGEMENT
-
-QT_BEGIN_NAMESPACE
-
@interface QNSListener : NSObject
{
NSNotificationCenter *center;
@@ -96,7 +92,6 @@ QT_BEGIN_NAMESPACE
QMacCocoaAutoReleasePool pool;
center = [NSNotificationCenter defaultCenter];
currentInterface = [CWInterface interfaceWithName:nil];
-// [center addObserver:self selector:@selector(notificationHandler:) name:kCWLinkDidChangeNotification object:nil];
[center addObserver:self selector:@selector(notificationHandler:) name:kCWPowerDidChangeNotification object:nil];
[locker unlock];
return self;
@@ -130,6 +125,8 @@ QT_BEGIN_NAMESPACE
QNSListener *listener = 0;
+QT_BEGIN_NAMESPACE
+
void networkChangeCallback(SCDynamicStoreRef/* store*/, CFArrayRef changedKeys, void *info)
{
for ( long i = 0; i < CFArrayGetCount(changedKeys); i++) {
@@ -143,20 +140,279 @@ void networkChangeCallback(SCDynamicStoreRef/* store*/, CFArrayRef changedKeys,
return;
}
-QCoreWlanEngine::QCoreWlanEngine(QObject *parent)
-: QBearerEngineImpl(parent)
+
+QScanThread::QScanThread(QObject *parent)
+ :QThread(parent)
{
- startNetworkChangeLoop();
+}
+
+QScanThread::~QScanThread()
+{
+}
+
+void QScanThread::quit()
+{
+ wait();
+}
+
+void QScanThread::run()
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ QStringList found;
+ mutex.lock();
+ CWInterface *currentInterface = [CWInterface interfaceWithName:qt_mac_QStringToNSString(interfaceName)];
+ mutex.unlock();
+
+ if([currentInterface power]) {
+ NSError *err = nil;
+ NSDictionary *parametersDict = [NSDictionary dictionaryWithObjectsAndKeys:
+ [NSNumber numberWithBool:YES], kCWScanKeyMerge,
+ [NSNumber numberWithInteger:100], kCWScanKeyRestTime, nil];
+
+ NSArray* apArray = [currentInterface scanForNetworksWithParameters:parametersDict error:&err];
+ CWNetwork *apNetwork;
+
+ if (!err) {
+
+ for(uint row=0; row < [apArray count]; row++ ) {
+ apNetwork = [apArray objectAtIndex:row];
+
+ const QString networkSsid = qt_mac_NSStringToQString([apNetwork ssid]);
+ const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid));
+ found.append(id);
+
+ QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined;
+ bool known = isKnownSsid(networkSsid);
+ if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
+ if( networkSsid == qt_mac_NSStringToQString( [currentInterface ssid])) {
+ state = QNetworkConfiguration::Active;
+ }
+ }
+ if(state == QNetworkConfiguration::Undefined) {
+ if(known) {
+ state = QNetworkConfiguration::Discovered;
+ } else {
+ state = QNetworkConfiguration::Undefined;
+ }
+ }
+ QNetworkConfiguration::Purpose purpose = QNetworkConfiguration::UnknownPurpose;
+ if([[apNetwork securityMode] intValue] == kCWSecurityModeOpen) {
+ purpose = QNetworkConfiguration::PublicPurpose;
+ } else {
+ purpose = QNetworkConfiguration::PrivatePurpose;
+ }
+
+ found.append(foundNetwork(id, networkSsid, state, interfaceName, purpose));
+
+ } //end row
+// [parametersDict release];
+
+ } //end error
+ } // endwifi power
+ // add known configurations that are not around.
+ QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
+ while (i.hasNext()) {
+ i.next();
+
+ QString networkName = i.key();
+ const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkName));
+
+ if(!found.contains(id)) {
+ QString networkSsid = getSsidFromNetworkName(networkName);
+ const QString ssidId = QString::number(qHash(QLatin1String("corewlan:") + networkSsid));
+ QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined;
+ QString interfaceName;
+ QMapIterator<QString, QString> ij(i.value());
+ while (ij.hasNext()) {
+ ij.next();
+ interfaceName = ij.value();
+ }
+
+ if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
+ if( networkSsid == qt_mac_NSStringToQString([currentInterface ssid])) {
+ state = QNetworkConfiguration::Active;
+ }
+ }
+ if(state == QNetworkConfiguration::Undefined) {
+ if( userProfiles.contains(networkName)
+ && found.contains(ssidId)) {
+ state = QNetworkConfiguration::Discovered;
+ }
+ }
+
+ if(state == QNetworkConfiguration::Undefined) {
+ state = QNetworkConfiguration::Defined;
+ }
+
+ found.append(foundNetwork(id, networkName, state, interfaceName, QNetworkConfiguration::UnknownPurpose));
+ }
+ }
+ emit networksChanged();
+ [pool release];
+}
+
+QStringList QScanThread::foundNetwork(const QString &id, const QString &name, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose)
+{
+ QStringList found;
+ QMutexLocker locker(&mutex);
+ QNetworkConfigurationPrivate *ptr = new QNetworkConfigurationPrivate;
+
+ ptr->name = name;
+ ptr->isValid = true;
+ ptr->id = id;
+ ptr->state = state;
+ ptr->type = QNetworkConfiguration::InternetAccessPoint;
+ ptr->bearer = QLatin1String("WLAN");
+ ptr->purpose = purpose;
+
+ fetchedConfigurations.append( ptr);
+ configurationInterface.insert(ptr->id, interfaceName);
+
+ locker.unlock();
+ locker.relock();
+ found.append(id);
+ return found;
+}
+
+QList<QNetworkConfigurationPrivate *> QScanThread::getConfigurations()
+{
+ QMutexLocker locker(&mutex);
+
+ QList<QNetworkConfigurationPrivate *> foundConfigurations = fetchedConfigurations;
+ fetchedConfigurations.clear();
+
+ return foundConfigurations;
+}
+
+void QScanThread::getUserConfigurations()
+{
+ QMutexLocker locker(&mutex);
QMacCocoaAutoReleasePool pool;
- if([[CWInterface supportedInterfaces] count] > 0 && !listener) {
- listener = [[QNSListener alloc] init];
- listener.engine = this;
- hasWifi = true;
- } else {
- hasWifi = false;
+ userProfiles.clear();
+
+ NSArray *wifiInterfaces = [CWInterface supportedInterfaces];
+ for(uint row=0; row < [wifiInterfaces count]; row++ ) {
+
+ CWInterface *wifiInterface = [CWInterface interfaceWithName: [wifiInterfaces objectAtIndex:row]];
+ NSString *nsInterfaceName = [wifiInterface name];
+// add user configured system networks
+ SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, (CFStringRef)@"Qt corewlan", nil, nil);
+ NSDictionary * airportPlist = (NSDictionary *)SCDynamicStoreCopyValue(dynRef, (CFStringRef)[NSString stringWithFormat:@"Setup:/Network/Interface/%@/AirPort", nsInterfaceName]);
+ CFRelease(dynRef);
+
+ NSDictionary *prefNetDict = [airportPlist objectForKey:@"PreferredNetworks"];
+
+ NSArray *thisSsidarray = [prefNetDict valueForKey:@"SSID_STR"];
+ for(NSString *ssidkey in thisSsidarray) {
+ QString thisSsid = qt_mac_NSStringToQString(ssidkey);
+ if(!userProfiles.contains(thisSsid)) {
+ QMap <QString,QString> map;
+ map.insert(thisSsid, qt_mac_NSStringToQString(nsInterfaceName));
+ userProfiles.insert(thisSsid, map);
+ }
+ }
+ CFRelease(airportPlist);
+
+ // 802.1X user profiles
+ QString userProfilePath = QDir::homePath() + "/Library/Preferences/com.apple.eap.profiles.plist";
+ NSDictionary* eapDict = [[[NSDictionary alloc] initWithContentsOfFile:qt_mac_QStringToNSString(userProfilePath)] autorelease];
+ NSString *profileStr= @"Profiles";
+ NSString *nameStr = @"UserDefinedName";
+ NSString *networkSsidStr = @"Wireless Network";
+ for (id profileKey in eapDict) {
+ if ([profileStr isEqualToString:profileKey]) {
+ NSDictionary *itemDict = [eapDict objectForKey:profileKey];
+ for (id itemKey in itemDict) {
+
+ NSInteger dictSize = [itemKey count];
+ id objects[dictSize];
+ id keys[dictSize];
+
+ [itemKey getObjects:objects andKeys:keys];
+ QString networkName;
+ QString ssid;
+ for(int i = 0; i < dictSize; i++) {
+ if([nameStr isEqualToString:keys[i]]) {
+ networkName = qt_mac_NSStringToQString(objects[i]);
+ }
+ if([networkSsidStr isEqualToString:keys[i]]) {
+ ssid = qt_mac_NSStringToQString(objects[i]);
+ }
+ if(!userProfiles.contains(networkName)
+ && !ssid.isEmpty()) {
+ QMap<QString,QString> map;
+ map.insert(ssid, qt_mac_NSStringToQString(nsInterfaceName));
+ userProfiles.insert(networkName, map);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+QString QScanThread::getSsidFromNetworkName(const QString &name)
+{
+ QMutexLocker locker(&mutex);
+
+ QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
+ while (i.hasNext()) {
+ i.next();
+ QMap<QString,QString> map = i.value();
+ QMapIterator<QString, QString> ij(i.value());
+ while (ij.hasNext()) {
+ ij.next();
+ const QString networkNameHash = QString::number(qHash(QLatin1String("corewlan:") +i.key()));
+ if(name == i.key() || name == networkNameHash) {
+ return ij.key();
+ }
+ }
+ }
+ return QString();
+}
+
+QString QScanThread::getNetworkNameFromSsid(const QString &ssid)
+{
+ QMutexLocker locker(&mutex);
+
+ QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
+ while (i.hasNext()) {
+ i.next();
+ QMap<QString,QString> map = i.value();
+ QMapIterator<QString, QString> ij(i.value());
+ while (ij.hasNext()) {
+ ij.next();
+ if(ij.key() == ssid) {
+ return i.key();
+ }
+ }
}
- QMetaObject::invokeMethod(this, "requestUpdate", Qt::QueuedConnection);
+ return QString();
+}
+
+bool QScanThread::isKnownSsid(const QString &ssid)
+{
+ QMutexLocker locker(&mutex);
+
+ QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
+ while (i.hasNext()) {
+ i.next();
+ QMap<QString,QString> map = i.value();
+ if(map.keys().contains(ssid)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+QCoreWlanEngine::QCoreWlanEngine(QObject *parent)
+: QBearerEngineImpl(parent), scanThread(0)
+{
+ scanThread = new QScanThread(this);
+ connect(scanThread, SIGNAL(networksChanged()),
+ this, SLOT(networksChanged()));
}
QCoreWlanEngine::~QCoreWlanEngine()
@@ -167,18 +423,35 @@ QCoreWlanEngine::~QCoreWlanEngine()
[listener release];
}
+void QCoreWlanEngine::initialize()
+{
+ QMutexLocker locker(&mutex);
+
+ if([[CWInterface supportedInterfaces] count] > 0 && !listener) {
+ listener = [[QNSListener alloc] init];
+ listener.engine = this;
+ hasWifi = true;
+ } else {
+ hasWifi = false;
+ }
+ storeSession = NULL;
+
+ startNetworkChangeLoop();
+}
+
+
QString QCoreWlanEngine::getInterfaceFromId(const QString &id)
{
QMutexLocker locker(&mutex);
- return configurationInterface.value(id);
+ return scanThread->configurationInterface.value(id);
}
bool QCoreWlanEngine::hasIdentifier(const QString &id)
{
QMutexLocker locker(&mutex);
- return configurationInterface.contains(id);
+ return scanThread->configurationInterface.contains(id);
}
void QCoreWlanEngine::connectToId(const QString &id)
@@ -195,13 +468,14 @@ void QCoreWlanEngine::connectToId(const QString &id)
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithCapacity:0];
QString wantedSsid;
- bool using8021X = false;
QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
- const QString idHash = QString::number(qHash(QLatin1String("corewlan:") + getNetworkNameFromSsid(ptr->name)));
+ const QString idHash = QString::number(qHash(QLatin1String("corewlan:") + ptr->name));
+ const QString idHash2 = QString::number(qHash(QLatin1String("corewlan:") + scanThread->getNetworkNameFromSsid(ptr->name)));
- if (idHash != id) {
+ bool using8021X = false;
+ if (idHash2 != id) {
NSArray *array = [CW8021XProfile allUser8021XProfiles];
for (NSUInteger i = 0; i < [array count]; ++i) {
@@ -210,7 +484,7 @@ void QCoreWlanEngine::connectToId(const QString &id)
const QString ssidHash = QString::number(qHash(QLatin1String("corewlan:") + qt_mac_NSStringToQString([[array objectAtIndex:i] ssid])));
if (id == networkNameHashCheck || id == ssidHash) {
- const QString thisName = getSsidFromNetworkName(id);
+ const QString thisName = scanThread->getSsidFromNetworkName(id);
if (thisName.isEmpty())
wantedSsid = id;
else
@@ -225,24 +499,25 @@ void QCoreWlanEngine::connectToId(const QString &id)
if (!using8021X) {
QString wantedNetwork;
- QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
+ QMapIterator<QString, QMap<QString,QString> > i(scanThread->userProfiles);
while (i.hasNext()) {
i.next();
wantedNetwork = i.key();
const QString networkNameHash = QString::number(qHash(QLatin1String("corewlan:") + wantedNetwork));
if (id == networkNameHash) {
- wantedSsid = getSsidFromNetworkName(wantedNetwork);
+ wantedSsid = scanThread->getSsidFromNetworkName(wantedNetwork);
break;
}
}
}
NSDictionary *scanParameters = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCWScanKeyMerge,
+ [NSNumber numberWithInt:kCWScanTypeFast], kCWScanKeyScanType,
[NSNumber numberWithInteger:100], kCWScanKeyRestTime,
qt_mac_QStringToNSString(wantedSsid), kCWScanKeySSID,
nil];
- NSArray *scanArray = [NSArray arrayWithArray:[wifiInterface scanForNetworksWithParameters:scanParameters error:&err]];
+ NSArray *scanArray = [wifiInterface scanForNetworksWithParameters:scanParameters error:&err];
if(!err) {
for(uint row=0; row < [scanArray count]; row++ ) {
@@ -349,7 +624,7 @@ void QCoreWlanEngine::disconnectFromId(const QString &id)
void QCoreWlanEngine::requestUpdate()
{
- getUserConfigurations();
+ scanThread->getUserConfigurations();
doRequestUpdate();
}
@@ -359,228 +634,12 @@ void QCoreWlanEngine::doRequestUpdate()
QMacCocoaAutoReleasePool pool;
- QStringList previous = accessPointConfigurations.keys();
-
NSArray *wifiInterfaces = [CWInterface supportedInterfaces];
for (uint row = 0; row < [wifiInterfaces count]; ++row) {
- foreach (const QString &interface,
- scanForSsids(qt_mac_NSStringToQString([wifiInterfaces objectAtIndex:row]))) {
- previous.removeAll(interface);
- }
+ scanThread->interfaceName = qt_mac_NSStringToQString([wifiInterfaces objectAtIndex:row]);
+ scanThread->start();
}
-
- while (!previous.isEmpty()) {
- QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.take(previous.takeFirst());
-
- configurationInterface.remove(ptr->id);
-
- locker.unlock();
- emit configurationRemoved(ptr);
- locker.relock();
- }
-
locker.unlock();
- emit updateCompleted();
-}
-
-QString QCoreWlanEngine::getSsidFromNetworkName(const QString &name)
-{
- QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
- while (i.hasNext()) {
- i.next();
- QMap<QString,QString> map = i.value();
- QMapIterator<QString, QString> ij(i.value());
- while (ij.hasNext()) {
- ij.next();
- const QString networkNameHash = QString::number(qHash(QLatin1String("corewlan:") + i.key()));
- if (name == i.key() || name == networkNameHash) {
- return ij.key();
- }
- }
- }
- return QString();
-}
-
-QString QCoreWlanEngine::getNetworkNameFromSsid(const QString &ssid)
-{
- QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
- while (i.hasNext()) {
- i.next();
- QMap<QString,QString> map = i.value();
- QMapIterator<QString, QString> ij(i.value());
- while (ij.hasNext()) {
- ij.next();
- if(ij.key() == ssid) {
- return i.key();
- }
- }
- }
- return QString();
-}
-
-QStringList QCoreWlanEngine::scanForSsids(const QString &interfaceName)
-{
- QMutexLocker locker(&mutex);
-
- QStringList found;
-
- if(!hasWifi) {
- return found;
- }
- QMacCocoaAutoReleasePool pool;
-
- CWInterface *currentInterface = [CWInterface interfaceWithName:qt_mac_QStringToNSString(interfaceName)];
- QStringList addedConfigs;
-
- if([currentInterface power]) {
- NSError *err = nil;
- NSDictionary *parametersDict = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber numberWithBool:YES], kCWScanKeyMerge,
- [NSNumber numberWithInt:kCWScanTypeFast], kCWScanKeyScanType, // get the networks in the scan cache
- [NSNumber numberWithInteger:100], kCWScanKeyRestTime, nil];
- NSArray* apArray = [currentInterface scanForNetworksWithParameters:parametersDict error:&err];
- CWNetwork *apNetwork;
- if (!err) {
-
- for(uint row=0; row < [apArray count]; row++ ) {
- apNetwork = [apArray objectAtIndex:row];
-
- const QString networkSsid = qt_mac_NSStringToQString([apNetwork ssid]);
-
- const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkSsid));
- found.append(id);
-
- QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined;
- bool known = isKnownSsid(networkSsid);
- if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
- if( networkSsid == qt_mac_NSStringToQString( [currentInterface ssid])) {
- state = QNetworkConfiguration::Active;
- }
- }
- if(state == QNetworkConfiguration::Undefined) {
- if(known) {
- state = QNetworkConfiguration::Discovered;
- } else {
- state = QNetworkConfiguration::Undefined;
- }
- }
- QNetworkConfiguration::Purpose purpose = QNetworkConfiguration::UnknownPurpose;
- if([[apNetwork securityMode] intValue] == kCWSecurityModeOpen) {
- purpose = QNetworkConfiguration::PublicPurpose;
- } else {
- purpose = QNetworkConfiguration::PrivatePurpose;
- }
-
- found.append(foundNetwork(id, networkSsid, state, interfaceName, purpose));
-
- } //end row
- } //end error
- } // endwifi power
-
- // add known configurations that are not around.
- QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
- while (i.hasNext()) {
- i.next();
-
- QString networkName = i.key();
- const QString id = QString::number(qHash(QLatin1String("corewlan:") + networkName));
-
- if(!found.contains(id)) {
- QString networkSsid = getSsidFromNetworkName(networkName);
- const QString ssidId = QString::number(qHash(QLatin1String("corewlan:") + networkSsid));
- QNetworkConfiguration::StateFlags state = QNetworkConfiguration::Undefined;
- QString interfaceName;
- QMapIterator<QString, QString> ij(i.value());
- while (ij.hasNext()) {
- ij.next();
- interfaceName = ij.value();
- }
-
- if( [currentInterface.interfaceState intValue] == kCWInterfaceStateRunning) {
- if( networkSsid == qt_mac_NSStringToQString([currentInterface ssid])) {
- state = QNetworkConfiguration::Active;
- }
- }
- if(state == QNetworkConfiguration::Undefined) {
- if( userProfiles.contains(networkName)
- && found.contains(ssidId)) {
- state = QNetworkConfiguration::Discovered;
- }
- }
-
- if(state == QNetworkConfiguration::Undefined) {
- state = QNetworkConfiguration::Defined;
- }
-
- found.append(foundNetwork(id, networkName, state, interfaceName, QNetworkConfiguration::UnknownPurpose));
- }
- }
- return found;
-}
-
-QStringList QCoreWlanEngine::foundNetwork(const QString &id, const QString &name, const QNetworkConfiguration::StateFlags state, const QString &interfaceName, const QNetworkConfiguration::Purpose purpose)
-{
- QStringList found;
- QMutexLocker locker(&mutex);
- if (accessPointConfigurations.contains(id)) {
- QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(id);
-
- bool changed = false;
-
- ptr->mutex.lock();
-
- if (!ptr->isValid) {
- ptr->isValid = true;
- changed = true;
- }
-
- if (ptr->name != name) {
- ptr->name = name;
- changed = true;
- }
-
- if (ptr->id != id) {
- ptr->id = id;
- changed = true;
- }
-
- if (ptr->state != state) {
- ptr->state = state;
- changed = true;
- }
-
- if (ptr->purpose != purpose) {
- ptr->purpose = purpose;
- changed = true;
- }
- ptr->mutex.unlock();
-
- if (changed) {
- locker.unlock();
- emit configurationChanged(ptr);
- locker.relock();
- }
- found.append(id);
- } else {
- QNetworkConfigurationPrivatePointer ptr(new QNetworkConfigurationPrivate);
-
- ptr->name = name;
- ptr->isValid = true;
- ptr->id = id;
- ptr->state = state;
- ptr->type = QNetworkConfiguration::InternetAccessPoint;
- ptr->bearer = QLatin1String("WLAN");
- ptr->purpose = purpose;
-
- accessPointConfigurations.insert(ptr->id, ptr);
- configurationInterface.insert(ptr->id, interfaceName);
-
- locker.unlock();
- emit configurationAdded(ptr);
- locker.relock();
- found.append(id);
- }
- return found;
}
bool QCoreWlanEngine::isWifiReady(const QString &wifiDeviceName)
@@ -596,20 +655,6 @@ bool QCoreWlanEngine::isWifiReady(const QString &wifiDeviceName)
return false;
}
-bool QCoreWlanEngine::isKnownSsid(const QString &ssid)
-{
- QMutexLocker locker(&mutex);
-
- QMapIterator<QString, QMap<QString,QString> > i(userProfiles);
- while (i.hasNext()) {
- i.next();
- QMap<QString,QString> map = i.value();
- if(map.keys().contains(ssid)) {
- return true;
- }
- }
- return false;
-}
QNetworkSession::State QCoreWlanEngine::sessionStateForId(const QString &id)
{
@@ -644,7 +689,6 @@ QNetworkConfigurationManager::Capabilities QCoreWlanEngine::capabilities() const
void QCoreWlanEngine::startNetworkChangeLoop()
{
- storeSession = NULL;
SCDynamicStoreContext dynStoreContext = { 0, this/*(void *)storeSession*/, NULL, NULL, NULL };
storeSession = SCDynamicStoreCreate(NULL,
@@ -711,74 +755,73 @@ bool QCoreWlanEngine::requiresPolling() const
return true;
}
-void QCoreWlanEngine::getUserConfigurations()
+void QCoreWlanEngine::networksChanged()
{
- QMacCocoaAutoReleasePool pool;
- userProfiles.clear();
+ QMutexLocker locker(&mutex);
- NSArray *wifiInterfaces = [CWInterface supportedInterfaces];
- for(uint row=0; row < [wifiInterfaces count]; row++ ) {
+ QStringList previous = accessPointConfigurations.keys();
- CWInterface *wifiInterface = [CWInterface interfaceWithName: [wifiInterfaces objectAtIndex:row]];
- NSString *nsInterfaceName = [wifiInterface name];
-// add user configured system networks
- SCDynamicStoreRef dynRef = SCDynamicStoreCreate(kCFAllocatorSystemDefault, (CFStringRef)@"Qt corewlan", nil, nil);
- NSDictionary *airportPlist = (NSDictionary *)SCDynamicStoreCopyValue(dynRef, (CFStringRef)[[NSString stringWithFormat:@"Setup:/Network/Interface/%@/AirPort", nsInterfaceName] autorelease]);
- CFRelease(dynRef);
+ QList<QNetworkConfigurationPrivate *> foundConfigurations = scanThread->getConfigurations();
+ while (!foundConfigurations.isEmpty()) {
+ QNetworkConfigurationPrivate *cpPriv = foundConfigurations.takeFirst();
- NSDictionary *prefNetDict = [airportPlist objectForKey:@"PreferredNetworks"];
+ previous.removeAll(cpPriv->id);
- NSArray *thisSsidarray = [prefNetDict valueForKey:@"SSID_STR"];
- for(NSString *ssidkey in thisSsidarray) {
- QString thisSsid = qt_mac_NSStringToQString(ssidkey);
- if(!userProfiles.contains(thisSsid)) {
- QMap <QString,QString> map;
- map.insert(thisSsid, qt_mac_NSStringToQString(nsInterfaceName));
- userProfiles.insert(thisSsid, map);
+ if (accessPointConfigurations.contains(cpPriv->id)) {
+ QNetworkConfigurationPrivatePointer ptr = accessPointConfigurations.value(cpPriv->id);
+
+ bool changed = false;
+
+ ptr->mutex.lock();
+
+ if (ptr->isValid != cpPriv->isValid) {
+ ptr->isValid = cpPriv->isValid;
+ changed = true;
}
- }
- CFRelease(airportPlist);
- // 802.1X user profiles
- QString userProfilePath = QDir::homePath() + "/Library/Preferences/com.apple.eap.profiles.plist";
- NSDictionary* eapDict = [[NSDictionary alloc] initWithContentsOfFile:qt_mac_QStringToNSString(userProfilePath)];
- NSString *profileStr= @"Profiles";
- NSString *nameStr = @"UserDefinedName";
- NSString *networkSsidStr = @"Wireless Network";
- for (id profileKey in eapDict) {
- if ([profileStr isEqualToString:profileKey]) {
- NSDictionary *itemDict = [eapDict objectForKey:profileKey];
- for (id itemKey in itemDict) {
+ if (ptr->name != cpPriv->name) {
+ ptr->name = cpPriv->name;
+ changed = true;
+ }
- NSInteger dictSize = [itemKey count];
- id objects[dictSize];
- id keys[dictSize];
+ if (ptr->state != cpPriv->state) {
+ ptr->state = cpPriv->state;
+ changed = true;
+ }
- [itemKey getObjects:objects andKeys:keys];
- QString networkName;
- QString ssid;
- for(int i = 0; i < dictSize; i++) {
- if([nameStr isEqualToString:keys[i]]) {
- networkName = qt_mac_NSStringToQString(objects[i]);
- }
- if([networkSsidStr isEqualToString:keys[i]]) {
- ssid = qt_mac_NSStringToQString(objects[i]);
- }
- if(!userProfiles.contains(networkName)
- && !ssid.isEmpty()) {
- QMap<QString,QString> map;
- map.insert(ssid, qt_mac_NSStringToQString(nsInterfaceName));
- userProfiles.insert(networkName, map);
- }
- }
- }
- [itemDict release];
+ ptr->mutex.unlock();
+
+ if (changed) {
+ locker.unlock();
+ emit configurationChanged(ptr);
+ locker.relock();
}
+
+ delete cpPriv;
+ } else {
+ QNetworkConfigurationPrivatePointer ptr(cpPriv);
+
+ accessPointConfigurations.insert(ptr->id, ptr);
+
+ locker.unlock();
+ emit configurationAdded(ptr);
+ locker.relock();
}
- [eapDict release];
}
+
+ while (!previous.isEmpty()) {
+ QNetworkConfigurationPrivatePointer ptr =
+ accessPointConfigurations.take(previous.takeFirst());
+
+ locker.unlock();
+ emit configurationRemoved(ptr);
+ locker.relock();
+ }
+
+ locker.unlock();
+ emit updateCompleted();
+
}
-QT_END_NAMESPACE
-#endif // QT_NO_BEARERMANAGEMENT
+QT_END_NAMESPACE
diff --git a/src/plugins/bearer/generic/qgenericengine.cpp b/src/plugins/bearer/generic/qgenericengine.cpp
index 41ff3e0..652fe4a 100644
--- a/src/plugins/bearer/generic/qgenericengine.cpp
+++ b/src/plugins/bearer/generic/qgenericengine.cpp
@@ -177,6 +177,11 @@ void QGenericEngine::disconnectFromId(const QString &id)
emit connectionError(id, OperationNotSupported);
}
+void QGenericEngine::initialize()
+{
+ doRequestUpdate();
+}
+
void QGenericEngine::requestUpdate()
{
doRequestUpdate();
diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h
index 82d22af..cdbbc9d 100644
--- a/src/plugins/bearer/generic/qgenericengine.h
+++ b/src/plugins/bearer/generic/qgenericengine.h
@@ -70,6 +70,7 @@ public:
void connectToId(const QString &id);
void disconnectFromId(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkSession::State sessionStateForId(const QString &id);
diff --git a/src/plugins/bearer/icd/qicdengine.cpp b/src/plugins/bearer/icd/qicdengine.cpp
index fc9b469..9d1bfab 100644
--- a/src/plugins/bearer/icd/qicdengine.cpp
+++ b/src/plugins/bearer/icd/qicdengine.cpp
@@ -225,8 +225,6 @@ QIcdEngine::QIcdEngine(QObject *parent)
: QBearerEngine(parent), iapMonitor(new IapMonitor), m_dbusInterface(0),
firstUpdate(true), m_scanGoingOn(false)
{
- QMetaObject::invokeMethod(this, "doRequestUpdate", Qt::QueuedConnection);
- init();
}
QIcdEngine::~QIcdEngine()
@@ -243,8 +241,10 @@ QNetworkConfigurationManager::Capabilities QIcdEngine::capabilities() const
QNetworkConfigurationManager::NetworkSessionRequired;
}
-void QIcdEngine::init()
+void QIcdEngine::initialize()
{
+ QMutexLocker locker(&mutex);
+
// Setup DBus Interface for ICD
m_dbusInterface = new QDBusInterface(ICD_DBUS_API_INTERFACE,
ICD_DBUS_API_PATH,
@@ -272,6 +272,8 @@ void QIcdEngine::init()
QNetworkConfigurationPrivatePointer ptr(cpPriv);
userChoiceConfigurations.insert(cpPriv->id, ptr);
+
+ doRequestUpdate();
}
static inline QString network_attrs_to_security(uint network_attrs)
diff --git a/src/plugins/bearer/icd/qicdengine.h b/src/plugins/bearer/icd/qicdengine.h
index 841874f..2f9f8ed 100644
--- a/src/plugins/bearer/icd/qicdengine.h
+++ b/src/plugins/bearer/icd/qicdengine.h
@@ -91,6 +91,7 @@ public:
bool hasIdentifier(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkConfigurationManager::Capabilities capabilities() const;
@@ -123,7 +124,6 @@ public:
emit configurationChanged(ptr);
}
- void init();
void cleanup();
void addConfiguration(QString &iap_id);
diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
index e796df3..9b6ffa0 100644
--- a/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
+++ b/src/plugins/bearer/nativewifi/qnativewifiengine.cpp
@@ -100,8 +100,6 @@ QNativeWifiEngine::QNativeWifiEngine(QObject *parent)
if (result != ERROR_SUCCESS)
qDebug("%s: WlanRegisterNotification failed with error %ld\n", __FUNCTION__, result);
#endif
-
- scanComplete();
}
QNativeWifiEngine::~QNativeWifiEngine()
@@ -472,6 +470,11 @@ void QNativeWifiEngine::disconnectFromId(const QString &id)
}
}
+void QNativeWifiEngine::initialize()
+{
+ scanComplete();
+}
+
void QNativeWifiEngine::requestUpdate()
{
QMutexLocker locker(&mutex);
diff --git a/src/plugins/bearer/nativewifi/qnativewifiengine.h b/src/plugins/bearer/nativewifi/qnativewifiengine.h
index 77764e4..3b21985 100644
--- a/src/plugins/bearer/nativewifi/qnativewifiengine.h
+++ b/src/plugins/bearer/nativewifi/qnativewifiengine.h
@@ -80,6 +80,7 @@ public:
void connectToId(const QString &id);
void disconnectFromId(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkSession::State sessionStateForId(const QString &id);
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
index 13b2252..3ebc356 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.cpp
@@ -93,16 +93,16 @@ QNetworkManagerEngine::QNetworkManagerEngine(QObject *parent)
userSettings->setConnections();
connect(userSettings, SIGNAL(newConnection(QDBusObjectPath)),
this, SLOT(newConnection(QDBusObjectPath)));
-
- QMetaObject::invokeMethod(this, "init", Qt::QueuedConnection);
}
QNetworkManagerEngine::~QNetworkManagerEngine()
{
}
-void QNetworkManagerEngine::init()
+void QNetworkManagerEngine::initialize()
{
+ QMutexLocker locker(&mutex);
+
// Get current list of access points.
foreach (const QDBusObjectPath &devicePath, interface->getDevices())
deviceAdded(devicePath);
diff --git a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
index 7f8badb..8e95a2c 100644
--- a/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
+++ b/src/plugins/bearer/networkmanager/qnetworkmanagerengine.h
@@ -73,8 +73,6 @@ public:
QNetworkManagerEngine(QObject *parent = 0);
~QNetworkManagerEngine();
- Q_INVOKABLE void init();
-
bool networkManagerAvailable() const;
QString getInterfaceFromId(const QString &id);
@@ -85,6 +83,7 @@ public:
void connectToId(const QString &id);
void disconnectFromId(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkSession::State sessionStateForId(const QString &id);
diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp
index c629d02..8e9675e 100644
--- a/src/plugins/bearer/symbian/symbianengine.cpp
+++ b/src/plugins/bearer/symbian/symbianengine.cpp
@@ -137,7 +137,12 @@ SymbianEngine::SymbianEngine(QObject *parent)
return;
}
#endif
-
+}
+
+void SymbianEngine::initialize()
+{
+ QMutexLocker locker(&mutex);
+
SymbianNetworkConfigurationPrivate *cpPriv = new SymbianNetworkConfigurationPrivate;
cpPriv->name = "UserChoice";
cpPriv->bearer = SymbianNetworkConfigurationPrivate::BearerUnknown;
diff --git a/src/plugins/bearer/symbian/symbianengine.h b/src/plugins/bearer/symbian/symbianengine.h
index dfd12bd..afb37de 100644
--- a/src/plugins/bearer/symbian/symbianengine.h
+++ b/src/plugins/bearer/symbian/symbianengine.h
@@ -110,6 +110,7 @@ public:
bool hasIdentifier(const QString &id);
+ Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
QNetworkConfigurationManager::Capabilities capabilities() const;
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 0b8a2e4..03d535c 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -796,7 +796,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
JSC::UString context;
// The first non-empty source URL in the call stack determines the translation context.
{
- JSC::ExecState *frame = exec->removeHostCallFrameFlag();
+ JSC::ExecState *frame = exec->callerFrame()->removeHostCallFrameFlag();
while (frame) {
if (frame->codeBlock() && frame->codeBlock()->source()
&& !frame->codeBlock()->source()->url().isEmpty()) {
@@ -3404,7 +3404,7 @@ void QScriptEngine::installTranslatorFunctions(const QScriptValue &object)
// unsigned attribs = JSC::DontEnum;
JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 5, JSC::Identifier(exec, "qsTranslate"), QScript::functionQsTranslate));
JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 2, JSC::Identifier(exec, "QT_TRANSLATE_NOOP"), QScript::functionQsTranslateNoOp));
- JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::PrototypeFunction(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr));
+ JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 3, JSC::Identifier(exec, "qsTr"), QScript::functionQsTr));
JSC::asObject(jscObject)->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "QT_TR_NOOP"), QScript::functionQsTrNoOp));
glob->stringPrototype()->putDirectFunction(exec, new (exec)JSC::NativeFunctionWrapper(exec, glob->prototypeFunctionStructure(), 1, JSC::Identifier(exec, "arg"), QScript::stringProtoFuncArg));
diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index 0477454..5e4f097 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -35,6 +35,7 @@
#include "Error.h"
#include "PrototypeFunction.h"
+#include "NativeFunctionWrapper.h"
#include "PropertyNameArray.h"
#include "JSFunction.h"
#include "JSString.h"
@@ -1753,9 +1754,9 @@ QObjectPrototype::QObjectPrototype(JSC::ExecState* exec, WTF::PassRefPtr<JSC::St
| QScriptEngine::ExcludeSuperClassProperties
| QScriptEngine::ExcludeChildObjects));
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, /*length=*/0, exec->propertyNames().toString, qobjectProtoFuncToString), JSC::DontEnum);
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, /*length=*/1, JSC::Identifier(exec, "findChild"), qobjectProtoFuncFindChild), JSC::DontEnum);
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, /*length=*/1, JSC::Identifier(exec, "findChildren"), qobjectProtoFuncFindChildren), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, /*length=*/0, exec->propertyNames().toString, qobjectProtoFuncToString), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, /*length=*/1, JSC::Identifier(exec, "findChild"), qobjectProtoFuncFindChild), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, /*length=*/1, JSC::Identifier(exec, "findChildren"), qobjectProtoFuncFindChildren), JSC::DontEnum);
this->structure()->setHasGetterSetterProperties(true);
}
@@ -2015,7 +2016,7 @@ QMetaObjectPrototype::QMetaObjectPrototype(
JSC::Structure* prototypeFunctionStructure)
: QMetaObjectWrapperObject(exec, StaticQtMetaObject::get(), /*ctor=*/JSC::JSValue(), structure)
{
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, /*length=*/0, JSC::Identifier(exec, "className"), qmetaobjectProtoFuncClassName), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, /*length=*/0, JSC::Identifier(exec, "className"), qmetaobjectProtoFuncClassName), JSC::DontEnum);
}
static const uint qt_meta_data_QObjectConnectionManager[] = {
diff --git a/src/script/bridge/qscriptvariant.cpp b/src/script/bridge/qscriptvariant.cpp
index b2dd3b0..93459a8 100644
--- a/src/script/bridge/qscriptvariant.cpp
+++ b/src/script/bridge/qscriptvariant.cpp
@@ -29,6 +29,8 @@
#include "Error.h"
#include "PrototypeFunction.h"
+#include "JSFunction.h"
+#include "NativeFunctionWrapper.h"
#include "JSString.h"
namespace JSC
@@ -139,8 +141,8 @@ QVariantPrototype::QVariantPrototype(JSC::ExecState* exec, WTF::PassRefPtr<JSC::
{
setDelegate(new QVariantDelegate(QVariant()));
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, 0, exec->propertyNames().toString, variantProtoFuncToString), JSC::DontEnum);
- putDirectFunction(exec, new (exec) JSC::PrototypeFunction(exec, prototypeFunctionStructure, 0, exec->propertyNames().valueOf, variantProtoFuncValueOf), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, 0, exec->propertyNames().toString, variantProtoFuncToString), JSC::DontEnum);
+ putDirectFunction(exec, new (exec) JSC::NativeFunctionWrapper(exec, prototypeFunctionStructure, 0, exec->propertyNames().valueOf, variantProtoFuncValueOf), JSC::DontEnum);
}
diff --git a/src/src.pro b/src/src.pro
index e8a3e98..9c4831c 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -5,12 +5,12 @@ unset(SRC_SUBDIRS)
win32:SRC_SUBDIRS += src_winmain
symbian:SRC_SUBDIRS += src_s60main
SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib
-win32:SRC_SUBDIRS += src_activeqt
!symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus
!contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui
!wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support
!wince*:!symbian-abld:!symbian-sbsv2:include(tools/tools.pro)
+win32:SRC_SUBDIRS += src_activeqt
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2): SRC_SUBDIRS += src_opengl
contains(QT_CONFIG, openvg): SRC_SUBDIRS += src_openvg
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 038aeb4..b6e771f 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -3525,7 +3525,11 @@ void QSvgHandler::parse()
// namespaceUri is empty. The only possible strategy at
// this point is to do what everyone else seems to do and
// ignore the reported namespaceUri completely.
- startElement(xml->name().toString(), xml->attributes());
+ if (!startElement(xml->name().toString(), xml->attributes())) {
+ delete m_doc;
+ m_doc = 0;
+ return;
+ }
break;
case QXmlStreamReader::EndElement:
endElement(xml->name());
@@ -3570,6 +3574,9 @@ bool QSvgHandler::startElement(const QString &localName,
m_whitespaceMode.push(QSvgText::Default);
}
+ if (!m_doc && localName != QLatin1String("svg"))
+ return false;
+
if (FactoryMethod method = findGroupFactory(localName)) {
//group
node = method(m_doc ? m_nodes.top() : 0, attributes, this);
diff --git a/tests/auto/collections/tst_collections.cpp b/tests/auto/collections/tst_collections.cpp
index e7b01a1..d092c34 100644
--- a/tests/auto/collections/tst_collections.cpp
+++ b/tests/auto/collections/tst_collections.cpp
@@ -2260,7 +2260,6 @@ void tst_Collections::qstring()
QVERIFY(s.isNull());
QVERIFY(s.toLocal8Bit().size() == 0);
QVERIFY(s.toLocal8Bit().isEmpty());
- QVERIFY(!s.toLocal8Bit().isNull());
s = "first-ascii";
QVERIFY(s.toAscii() == "first-ascii");
diff --git a/tests/auto/qdialog/tst_qdialog.cpp b/tests/auto/qdialog/tst_qdialog.cpp
index 86f87b8..8b6aee6 100644
--- a/tests/auto/qdialog/tst_qdialog.cpp
+++ b/tests/auto/qdialog/tst_qdialog.cpp
@@ -447,7 +447,7 @@ void tst_QDialog::deleteInExec()
}
#ifndef QT_NO_EXCEPTIONS
-class QDialogTestException { };
+class QDialogTestException : public std::exception { };
class ExceptionDialog : public QDialog
{
@@ -471,11 +471,17 @@ void tst_QDialog::throwInExec()
try {
ExceptionDialog dialog;
QMetaObject::invokeMethod(&dialog, "throwException", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(&dialog, "reject", Qt::QueuedConnection);
(void) dialog.exec();
} catch(...) {
++caughtExceptions;
}
+#ifdef Q_OS_SYMBIAN
+ //on symbian, the event loop absorbs exceptions
+ QCOMPARE(caughtExceptions, 0);
+#else
QCOMPARE(caughtExceptions, 1);
+#endif
}
#else
void tst_QDialog::throwInExec()
diff --git a/tests/auto/qdiriterator/tst_qdiriterator.cpp b/tests/auto/qdiriterator/tst_qdiriterator.cpp
index c1db8f2..1a873b8 100644
--- a/tests/auto/qdiriterator/tst_qdiriterator.cpp
+++ b/tests/auto/qdiriterator/tst_qdiriterator.cpp
@@ -85,11 +85,13 @@ private: // convenience functions
return false;
}
- bool createFile(const QString &fileName)
+ enum Cleanup { DoDelete, DontDelete };
+ bool createFile(const QString &fileName, Cleanup cleanup = DoDelete)
{
QFile file(fileName);
if (file.open(QIODevice::WriteOnly)) {
- createdFiles << fileName;
+ if (cleanup == DoDelete)
+ createdFiles << fileName;
return true;
}
return false;
@@ -131,9 +133,9 @@ tst_QDirIterator::tst_QDirIterator()
createDirectory("entrylist");
createDirectory("entrylist/directory");
- createFile("entrylist/file");
+ createFile("entrylist/file", DontDelete);
createFile("entrylist/writable");
- createFile("entrylist/directory/dummy");
+ createFile("entrylist/directory/dummy", DontDelete);
createDirectory("recursiveDirs");
createDirectory("recursiveDirs/dir1");
diff --git a/tests/auto/qfiledialog/tst_qfiledialog.cpp b/tests/auto/qfiledialog/tst_qfiledialog.cpp
index 9adb4fc..38a1ee7 100644
--- a/tests/auto/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/qfiledialog/tst_qfiledialog.cpp
@@ -548,7 +548,7 @@ void tst_QFiledialog::completer()
// ### FIXME: This will fail on Symbian on some tests and some environments until the file engine and QFileSystemModel
// are fixed to properly capitalize paths, so that some folders are not duplicated in QFileSystemModel.
#if defined(Q_OS_SYMBIAN)
- QSKIP("This will fail on Symbian on some tests and some environments until the file engine and QFileSystemModel are fixed to properly capitalize paths")
+ QSKIP("This will fail on Symbian on some tests and some environments until the file engine and QFileSystemModel are fixed to properly capitalize paths", SkipAll);
#endif
QTRY_COMPARE(cModel->rowCount(), expected);
} QT_CATCH(...) {
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 03ce45a..e2f7f18 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -62,6 +62,7 @@
#include <QVBoxLayout>
#include <QGraphicsEffect>
#include <QInputContext>
+#include <QPushButton>
#include "../../shared/util.h"
@@ -426,6 +427,7 @@ private slots:
void itemIsInFront();
void scenePosChange();
void updateMicroFocus();
+ void textItem_shortcuts();
// task specific tests below me
void task141694_textItemEnsureVisible();
@@ -10060,6 +10062,42 @@ void tst_QGraphicsItem::updateMicroFocus()
QTRY_COMPARE(ic2.nbUpdates, 0);
}
+void tst_QGraphicsItem::textItem_shortcuts()
+{
+ QWidget w;
+ QVBoxLayout l;
+ w.setLayout(&l);
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ l.addWidget(&view);
+ QPushButton b("Push Me");
+ l.addWidget(&b);
+
+ QGraphicsTextItem *item = scene.addText("Troll Text");
+ item->setFlag(QGraphicsItem::ItemIsFocusable);
+ item->setTextInteractionFlags(Qt::TextEditorInteraction);
+ w.show();
+ QTest::qWaitForWindowShown(&w);
+
+ item->setFocus();
+ QTRY_VERIFY(item->hasFocus());
+ QVERIFY(item->textCursor().selectedText().isEmpty());
+
+ // Shortcut should work (select all)
+ QTest::keyClick(&view, Qt::Key_A, Qt::ControlModifier);
+ QTRY_COMPARE(item->textCursor().selectedText(), item->toPlainText());
+ QTextCursor tc = item->textCursor();
+ tc.clearSelection();
+ item->setTextCursor(tc);
+ QVERIFY(item->textCursor().selectedText().isEmpty());
+
+ // Shortcut should also work if the text item has the focus and another widget
+ // has the same shortcut.
+ b.setShortcut(QKeySequence("CTRL+A"));
+ QTest::keyClick(&view, Qt::Key_A, Qt::ControlModifier);
+ QTRY_COMPARE(item->textCursor().selectedText(), item->toPlainText());
+}
+
void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
{
struct Item : public QGraphicsTextItem
diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
index 1c19fab..5e889f4 100644
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
@@ -239,6 +239,7 @@ private slots:
void QTBUG_4151_clipAndIgnore_data();
void QTBUG_4151_clipAndIgnore();
void QTBUG_5859_exposedRect();
+ void QTBUG_7438_cursor();
};
void tst_QGraphicsView::initTestCase()
@@ -4063,5 +4064,32 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect()
QCOMPARE(item.lastExposedRect, scene.lastBackgroundExposedRect);
}
+void tst_QGraphicsView::QTBUG_7438_cursor()
+{
+#ifndef QT_NO_CURSOR
+#if defined(Q_OS_WINCE)
+ QSKIP("Qt/CE does not have regular cursor support", SkipAll);
+#endif
+ QGraphicsScene scene;
+ QGraphicsItem *item = scene.addRect(QRectF(-10, -10, 20, 20));
+ item->setFlag(QGraphicsItem::ItemIsMovable);
+
+ QGraphicsView view(&scene);
+ view.setFixedSize(400, 400);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ QCOMPARE(view.viewport()->cursor().shape(), QCursor().shape());
+ view.viewport()->setCursor(Qt::PointingHandCursor);
+ QCOMPARE(view.viewport()->cursor().shape(), Qt::PointingHandCursor);
+ sendMouseMove(view.viewport(), view.mapFromScene(0, 0));
+ QCOMPARE(view.viewport()->cursor().shape(), Qt::PointingHandCursor);
+ sendMousePress(view.viewport(), view.mapFromScene(0, 0));
+ QCOMPARE(view.viewport()->cursor().shape(), Qt::PointingHandCursor);
+ sendMouseRelease(view.viewport(), view.mapFromScene(0, 0));
+ QCOMPARE(view.viewport()->cursor().shape(), Qt::PointingHandCursor);
+#endif
+}
+
QTEST_MAIN(tst_QGraphicsView)
#include "tst_qgraphicsview.moc"
diff --git a/tests/auto/qhostinfo/tst_qhostinfo.cpp b/tests/auto/qhostinfo/tst_qhostinfo.cpp
index 4282062..c336746 100644
--- a/tests/auto/qhostinfo/tst_qhostinfo.cpp
+++ b/tests/auto/qhostinfo/tst_qhostinfo.cpp
@@ -128,6 +128,7 @@ private slots:
void threadSafety();
void multipleSameLookups();
+ void multipleDifferentLookups_data();
void multipleDifferentLookups();
void cache();
@@ -441,36 +442,46 @@ void tst_QHostInfo::multipleSameLookups()
for (int i = 0; i < COUNT; i++)
QHostInfo::lookupHost("localhost", this, SLOT(resultsReady(const QHostInfo)));
- QTRY_VERIFY(lookupsDoneCounter == COUNT);
-
- // spin two seconds more to see if it is not more :)
- QTestEventLoop::instance().enterLoop(2);
- QTRY_VERIFY(lookupsDoneCounter == COUNT);
+ QElapsedTimer timer;
+ timer.start();
+ while (timer.elapsed() < 10000 && lookupsDoneCounter < COUNT) {
+ QTestEventLoop::instance().enterLoop(2);
+ }
+ QCOMPARE(lookupsDoneCounter, COUNT);
}
// this test is for the multi-threaded QHostInfo rewrite. It is about getting results at all,
// not about getting correct IPs
+void tst_QHostInfo::multipleDifferentLookups_data()
+{
+ QTest::addColumn<int>("repeats");
+ QTest::newRow("1") << 1;
+ QTest::newRow("2") << 2;
+ QTest::newRow("5") << 5;
+ QTest::newRow("10") << 10;
+}
+
void tst_QHostInfo::multipleDifferentLookups()
{
QStringList hostnameList;
hostnameList << "www.ovi.com" << "www.nokia.com" << "qt.nokia.com" << "www.trolltech.com" << "troll.no"
- << "www.qtcentre.org" << "forum.nokia.com" << "www.forum.nokia.com" << "wiki.forum.nokia.com"
- << "www.nokia.no" << "nokia.de" << "127.0.0.1" << "----";
+ << "www.qtcentre.org" << "forum.nokia.com" << "www.nokia.com" << "wiki.forum.nokia.com"
+ << "www.nokia.com" << "nokia.de" << "127.0.0.1" << "----";
+ QFETCH(int, repeats);
const int COUNT = hostnameList.size();
lookupsDoneCounter = 0;
for (int i = 0; i < hostnameList.size(); i++)
- QHostInfo::lookupHost(hostnameList.at(i), this, SLOT(resultsReady(const QHostInfo)));
-
- // give some time
- QTestEventLoop::instance().enterLoop(5);
- // try_verify gives some more time
- QTRY_VERIFY(lookupsDoneCounter == COUNT);
+ for (int j = 0; j < repeats; ++j)
+ QHostInfo::lookupHost(hostnameList.at(i), this, SLOT(resultsReady(const QHostInfo)));
- // spin two seconds more to see if it is not more than expected
- QTestEventLoop::instance().enterLoop(2);
- QTRY_VERIFY(lookupsDoneCounter == COUNT);
+ QElapsedTimer timer;
+ timer.start();
+ while (timer.elapsed() < 10000 && lookupsDoneCounter < repeats*COUNT) {
+ QTestEventLoop::instance().enterLoop(2);
+ }
+ QCOMPARE(lookupsDoneCounter, repeats*COUNT);
}
void tst_QHostInfo::cache()
@@ -517,7 +528,7 @@ void tst_QHostInfo::resultsReady(const QHostInfo &hi)
lookupDone = true;
lookupResults = hi;
lookupsDoneCounter++;
- QTestEventLoop::instance().exitLoop();
+ QMetaObject::invokeMethod(&QTestEventLoop::instance(), "exitLoop", Qt::QueuedConnection);
}
QTEST_MAIN(tst_QHostInfo)
diff --git a/tests/auto/qicon/tst_qicon.cpp b/tests/auto/qicon/tst_qicon.cpp
index fae9cc0..e68664c 100644
--- a/tests/auto/qicon/tst_qicon.cpp
+++ b/tests/auto/qicon/tst_qicon.cpp
@@ -76,6 +76,7 @@ private slots:
void svg();
void addFile();
void availableSizes();
+ void name();
void streamAvailableSizes_data();
void streamAvailableSizes();
void fromTheme();
@@ -550,6 +551,28 @@ void tst_QIcon::availableSizes()
}
}
+void tst_QIcon::name()
+{
+ {
+ // No name if icon does not come from a theme
+ QIcon icon(":/image.png");
+ QString name = icon.name();
+ QVERIFY(name.isEmpty());
+ }
+
+ {
+ // Getting the name of an icon coming from a theme should work
+ QString searchPath = QLatin1String(":/icons");
+ QIcon::setThemeSearchPaths(QStringList() << searchPath);
+ QString themeName("testtheme");
+ QIcon::setThemeName(themeName);
+
+ QIcon icon = QIcon::fromTheme("appointment-new");
+ QString name = icon.name();
+ QCOMPARE(name, QLatin1String("appointment-new"));
+ }
+}
+
void tst_QIcon::streamAvailableSizes_data()
{
QTest::addColumn<QIcon>("icon");
diff --git a/tests/auto/qitemmodel/tst_qitemmodel.cpp b/tests/auto/qitemmodel/tst_qitemmodel.cpp
index f466045..d36df9c 100644
--- a/tests/auto/qitemmodel/tst_qitemmodel.cpp
+++ b/tests/auto/qitemmodel/tst_qitemmodel.cpp
@@ -452,7 +452,7 @@ void checkChildren(QAbstractItemModel *currentModel, const QModelIndex &parent,
QCOMPARE(index.column(), c);
QCOMPARE(currentModel->data(index, Qt::DisplayRole).isValid(), true);
- // If the next test fails here is some somewhat usefull debug you play with.
+ // If the next test fails here is some somewhat useful debug you play with.
/*
if (currentModel->parent(index) != parent) {
qDebug() << r << c << currentDepth << currentModel->data(index).toString()
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index f5c32cd..330f803 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -124,6 +124,7 @@ private slots:
void taskQTBUG_2678_spacingAndWrappedText();
void taskQTBUG_5877_skippingItemInPageDownUp();
void taskQTBUG_9455_wrongScrollbarRanges();
+ void styleOptionViewItem();
};
// Testing get/set functions
@@ -1971,5 +1972,35 @@ void tst_QListView::taskQTBUG_9455_wrongScrollbarRanges()
QCOMPARE(w.verticalScrollBar()->maximum(), w.contentsSize().height() - w.viewport()->geometry().height());
}
+void tst_QListView::styleOptionViewItem()
+{
+ class MyDelegate : public QStyledItemDelegate
+ {
+ public:
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ {
+ QVERIFY(qstyleoption_cast<const QStyleOptionViewItemV4 *>(&option));
+ QStyleOptionViewItemV4 opt(option);
+ initStyleOption(&opt, index);
+
+ QCOMPARE(opt.index, index);
+
+ QStyledItemDelegate::paint(painter, option, index);
+ }
+ };
+
+ QListView view;
+ QStandardItemModel model;
+ view.setModel(&model);
+ MyDelegate delegate;
+ view.setItemDelegate(&delegate);
+ model.appendRow(QList<QStandardItem*>()
+ << new QStandardItem("Beginning") << new QStandardItem("Middle") << new QStandardItem("Middle") << new QStandardItem("End") );
+
+ // Run test
+ view.showMaximized();
+ QApplication::processEvents();
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"
diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp
index 9a4397e..7a5b053 100644
--- a/tests/auto/qthread/tst_qthread.cpp
+++ b/tests/auto/qthread/tst_qthread.cpp
@@ -442,9 +442,9 @@ void tst_QThread::exit()
thread2.object = 0;
thread2.code = 53;
thread2.result = 0;
+ QMutexLocker locker2(&thread2.mutex);
thread2.start();
thread2.exit(thread2.code);
- QMutexLocker locker2(&thread2.mutex);
thread2.cond.wait(locker2.mutex());
QVERIFY(thread2.wait(five_minutes));
QCOMPARE(thread2.result, thread2.code);
@@ -514,9 +514,9 @@ void tst_QThread::quit()
Quit_Thread thread2;
thread2.object = 0;
thread2.result = -1;
+ QMutexLocker locker2(&thread2.mutex);
thread2.start();
thread2.quit();
- QMutexLocker locker2(&thread2.mutex);
thread2.cond.wait(locker2.mutex());
QVERIFY(thread2.wait(five_minutes));
QCOMPARE(thread2.result, 0);
diff --git a/tests/benchmarks/corelib/kernel/qobject/main.cpp b/tests/benchmarks/corelib/kernel/qobject/main.cpp
index 7f24ebd..8d05fcd 100644
--- a/tests/benchmarks/corelib/kernel/qobject/main.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/main.cpp
@@ -69,6 +69,7 @@ void QObjectBenchmark::signal_slot_benchmark_data()
QTest::newRow("simple function") << 0;
QTest::newRow("single signal/slot") << 1;
QTest::newRow("multi signal/slot") << 2;
+ QTest::newRow("unconnected signal") << 3;
}
void QObjectBenchmark::signal_slot_benchmark()
@@ -110,9 +111,13 @@ void QObjectBenchmark::signal_slot_benchmark()
QBENCHMARK {
singleObject.emitSignal0();
}
- } else {
+ } else if (type == 2) {
QBENCHMARK {
- multiObject.emitSignal0();
+ multiObject.emitSignal0();
+ }
+ } else if (type == 3) {
+ QBENCHMARK {
+ singleObject.emitSignal1();
}
}
}
diff --git a/tests/benchmarks/corelib/kernel/qobject/object.cpp b/tests/benchmarks/corelib/kernel/qobject/object.cpp
index d775a32..3920e97 100644
--- a/tests/benchmarks/corelib/kernel/qobject/object.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/object.cpp
@@ -42,6 +42,9 @@
void Object::emitSignal0()
{ emit signal0(); }
+void Object::emitSignal1()
+{ emit signal1(); }
+
void Object::slot0()
{ }
diff --git a/tests/benchmarks/corelib/kernel/qobject/object.h b/tests/benchmarks/corelib/kernel/qobject/object.h
index 7e4933f..8f8fbe9 100644
--- a/tests/benchmarks/corelib/kernel/qobject/object.h
+++ b/tests/benchmarks/corelib/kernel/qobject/object.h
@@ -48,6 +48,7 @@ class Object : public QObject
Q_OBJECT
public:
void emitSignal0();
+ void emitSignal1();
signals:
void signal0();
void signal1();
diff --git a/tools/assistant/tools/assistant/helpviewer.cpp b/tools/assistant/tools/assistant/helpviewer.cpp
index 0c51a02..22b3f30 100644
--- a/tools/assistant/tools/assistant/helpviewer.cpp
+++ b/tools/assistant/tools/assistant/helpviewer.cpp
@@ -52,6 +52,10 @@
QT_BEGIN_NAMESPACE
+QString AbstractHelpViewer::DocPath = QString::fromLatin1("qthelp://com."
+ "trolltech.qt.%1/").arg(QString(QLatin1String(QT_VERSION_STR))
+ .replace(QLatin1String("."), QLatin1String("")));
+
QString AbstractHelpViewer::AboutBlank =
QCoreApplication::translate("HelpViewer", "<title>about:blank</title>");
@@ -128,11 +132,12 @@ bool AbstractHelpViewer::canOpenPage(const QString &url)
return !mimeFromUrl(url).isEmpty();
}
-QString AbstractHelpViewer::mimeFromUrl(const QString &url)
+QString AbstractHelpViewer::mimeFromUrl(const QUrl &url)
{
TRACE_OBJ
- const int index = url.lastIndexOf(QLatin1Char('.'));
- const QByteArray &ext = url.mid(index).toUtf8().toLower();
+ const QString &path = url.path();
+ const int index = path.lastIndexOf(QLatin1Char('.'));
+ const QByteArray &ext = path.mid(index).toUtf8().toLower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
diff --git a/tools/assistant/tools/assistant/helpviewer.h b/tools/assistant/tools/assistant/helpviewer.h
index 6f1f48d..80a6f87 100644
--- a/tools/assistant/tools/assistant/helpviewer.h
+++ b/tools/assistant/tools/assistant/helpviewer.h
@@ -67,13 +67,14 @@ public:
virtual bool handleForwardBackwardMouseButtons(QMouseEvent *e) = 0;
+ static QString DocPath;
static QString AboutBlank;
static QString LocalHelpFile;
static QString PageNotFoundMessage;
static bool isLocalUrl(const QUrl &url);
static bool canOpenPage(const QString &url);
- static QString mimeFromUrl(const QString &url);
+ static QString mimeFromUrl(const QUrl &url);
static bool launchWithExternalApp(const QUrl &url);
};
diff --git a/tools/assistant/tools/assistant/helpviewer_qwv.cpp b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
index db1cd58..a19b29a 100644
--- a/tools/assistant/tools/assistant/helpviewer_qwv.cpp
+++ b/tools/assistant/tools/assistant/helpviewer_qwv.cpp
@@ -129,13 +129,27 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation /*op*/,
const QNetworkRequest &request, QIODevice* /*outgoingData*/)
{
TRACE_OBJ
- const QUrl &url = request.url();
- const QString &mimeType = AbstractHelpViewer::mimeFromUrl(url.toString());
-
+ QString url = request.url().toString();
HelpEngineWrapper &helpEngine = HelpEngineWrapper::instance();
+
+ // TODO: For some reason the url to load is already wrong (passed from webkit)
+ // though the css file and the references inside should work that way. One
+ // possible problem might be that the css is loaded at the same level as the
+ // html, thus a path inside the css like (../images/foo.png) might cd out of
+ // the virtual folder
+ if (!helpEngine.findFile(url).isValid()) {
+ if (url.startsWith(AbstractHelpViewer::DocPath)) {
+ if (!url.startsWith(AbstractHelpViewer::DocPath + QLatin1String("qdoc/"))) {
+ url = url.replace(AbstractHelpViewer::DocPath,
+ AbstractHelpViewer::DocPath + QLatin1String("qdoc/"));
+ }
+ }
+ }
+
+ const QString &mimeType = AbstractHelpViewer::mimeFromUrl(url);
const QByteArray &data = helpEngine.findFile(url).isValid()
? helpEngine.fileData(url)
- : AbstractHelpViewer::PageNotFoundMessage.arg(url.toString()).toUtf8();
+ : AbstractHelpViewer::PageNotFoundMessage.arg(url).toUtf8();
return new HelpNetworkReply(request, data, mimeType.isEmpty()
? QLatin1String("application/octet-stream") : mimeType);
}
diff --git a/tools/designer/src/components/propertyeditor/propertyeditor.cpp b/tools/designer/src/components/propertyeditor/propertyeditor.cpp
index 86d7bdf..a8ca8ad 100644
--- a/tools/designer/src/components/propertyeditor/propertyeditor.cpp
+++ b/tools/designer/src/components/propertyeditor/propertyeditor.cpp
@@ -135,7 +135,7 @@ QSize ElidingLabel::sizeHint() const
return size;
}
-void ElidingLabel::paintEvent(QPaintEvent *e) {
+void ElidingLabel::paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.setPen(QColor(0, 0, 0, 60));
painter.setBrush(QColor(255, 255, 255, 40));
diff --git a/tools/designer/src/lib/shared/filterwidget.cpp b/tools/designer/src/lib/shared/filterwidget.cpp
index f485346..07af901 100644
--- a/tools/designer/src/lib/shared/filterwidget.cpp
+++ b/tools/designer/src/lib/shared/filterwidget.cpp
@@ -80,8 +80,11 @@ void IconButton::paintEvent(QPaintEvent *)
QPainter painter(this);
// Note isDown should really use the active state but in most styles
// this has no proper feedback
- QPixmap iconpixmap = icon().pixmap(ICONBUTTON_SIZE, ICONBUTTON_SIZE, isDown() ?
- QIcon::Selected : QIcon::Normal);
+ QIcon::Mode state = QIcon::Disabled;
+ if (isEnabled())
+ state = isDown() ? QIcon::Selected : QIcon::Normal;
+ QPixmap iconpixmap = icon().pixmap(QSize(ICONBUTTON_SIZE, ICONBUTTON_SIZE),
+ state, QIcon::Off);
QRect pixmapRect = QRect(0, 0, iconpixmap.width(), iconpixmap.height());
pixmapRect.moveCenter(rect().center());
painter.setOpacity(m_fader);
@@ -204,9 +207,12 @@ QString FilterWidget::text() const
return m_editor->text();
}
-void FilterWidget::checkButton(const QString &)
+void FilterWidget::checkButton(const QString &text)
{
- m_button->animateShow(!m_editor->text().isEmpty());
+ static QString oldtext;
+ if (oldtext.isEmpty() || text.isEmpty())
+ m_button->animateShow(!m_editor->text().isEmpty());
+ oldtext = text;
}
void FilterWidget::reset()
diff --git a/tools/pixeltool/qpixeltool.cpp b/tools/pixeltool/qpixeltool.cpp
index c684688..f64dfba 100644
--- a/tools/pixeltool/qpixeltool.cpp
+++ b/tools/pixeltool/qpixeltool.cpp
@@ -356,7 +356,7 @@ void QPixelTool::contextMenuEvent(QContextMenuEvent *e)
freeze.setCheckable(true);
freeze.setChecked(tmpFreeze);
freeze.setShortcut(QKeySequence(Qt::Key_Space));
- QAction autoUpdate(QLatin1String("Continous update"), &menu);
+ QAction autoUpdate(QLatin1String("Continuous update"), &menu);
autoUpdate.setCheckable(true);
autoUpdate.setChecked(m_autoUpdate);
autoUpdate.setShortcut(QKeySequence(Qt::Key_A));
diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h
index 980d1fb..c29becc 100644
--- a/tools/qdoc3/config.h
+++ b/tools/qdoc3/config.h
@@ -142,6 +142,7 @@ class Config
#define CONFIG_MACRO "macro"
#define CONFIG_NATURALLANGUAGE "naturallanguage"
#define CONFIG_OBSOLETELINKS "obsoletelinks"
+#define CONFIG_ONLINE "online"
#define CONFIG_OUTPUTDIR "outputdir"
#define CONFIG_OUTPUTENCODING "outputencoding"
#define CONFIG_OUTPUTLANGUAGE "outputlanguage"
diff --git a/tools/qdoc3/doc.cpp b/tools/qdoc3/doc.cpp
index ad4cdde..5716626 100644
--- a/tools/qdoc3/doc.cpp
+++ b/tools/qdoc3/doc.cpp
@@ -3036,7 +3036,7 @@ QString Doc::canonicalTitle(const QString &title)
QString result;
result.reserve(title.size());
- bool slurping = false;
+ bool dashAppended = false;
bool begun = false;
int lastAlnum = 0;
for (int i = 0; i != title.size(); ++i) {
@@ -3047,18 +3047,21 @@ QString Doc::canonicalTitle(const QString &title)
if (alnum) {
result += QLatin1Char(c);
begun = true;
- slurping = false;
+ dashAppended = false;
lastAlnum = result.size();
}
- else if (!slurping) {
+ else if (!dashAppended) {
if (begun)
result += QLatin1Char('-');
- slurping = true;
+ dashAppended = true;
}
+#if 0
+ // This was screwing things up.
else {
result += title[i];
lastAlnum = result.size();
}
+#endif
}
result.truncate(lastAlnum);
return result;
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index a5dc7b7..bf2f724 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -204,10 +204,18 @@ static void addLink(const QString &linkTarget,
HtmlGenerator::HtmlGenerator()
- : helpProjectWriter(0), inLink(false), inContents(false),
- inSectionHeading(false), inTableHeader(false), numTableRows(0),
- threeColumnEnumValueTable(true), funcLeftParen("\\S(\\()"),
- myTree(0), slow(false), obsoleteLinks(false)
+ : helpProjectWriter(0),
+ inLink(false),
+ inContents(false),
+ inSectionHeading(false),
+ inTableHeader(false),
+ numTableRows(0),
+ threeColumnEnumValueTable(true),
+ offlineDocs(true),
+ funcLeftParen("\\S(\\()"),
+ myTree(0),
+ slow(false),
+ obsoleteLinks(false)
{
}
@@ -262,7 +270,7 @@ void HtmlGenerator::initializeGenerator(const Config &config)
HTMLGENERATOR_GENERATEMACREFS);
project = config.getString(CONFIG_PROJECT);
-
+ offlineDocs = !config.getBool(CONFIG_ONLINE);
projectDescription = config.getString(CONFIG_DESCRIPTION);
if (projectDescription.isEmpty() && !project.isEmpty())
projectDescription = project + " Reference Documentation";
@@ -406,9 +414,7 @@ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker)
generateIndex(fileBase, projectUrl, projectDescription);
generatePageIndex(outputDir() + "/" + fileBase + ".pageindex", marker);
- //qDebug() << "start helpProjectWriter->generate(myTree)";
helpProjectWriter->generate(myTree);
- //qDebug() << "end helpProjectWriter->generate(myTree)";
}
void HtmlGenerator::startText(const Node * /* relative */,
@@ -506,14 +512,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << formattingRightMap()[ATOM_FORMATTING_TELETYPE];
break;
case Atom::Code:
- out() << "<pre>"
+ out() << "<pre class=\"highlightedCode\">"
<< trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
marker,relative))
<< "</pre>\n";
break;
#ifdef QDOC_QML
case Atom::Qml:
- out() << "<pre>"
+ out() << "<pre class=\"highlightedCode\">"
<< trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
marker,relative))
<< "</pre>\n";
@@ -521,7 +527,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
#endif
case Atom::CodeNew:
out() << "<p>you can rewrite it as</p>\n"
- << "<pre>"
+ << "<pre class=\"highlightedCode\">"
<< trimmedTrailing(highlightedCode(indent(codeIndent,atom->string()),
marker,relative))
<< "</pre>\n";
@@ -530,9 +536,9 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "<p>For example, if you have code like</p>\n";
// fallthrough
case Atom::CodeBad:
- out() << "<pre><font color=\"#404040\">"
+ out() << "<pre class=\"highlightedCode\">"
<< trimmedTrailing(protectEnc(plainCode(indent(codeIndent,atom->string()))))
- << "</font></pre>\n";
+ << "</pre>\n";
break;
case Atom::FootnoteLeft:
// ### For now
@@ -841,7 +847,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
if (atom->next() != 0)
text = atom->next()->string();
if (atom->type() == Atom::Image)
- out() << "<p align=\"center\">";
+ out() << "<p class=\"centerAlign\">";
if (fileName.isEmpty()) {
out() << "<font color=\"red\">[Missing image "
<< protectEnc(atom->string()) << "]</font>";
@@ -860,7 +866,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
case Atom::ImageText:
break;
case Atom::LegaleseLeft:
- out() << "<div style=\"padding: 0.5em; background: #e0e0e0; color: black\">";
+ out() << "<div class=\"LegaleseLeft\">";
break;
case Atom::LegaleseRight:
out() << "</div>";
@@ -902,13 +908,13 @@ int HtmlGenerator::generateAtom(const Atom *atom,
else if (atom->string() == ATOM_LIST_VALUE) {
threeColumnEnumValueTable = isThreeColumnEnumValueTable(atom);
if (threeColumnEnumValueTable) {
- out() << "<p><table class=\"valuelist\">"
+ out() << "<table class=\"valuelist\">"
<< "<tr><th>Constant</th>"
<< "<th>Value</th>"
<< "<th>Description</th></tr>\n";
}
else {
- out() << "<p><table class=\"valuelist\">"
+ out() << "<table class=\"valuelist\">"
<< "<tr><th>Constant</th><th>Value</th></tr>\n";
}
}
@@ -943,10 +949,10 @@ int HtmlGenerator::generateAtom(const Atom *atom,
else { // (atom->string() == ATOM_LIST_VALUE)
// ### Trenton
- out() << "<tr><td valign=\"top\"><tt>"
+ out() << "<tr><td class=\"topAlign\"><tt>"
<< protectEnc(plainCode(marker->markedUpEnumValue(atom->next()->string(),
relative)))
- << "</tt></td><td align=\"center\" valign=\"top\">";
+ << "</tt></td><td class=\"centerAlign topAlign\">";
QString itemValue;
if (relative->type() == Node::Enum) {
@@ -972,7 +978,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
else if (atom->string() == ATOM_LIST_VALUE) {
if (threeColumnEnumValueTable) {
- out() << "</td><td valign=\"top\">";
+ out() << "</td><td class=\"topAlign\">";
if (matchAhead(atom, Atom::ListItemRight))
out() << "&nbsp;";
}
@@ -1002,7 +1008,7 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "</dl>\n";
}
else if (atom->string() == ATOM_LIST_VALUE) {
- out() << "</table></p>\n";
+ out() << "</table>\n";
}
else {
out() << "</ol>\n";
@@ -1083,29 +1089,28 @@ int HtmlGenerator::generateAtom(const Atom *atom,
}
if (!atom->string().isEmpty()) {
if (atom->string().contains("%"))
- out() << "<p><table class=\"generic\" width=\"" << atom->string() << "\" "
- << "align=\"center\">\n";
+ out() << "<table class=\"generic centerAlign\" width=\"" << atom->string() << "\">\n ";
else {
- out() << "<p><table class=\"generic\" align=\"center\">\n";
+ out() << "<table class=\"generic centerAlign\">\n";
}
}
else {
- out() << "<p><table class=\"generic\" align=\"center\">\n";
+ out() << "<table class=\"generic centerAlign\">\n";
}
numTableRows = 0;
break;
case Atom::TableRight:
- out() << "</table></p>\n";
+ out() << "</table>\n";
break;
case Atom::TableHeaderLeft:
- out() << "<thead><tr valign=\"top\" class=\"qt-style\">";
+ out() << "<thead><tr class=\"qt-style topAlign\">";
inTableHeader = true;
break;
case Atom::TableHeaderRight:
out() << "</tr>";
if (matchAhead(atom, Atom::TableHeaderLeft)) {
skipAhead = 1;
- out() << "\n<tr valign=\"top\" class=\"qt-style\">";
+ out() << "\n<tr class=\"qt-style topAlign\">";
}
else {
out() << "</thead>\n";
@@ -1114,9 +1119,9 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::TableRowLeft:
if (++numTableRows % 2 == 1)
- out() << "<tr valign=\"top\" class=\"odd\">";
+ out() << "<tr class=\"odd topAlign\">";
else
- out() << "<tr valign=\"top\" class=\"even\">";
+ out() << "<tr class=\"even topAlign\">";
break;
case Atom::TableRowRight:
out() << "</tr>\n";
@@ -1181,11 +1186,11 @@ int HtmlGenerator::generateAtom(const Atom *atom,
out() << "<a name=\"" << Doc::canonicalTitle(atom->string()) << "\"></a>";
break;
case Atom::UnhandledFormat:
- out() << "<font color=\"red\"><b>&lt;Missing HTML&gt;</b></font>";
+ out() << "<b class=\"redFont\">&lt;Missing HTML&gt;</b>";
break;
case Atom::UnknownCommand:
- out() << "<font color=\"red\"><b><code>\\" << protectEnc(atom->string())
- << "</code></b></font>";
+ out() << "<b class=\"redFont\"><code>\\" << protectEnc(atom->string())
+ << "</code></b>";
break;
#ifdef QDOC_QML
case Atom::QmlText:
@@ -1737,146 +1742,17 @@ void HtmlGenerator::generateHeader(const QString& title,
out() << " <script src=\"scripts/jquery.js\" type=\"text/javascript\"></script>\n";
out() << " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n";
out() << "</head>\n";
-
-#if 0
- out() << "<!DOCTYPE html\n"
- " PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n";
- out() << QString("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"%1\" lang=\"%1\">\n").arg(naturalLanguage);
-
- QString shortVersion;
- if ((project != "Qtopia") && (project != "Qt Extended")) {
- shortVersion = project + " " + shortVersion + ": ";
- if (node && !node->doc().location().isEmpty())
- out() << "<!-- " << node->doc().location().fileName() << " -->\n";
-
- shortVersion = myTree->version();
- if (shortVersion.count(QChar('.')) == 2)
- shortVersion.truncate(shortVersion.lastIndexOf(QChar('.')));
- if (!shortVersion.isEmpty()) {
- if (project == "QSA")
- shortVersion = "QSA " + shortVersion + ": ";
- else
- shortVersion = "Qt " + shortVersion + ": ";
- }
- }
-
- out() << "<head>\n"
- " <title>" << shortVersion << protectEnc(title) << "</title>\n";
- out() << QString("<meta http-equiv=\"Content-type\" content=\"text/html; charset=%1\" />").arg(outputEncoding);
-
- if (!style.isEmpty())
- out() << " <style type=\"text/css\">" << style << "</style>\n";
-
- const QMap<QString, QString> &metaMap = node->doc().metaTagMap();
- if (!metaMap.isEmpty()) {
- QMapIterator<QString, QString> i(metaMap);
- while (i.hasNext()) {
- i.next();
- out() << " <meta name=\"" << protectEnc(i.key()) << "\" contents=\""
- << protectEnc(i.value()) << "\" />\n";
- }
- }
-
- navigationLinks.clear();
-
- if (node && !node->links().empty()) {
- QPair<QString,QString> linkPair;
- QPair<QString,QString> anchorPair;
- const Node *linkNode;
-
- if (node->links().contains(Node::PreviousLink)) {
- linkPair = node->links()[Node::PreviousLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- out() << " <link rel=\"prev\" href=\""
- << anchorPair.first << "\" />\n";
-
- navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">";
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- navigationLinks += protectEnc(anchorPair.second);
- else
- navigationLinks += protectEnc(linkPair.second);
- navigationLinks += "</a>]\n";
- }
- if (node->links().contains(Node::ContentsLink)) {
- linkPair = node->links()[Node::ContentsLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- out() << " <link rel=\"contents\" href=\""
- << anchorPair.first << "\" />\n";
- navigationLinks += "[<a href=\"" + anchorPair.first + "\">";
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- navigationLinks += protectEnc(anchorPair.second);
- else
- navigationLinks += protectEnc(linkPair.second);
- navigationLinks += "</a>]\n";
- }
- if (node->links().contains(Node::NextLink)) {
- linkPair = node->links()[Node::NextLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
-
- out() << " <link rel=\"next\" href=\""
- << anchorPair.first << "\" />\n";
-
- navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">";
- if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
- navigationLinks += protectEnc(anchorPair.second);
- else
- navigationLinks += protectEnc(linkPair.second);
- navigationLinks += "</a>]\n";
- }
- if (node->links().contains(Node::IndexLink)) {
- linkPair = node->links()[Node::IndexLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
- out() << " <link rel=\"index\" href=\""
- << anchorPair.first << "\" />\n";
- }
- if (node->links().contains(Node::StartLink)) {
- linkPair = node->links()[Node::StartLink];
- linkNode = findNodeForTarget(linkPair.first, node, marker);
- if (!linkNode || linkNode == node)
- anchorPair = linkPair;
- else
- anchorPair = anchorForNode(linkNode);
- out() << " <link rel=\"start\" href=\""
- << anchorPair.first << "\" />\n";
- }
- }
-
- foreach (const QString &stylesheet, stylesheets) {
- out() << " <link href=\"" << stylesheet << "\" rel=\"stylesheet\" "
- << "type=\"text/css\" />\n";
- }
-
- foreach (const QString &customHeadElement, customHeadElements) {
- out() << " " << customHeadElement << "\n";
- }
-
- out() << "</head>\n"
- #endif
+ if (offlineDocs)
+ out() << "<body class=\"offline\">\n";
+ else
out() << "<body class=\"\">\n";
+
if (mainPage)
generateMacRef(node, marker);
out() << QString(postHeader).replace("\\" + COMMAND_VERSION, myTree->version());
-#if 0
+#if 0 // Removed for new docf format. MWS
if (node && !node->links().empty())
out() << "<p>\n" << navigationLinks << "</p>\n";
#endif
@@ -1932,7 +1808,7 @@ void HtmlGenerator::generateBrief(const Node *node, CodeMarker *marker,
void HtmlGenerator::generateIncludes(const InnerNode *inner, CodeMarker *marker)
{
if (!inner->includes().isEmpty()) {
- out() << "<pre>"
+ out() << "<pre clas=\"highlightedCode\">"
<< trimmedTrailing(highlightedCode(indent(codeIndent,
marker->markedUpIncludes(inner->includes())),
marker,inner))
@@ -1966,8 +1842,8 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
QString tdTag;
if (numColumns > 1) {
- tdTag = "<td width=\"" + QString::number((100 + numColumns - 1) / numColumns) + "%\">";
- out() << "<p><table class=\"toc\" width=\"100%\">\n<tr valign=\"top\">"
+ tdTag = "<td>"; /* width=\"" + QString::number((100 + numColumns - 1) / numColumns) + "%\">";*/
+ out() << "<table class=\"toc\">\n<tr class=\"topAlign\">"
<< tdTag << "\n";
}
@@ -2019,7 +1895,7 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
}
if (numColumns > 1)
- out() << "</td></tr></table></p>\n";
+ out() << "</td></tr></table>\n";
inContents = false;
inLink = false;
@@ -2104,10 +1980,12 @@ void HtmlGenerator::generateTableOfContents(const Node *node,
}
int numAtoms;
Text headingText = Text::sectionHeading(atom);
+ QString s = headingText.toString();
out() << "<li>";
out() << "<a href=\""
<< "#"
- << Doc::canonicalTitle(headingText.toString())
+ //<< registerRef(s)
+ << Doc::canonicalTitle(s)
<< "\">";
generateAtomList(headingText.firstAtom(), node, marker, true, numAtoms);
out() << "</a></li>\n";
@@ -2128,7 +2006,7 @@ void HtmlGenerator::generateNavigationBar(const NavigationBar& bar,
{
if (bar.prev.begin() != 0 || bar.current.begin() != 0 ||
bar.next.begin() != 0) {
- out() << "<p align=\"right\">";
+ out() << "<p class=\"rightAlign\">";
if (bar.prev.begin() != 0) {
#if 0
out() << "[<a href=\"" << section.previousBaseName()
@@ -2304,7 +2182,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
CodeMarker *marker,
const NodeMap &nodeMap)
{
- out() << "<p><table class=\"annotated\">\n";
+ out() << "<table class=\"annotated\">\n";
int row = 0;
foreach (const QString &name, nodeMap.keys()) {
@@ -2314,9 +2192,9 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
continue;
if (++row % 2 == 1)
- out() << "<tr valign=\"top\" class=\"odd\">";
+ out() << "<tr class=\"odd topAlign\">";
else
- out() << "<tr valign=\"top\" class=\"even\">";
+ out() << "<tr class=\"even topAlign\">";
out() << "<th>";
generateFullName(node, relative, marker);
out() << "</th>";
@@ -2336,7 +2214,7 @@ void HtmlGenerator::generateAnnotatedList(const Node *relative,
}
out() << "</tr>\n";
}
- out() << "</table></p>\n";
+ out() << "</table>\n";
}
/*!
@@ -2489,7 +2367,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
}
firstOffset[NumColumns] = classMap.count();
- out() << "<p><table class=\"generic\">\n";
+ out() << "<table class=\"generic\">\n";
for (k = 0; k < numRows; k++) {
out() << "<tr>\n";
for (i = 0; i < NumColumns; i++) {
@@ -2510,7 +2388,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
currentParagraphNo[i] = NumParagraphs - 1;
}
#endif
- out() << "<td align=\"right\">";
+ out() << "<td class=\"rightAlign\">";
if (currentOffsetInParagraph[i] == 0) {
// start a new paragraph
out() << "<b>"
@@ -2553,18 +2431,18 @@ void HtmlGenerator::generateCompactList(const Node *relative,
}
out() << "</tr>\n";
}
- out() << "</table></p>\n";
+ out() << "</table>\n";
}
void HtmlGenerator::generateFunctionIndex(const Node *relative,
CodeMarker *marker)
{
- out() << "<p align=\"center\"><font size=\"+1\"><b>";
+ out() << "<p class=\"centerAlign functionIndex\"><b>";
for (int i = 0; i < 26; i++) {
QChar ch('a' + i);
out() << QString("<a href=\"#%1\">%2</a>&nbsp;").arg(ch).arg(ch.toUpper());
}
- out() << "</b></font></p>\n";
+ out() << "</b></p>\n";
char nextLetter = 'a';
char currentLetter;
@@ -2832,8 +2710,8 @@ void HtmlGenerator::generateSection(const NodeList& nl,
}
else {
if (twoColumn)
- out() << "<p><table class=\"propsummary\">\n"
- << "<tr><td valign=\"top\">";
+ out() << "<table class=\"propsummary\">\n"
+ << "<tr><td class=\"topAlign\">";
out() << "<ul>\n";
}
@@ -2846,12 +2724,11 @@ void HtmlGenerator::generateSection(const NodeList& nl,
}
if (name_alignment) {
- out() << "<tr><td class=\"memItemLeft\" "
- << "align=\"right\" valign=\"top\">";
+ out() << "<tr><td class=\"memItemLeft rightAlign topAlign\"> ";
}
else {
if (twoColumn && i == (int) (nl.count() + 1) / 2)
- out() << "</ul></td><td valign=\"top\"><ul>\n";
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
out() << "<li><div class=\"fn\">";
}
@@ -2868,7 +2745,7 @@ void HtmlGenerator::generateSection(const NodeList& nl,
else {
out() << "</ul>\n";
if (twoColumn)
- out() << "</td></tr>\n</table></p>\n";
+ out() << "</td></tr>\n</table>\n";
}
}
}
@@ -2894,8 +2771,8 @@ void HtmlGenerator::generateSectionList(const Section& section,
}
else {
if (twoColumn)
- out() << "<p><table class=\"propsummary\">\n"
- << "<tr><td valign=\"top\">";
+ out() << "<table class=\"propsummary\">\n"
+ << "<tr><td class=\"topAlign\">";
out() << "<ul>\n";
}
@@ -2908,12 +2785,11 @@ void HtmlGenerator::generateSectionList(const Section& section,
}
if (name_alignment) {
- out() << "<tr><td class=\"memItemLeft\" "
- << "align=\"right\" valign=\"top\">";
+ out() << "<tr><td class=\"memItemLeft topAlign rightAlign\"> ";
}
else {
if (twoColumn && i == (int) (section.members.count() + 1) / 2)
- out() << "</ul></td><td valign=\"top\"><ul>\n";
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
out() << "<li><div class=\"fn\">";
}
@@ -2930,7 +2806,7 @@ void HtmlGenerator::generateSectionList(const Section& section,
else {
out() << "</ul>\n";
if (twoColumn)
- out() << "</td></tr>\n</table></p>\n";
+ out() << "</td></tr>\n</table>\n";
}
}
@@ -3027,7 +2903,7 @@ QString HtmlGenerator::highlightedCode(const QString& markedCode,
for (int i = 0, n = src.size(); i < n;) {
if (src.at(i) == charLangle && src.at(i + 1).unicode() == '@') {
if (nameAlignment && !done) {// && (i != 0)) Why was this here?
- html += "</td><td class=\"memItemRight\" valign=\"bottom\">";
+ html += "</td><td class=\"memItemRight bottomAlign\">";
done = true;
}
i += 2;
@@ -3192,8 +3068,8 @@ void HtmlGenerator::generateSectionList(const Section& section,
twoColumn = (section.members.count() >= 5);
}
if (twoColumn)
- out() << "<p><table class=\"generic\">\n"
- << "<tr><td valign=\"top\">";
+ out() << "<table class=\"generic\">\n"
+ << "<tr><td class=\"topAlign\">";
out() << "<ul>\n";
int i = 0;
@@ -3205,7 +3081,7 @@ void HtmlGenerator::generateSectionList(const Section& section,
}
if (twoColumn && i == (int) (section.members.count() + 1) / 2)
- out() << "</ul></td><td valign=\"top\"><ul>\n";
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
out() << "<li><div class=\"fn\"></div>";
if (style == CodeMarker::Accessors)
@@ -3219,7 +3095,7 @@ void HtmlGenerator::generateSectionList(const Section& section,
}
out() << "</ul>\n";
if (twoColumn)
- out() << "</td></tr>\n</table></p>\n";
+ out() << "</td></tr>\n</table>\n";
}
if (style == CodeMarker::Summary && !section.inherited.isEmpty()) {
@@ -4371,8 +4247,6 @@ void HtmlGenerator::endLink()
inObsoleteLink = false;
}
-QT_END_NAMESPACE
-
#ifdef QDOC_QML
/*!
@@ -4393,15 +4267,15 @@ void HtmlGenerator::generateQmlSummary(const Section& section,
twoColumn = (count >= 5);
}
if (twoColumn)
- out() << "<p><table class=\"qmlsummary\">\n"
- << "<tr><td valign=\"top\">";
+ out() << "<table class=\"qmlsummary\">\n"
+ << "<tr><td class=\"topAlign\">";
out() << "<ul>\n";
int row = 0;
m = section.members.begin();
while (m != section.members.end()) {
if (twoColumn && row == (int) (count + 1) / 2)
- out() << "</ul></td><td valign=\"top\"><ul>\n";
+ out() << "</ul></td><td class=\"topAlign\"><ul>\n";
out() << "<li><div class=\"fn\"></div>";
generateQmlItem(*m,relative,marker,true);
out() << "</li>\n";
@@ -4410,7 +4284,7 @@ void HtmlGenerator::generateQmlSummary(const Section& section,
}
out() << "</ul>\n";
if (twoColumn)
- out() << "</td></tr>\n</table></p>\n";
+ out() << "</td></tr>\n</table>\n";
}
}
@@ -4502,7 +4376,7 @@ void HtmlGenerator::generateQmlInherits(const QmlClassNode* cn,
const Node* n = myTree->findNode(strList,Node::Fake);
if (n && n->subType() == Node::QmlClass) {
const QmlClassNode* qcn = static_cast<const QmlClassNode*>(n);
- out() << "<p style=\"text-align: center\">";
+ out() << "<p class=\"centerAlign\">";
Text text;
text << "[Inherits ";
text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn));
@@ -4549,7 +4423,7 @@ void HtmlGenerator::generateQmlInstantiates(const QmlClassNode* qcn,
{
const ClassNode* cn = qcn->classNode();
if (cn && (cn->status() != Node::Internal)) {
- out() << "<p style=\"text-align: center\">";
+ out() << "<p class=\"centerAlign\">";
Text text;
text << "[";
text << Atom(Atom::LinkNode,CodeMarker::stringForNode(qcn));
@@ -4580,7 +4454,7 @@ void HtmlGenerator::generateInstantiatedBy(const ClassNode* cn,
if (cn && cn->status() != Node::Internal && !cn->qmlElement().isEmpty()) {
const Node* n = myTree->root()->findNode(cn->qmlElement(),Node::Fake);
if (n && n->subType() == Node::QmlClass) {
- out() << "<p style=\"text-align: center\">";
+ out() << "<p class=\"centerAlign\">";
Text text;
text << "[";
text << Atom(Atom::LinkNode,CodeMarker::stringForNode(cn));
@@ -4724,3 +4598,139 @@ void HtmlGenerator::generatePageIndex(const QString& fileName, CodeMarker* marke
}
#endif
+
+#if 0 // fossil removed for new doc format MWS 19/04/2010
+ out() << "<!DOCTYPE html\n"
+ " PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n";
+ out() << QString("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"%1\" lang=\"%1\">\n").arg(naturalLanguage);
+
+ QString shortVersion;
+ if ((project != "Qtopia") && (project != "Qt Extended")) {
+ shortVersion = project + " " + shortVersion + ": ";
+ if (node && !node->doc().location().isEmpty())
+ out() << "<!-- " << node->doc().location().fileName() << " -->\n";
+
+ shortVersion = myTree->version();
+ if (shortVersion.count(QChar('.')) == 2)
+ shortVersion.truncate(shortVersion.lastIndexOf(QChar('.')));
+ if (!shortVersion.isEmpty()) {
+ if (project == "QSA")
+ shortVersion = "QSA " + shortVersion + ": ";
+ else
+ shortVersion = "Qt " + shortVersion + ": ";
+ }
+ }
+
+ out() << "<head>\n"
+ " <title>" << shortVersion << protectEnc(title) << "</title>\n";
+ out() << QString("<meta http-equiv=\"Content-type\" content=\"text/html; charset=%1\" />").arg(outputEncoding);
+
+ if (!style.isEmpty())
+ out() << " <style type=\"text/css\">" << style << "</style>\n";
+
+ const QMap<QString, QString> &metaMap = node->doc().metaTagMap();
+ if (!metaMap.isEmpty()) {
+ QMapIterator<QString, QString> i(metaMap);
+ while (i.hasNext()) {
+ i.next();
+ out() << " <meta name=\"" << protectEnc(i.key()) << "\" contents=\""
+ << protectEnc(i.value()) << "\" />\n";
+ }
+ }
+
+ navigationLinks.clear();
+
+ if (node && !node->links().empty()) {
+ QPair<QString,QString> linkPair;
+ QPair<QString,QString> anchorPair;
+ const Node *linkNode;
+
+ if (node->links().contains(Node::PreviousLink)) {
+ linkPair = node->links()[Node::PreviousLink];
+ linkNode = findNodeForTarget(linkPair.first, node, marker);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ out() << " <link rel=\"prev\" href=\""
+ << anchorPair.first << "\" />\n";
+
+ navigationLinks += "[Previous: <a href=\"" + anchorPair.first + "\">";
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ navigationLinks += protectEnc(anchorPair.second);
+ else
+ navigationLinks += protectEnc(linkPair.second);
+ navigationLinks += "</a>]\n";
+ }
+ if (node->links().contains(Node::ContentsLink)) {
+ linkPair = node->links()[Node::ContentsLink];
+ linkNode = findNodeForTarget(linkPair.first, node, marker);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ out() << " <link rel=\"contents\" href=\""
+ << anchorPair.first << "\" />\n";
+
+ navigationLinks += "[<a href=\"" + anchorPair.first + "\">";
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ navigationLinks += protectEnc(anchorPair.second);
+ else
+ navigationLinks += protectEnc(linkPair.second);
+ navigationLinks += "</a>]\n";
+ }
+ if (node->links().contains(Node::NextLink)) {
+ linkPair = node->links()[Node::NextLink];
+ linkNode = findNodeForTarget(linkPair.first, node, marker);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+
+ out() << " <link rel=\"next\" href=\""
+ << anchorPair.first << "\" />\n";
+
+ navigationLinks += "[Next: <a href=\"" + anchorPair.first + "\">";
+ if (linkPair.first == linkPair.second && !anchorPair.second.isEmpty())
+ navigationLinks += protectEnc(anchorPair.second);
+ else
+ navigationLinks += protectEnc(linkPair.second);
+ navigationLinks += "</a>]\n";
+ }
+ if (node->links().contains(Node::IndexLink)) {
+ linkPair = node->links()[Node::IndexLink];
+ linkNode = findNodeForTarget(linkPair.first, node, marker);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+ out() << " <link rel=\"index\" href=\""
+ << anchorPair.first << "\" />\n";
+ }
+ if (node->links().contains(Node::StartLink)) {
+ linkPair = node->links()[Node::StartLink];
+ linkNode = findNodeForTarget(linkPair.first, node, marker);
+ if (!linkNode || linkNode == node)
+ anchorPair = linkPair;
+ else
+ anchorPair = anchorForNode(linkNode);
+ out() << " <link rel=\"start\" href=\""
+ << anchorPair.first << "\" />\n";
+ }
+ }
+
+ foreach (const QString &stylesheet, stylesheets) {
+ out() << " <link href=\"" << stylesheet << "\" rel=\"stylesheet\" "
+ << "type=\"text/css\" />\n";
+ }
+
+ foreach (const QString &customHeadElement, customHeadElements) {
+ out() << " " << customHeadElement << "\n";
+ }
+
+ out() << "</head>\n"
+ #endif
+
+ QT_END_NAMESPACE
diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h
index 559c968..2a365e9 100644
--- a/tools/qdoc3/htmlgenerator.h
+++ b/tools/qdoc3/htmlgenerator.h
@@ -297,6 +297,7 @@ class HtmlGenerator : public PageGenerator
bool inTableHeader;
int numTableRows;
bool threeColumnEnumValueTable;
+ bool offlineDocs;
QString link;
QStringList sectionNumber;
QRegExp funcLeftParen;
diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf
index 5308afd..1deefce 100644
--- a/tools/qdoc3/test/assistant.qdocconf
+++ b/tools/qdoc3/test/assistant.qdocconf
@@ -16,7 +16,45 @@ qhp.Assistant.file = assistant.qhp
qhp.Assistant.namespace = com.trolltech.assistant.470
qhp.Assistant.virtualFolder = qdoc
qhp.Assistant.indexTitle = Qt Assistant Manual
-qhp.Assistant.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
+qhp.Assistant.extraFiles = images/api_examples.png \
+ images/api_lookup.png \
+ images/api_topics.png \
+ images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
+ images/bg_l.png \
+ images/bg_lr.png \
+ images/bg_r.png \
+ images/bg_ul_blank.png \
+ images/bg_ul.png \
+ images/bg_ur_blank.png \
+ images/bg_ur.png \
+ images/box_bg.png \
+ images/breadcrumb.png \
+ images/bullet_dn.png \
+ images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
+ images/feedbackground.png \
+ images/form_bg.png \
+ images/horBar.png \
+ images/page_bg.png \
+ images/print.png \
+ images/qt_guide.png \
+ images/qt_icon.png \
+ images/qt-logo.png \
+ images/qt_ref_doc.png \
+ images/qt_tools.png \
+ images/sep.png \
+ images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
+ images/taskmenuextension-example.png \
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.Assistant.filterAttributes = qt 4.7.0 tools assistant
qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual
qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant
diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf
index 2eb3d96..513801a 100644
--- a/tools/qdoc3/test/designer.qdocconf
+++ b/tools/qdoc3/test/designer.qdocconf
@@ -16,7 +16,45 @@ qhp.Designer.file = designer.qhp
qhp.Designer.namespace = com.trolltech.designer.470
qhp.Designer.virtualFolder = qdoc
qhp.Designer.indexTitle = Qt Designer Manual
-qhp.Designer.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
+qhp.Designer.extraFiles = images/api_examples.png \
+ images/api_lookup.png \
+ images/api_topics.png \
+ images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
+ images/bg_l.png \
+ images/bg_lr.png \
+ images/bg_r.png \
+ images/bg_ul_blank.png \
+ images/bg_ul.png \
+ images/bg_ur_blank.png \
+ images/bg_ur.png \
+ images/box_bg.png \
+ images/breadcrumb.png \
+ images/bullet_dn.png \
+ images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
+ images/feedbackground.png \
+ images/form_bg.png \
+ images/horBar.png \
+ images/page_bg.png \
+ images/print.png \
+ images/qt_guide.png \
+ images/qt_icon.png \
+ images/qt-logo.png \
+ images/qt_ref_doc.png \
+ images/qt_tools.png \
+ images/sep.png \
+ images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
+ images/taskmenuextension-example.png \
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.Designer.filterAttributes = qt 4.7.0 tools designer
qhp.Designer.customFilters.Designer.name = Qt Designer Manual
qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer
diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf
index ac536be..a3f4f00 100644
--- a/tools/qdoc3/test/linguist.qdocconf
+++ b/tools/qdoc3/test/linguist.qdocconf
@@ -16,7 +16,45 @@ qhp.Linguist.file = linguist.qhp
qhp.Linguist.namespace = com.trolltech.linguist.470
qhp.Linguist.virtualFolder = qdoc
qhp.Linguist.indexTitle = Qt Linguist Manual
-qhp.Linguist.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
+qhp.Linguist.extraFiles = images/api_examples.png \
+ images/api_lookup.png \
+ images/api_topics.png \
+ images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
+ images/bg_l.png \
+ images/bg_lr.png \
+ images/bg_r.png \
+ images/bg_ul_blank.png \
+ images/bg_ul.png \
+ images/bg_ur_blank.png \
+ images/bg_ur.png \
+ images/box_bg.png \
+ images/breadcrumb.png \
+ images/bullet_dn.png \
+ images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
+ images/feedbackground.png \
+ images/form_bg.png \
+ images/horBar.png \
+ images/page_bg.png \
+ images/print.png \
+ images/qt_guide.png \
+ images/qt_icon.png \
+ images/qt-logo.png \
+ images/qt_ref_doc.png \
+ images/qt_tools.png \
+ images/sep.png \
+ images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
+ images/taskmenuextension-example.png \
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.Linguist.filterAttributes = qt 4.7.0 tools linguist
qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual
qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist
diff --git a/tools/qdoc3/test/qdeclarative.qdocconf b/tools/qdoc3/test/qdeclarative.qdocconf
index 03514c1..125a410 100644
--- a/tools/qdoc3/test/qdeclarative.qdocconf
+++ b/tools/qdoc3/test/qdeclarative.qdocconf
@@ -27,8 +27,45 @@ qhp.Qml.indexTitle = Qml Reference
# Files not referenced in any qdoc file
# See also extraimages.HTML
-qhp.Qml.extraFiles = classic.css \
- images/qt-logo.png
+qhp.Qml.extraFiles = images/api_examples.png \
+ images/api_lookup.png \
+ images/api_topics.png \
+ images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
+ images/bg_l.png \
+ images/bg_lr.png \
+ images/bg_r.png \
+ images/bg_ul_blank.png \
+ images/bg_ul.png \
+ images/bg_ur_blank.png \
+ images/bg_ur.png \
+ images/box_bg.png \
+ images/breadcrumb.png \
+ images/bullet_dn.png \
+ images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
+ images/feedbackground.png \
+ images/form_bg.png \
+ images/horBar.png \
+ images/page_bg.png \
+ images/print.png \
+ images/qt_guide.png \
+ images/qt_icon.png \
+ images/qt-logo.png \
+ images/qt_ref_doc.png \
+ images/qt_tools.png \
+ images/sep.png \
+ images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
+ images/taskmenuextension-example.png \
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.Qml.filterAttributes = qt 4.6.0 qtrefdoc
qhp.Qml.customFilters.Qt.name = Qt 4.6.0
diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf
index bd47028..f38a2a4 100644
--- a/tools/qdoc3/test/qmake.qdocconf
+++ b/tools/qdoc3/test/qmake.qdocconf
@@ -16,7 +16,45 @@ qhp.qmake.file = qmake.qhp
qhp.qmake.namespace = com.trolltech.qmake.470
qhp.qmake.virtualFolder = qdoc
qhp.qmake.indexTitle = QMake Manual
-qhp.qmake.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
+qhp.qmake.extraFiles = images/api_examples.png \
+ images/api_lookup.png \
+ images/api_topics.png \
+ images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
+ images/bg_l.png \
+ images/bg_lr.png \
+ images/bg_r.png \
+ images/bg_ul_blank.png \
+ images/bg_ul.png \
+ images/bg_ur_blank.png \
+ images/bg_ur.png \
+ images/box_bg.png \
+ images/breadcrumb.png \
+ images/bullet_dn.png \
+ images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
+ images/feedbackground.png \
+ images/form_bg.png \
+ images/horBar.png \
+ images/page_bg.png \
+ images/print.png \
+ images/qt_guide.png \
+ images/qt_icon.png \
+ images/qt-logo.png \
+ images/qt_ref_doc.png \
+ images/qt_tools.png \
+ images/sep.png \
+ images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
+ images/taskmenuextension-example.png \
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.qmake.filterAttributes = qt 4.7.0 tools qmake
qhp.qmake.customFilters.qmake.name = qmake Manual
qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index dbff4e2..0694748 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -22,14 +22,12 @@ qhp.Qt.indexTitle = Qt Reference Documentation
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
qhp.Qt.extraFiles = index.html \
- style/style.css \
- scripts/functions.js \
- scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
images/api_topics.png \
- images/bg_ll.png \
images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
images/bg_l.png \
images/bg_lr.png \
images/bg_r.png \
@@ -37,24 +35,33 @@ qhp.Qt.extraFiles = index.html \
images/bg_ul.png \
images/bg_ur_blank.png \
images/bg_ur.png \
+ images/box_bg.png \
images/breadcrumb.png \
images/bullet_dn.png \
images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
images/feedbackground.png \
images/form_bg.png \
images/horBar.png \
images/page_bg.png \
images/print.png \
images/qt_guide.png \
+ images/qt_icon.png \
images/qt-logo.png \
images/qt_ref_doc.png \
images/qt_tools.png \
images/sep.png \
images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
images/taskmenuextension-example.png \
- images/coloreditorfactoryimage.png \
- images/dynamiclayouts-example.png \
- images/stylesheet-coffee-plastique.png
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
+
qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
index 461c069..5a3d726 100644
--- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
@@ -30,14 +30,12 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
qhp.Qt.extraFiles = index.html \
- style/style.css \
- scripts/functions.js \
- scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
images/api_topics.png \
- images/bg_ll.png \
images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
images/bg_l.png \
images/bg_lr.png \
images/bg_r.png \
@@ -45,24 +43,32 @@ qhp.Qt.extraFiles = index.html \
images/bg_ul.png \
images/bg_ur_blank.png \
images/bg_ur.png \
+ images/box_bg.png \
images/breadcrumb.png \
images/bullet_dn.png \
images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
images/feedbackground.png \
images/form_bg.png \
images/horBar.png \
images/page_bg.png \
images/print.png \
images/qt_guide.png \
+ images/qt_icon.png \
images/qt-logo.png \
images/qt_ref_doc.png \
images/qt_tools.png \
images/sep.png \
images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
images/taskmenuextension-example.png \
- images/coloreditorfactoryimage.png \
- images/dynamiclayouts-example.png \
- images/stylesheet-coffee-plastique.png
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
language = Cpp
diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index 67a25f3..158aef3 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -2,7 +2,7 @@ HTML.stylesheets = style/style.css
HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <div id=\"nav-logo\">\n" \
" <a href=\"index.html\">Home</a></div>\n" \
- " <a href=\"#\" class=\"qtref\"><span>Qt Reference Documentation</span></a>\n" \
+ " <a href=\"index.html\" class=\"qtref\"><span>Qt Reference Documentation</span></a>\n" \
" <div id=\"nav-topright\">\n" \
" <ul>\n" \
" <li class=\"nav-topright-home\"><a href=\"http://qt.nokia.com/\">Qt HOME</a></li>\n" \
@@ -16,8 +16,8 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" </div>\n" \
" <div id=\"shortCut\">\n" \
" <ul>\n" \
- " <li class=\"shortCut-topleft-inactive\"><span><a href=\"index.html\">VERSION 4.7</a></span></li>\n" \
- " <li class=\"shortCut-topleft-active\"><a href=\"http://qt.nokia.com/doc/\">ALL QT VERSIONS" \
+ " <li class=\"shortCut-topleft-inactive\"><span><a href=\"index.html\">Qt 4.7</a></span></li>\n" \
+ " <li class=\"shortCut-topleft-active\"><a href=\"http://qt.nokia.com/doc/\">ALL Qt VERSIONS" \
" </a></li>\n" \
" </ul>\n" \
" </div>\n" \
@@ -73,9 +73,9 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <ul>\n" \
" <li><a href=\"examples.html\">All examples</a></li>\n" \
" <li><a href=\"tutorials.html\">All tutorials</a></li>\n" \
- " <li><a href=\"#\">Qt Quick examples</a></li>\n" \
- " <li><a href=\"#\">Desktop examples</a></li>\n" \
- " <li><a href=\"#\">Device examples</a></li>\n" \
+ " <li><a href=\"examples.html\">Qt Quick examples</a></li>\n" \
+ " <li><a href=\"examples.html\">Desktop examples</a></li>\n" \
+ " <li><a href=\"examples.html\">Device examples</a></li>\n" \
" </ul>\n" \
" </div>\n" \
" <div class=\"live\">\n" \
@@ -96,7 +96,7 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <li id=\"medA\" class=\"t_button active\">A</li>\n" \
" <li id=\"bigA\" class=\"t_button\">A</li>\n" \
" <li id=\"print\" class=\"t_button\"><a href=\"javascript:this.print();\">\n" \
- " <img src=\"images/sep.png\" /><img id=\"printIcon\" src=\"images/print.png\" alt=\"Print this page\" /></a></li>\n" \
+ " <img src=\"images/sep.png\" alt=\"\" /><img id=\"printIcon\" src=\"images/print.png\" alt=\"Print this page\" /></a></li>\n" \
" </ul>\n" \
" </div>\n" \
" </div>\n" \
@@ -110,7 +110,6 @@ HTML.footer = " </div>\n" \
" <div class=\"ft\">\n" \
" <span></span>\n" \
" </div>\n" \
- " </div>\n" \
" <div class=\"footer\">\n" \
" <p>\n" \
" <acronym title=\"Copyright\">&copy;</acronym> 2008-2010 Nokia Corporation and/or its\n" \
@@ -121,10 +120,10 @@ HTML.footer = " </div>\n" \
" href=\"http://qt.nokia.com/about/privacy-policy\">Privacy Policy</a></p>\n" \
" </div>\n" \
" <div id=\"feedbackBox\">\n" \
- " <form action=\"#\">\n" \
" <div id=\"feedcloseX\">\n" \
" <a href=\"#\" onclick=\"\$(\'#feedbackBox\').hide();\$(\'#blurpage\').hide()\">X</a>\n" \
" </div>\n" \
+ " <form action=\"#\">\n" \
" <textarea id=\"feedbox\" rows=\"5\" cols=\"40\">Please submit you feedback...</textarea>\n" \
" <input id=\"feedsubmit\" type=\"submit\" onclick=\"\$(\'#feedbackBox\').hide();\$(\'#blurpage\').hide()\"\n" \
" name=\"feedback\" />\n" \
@@ -132,7 +131,6 @@ HTML.footer = " </div>\n" \
" </div>\n" \
" <div id=\"blurpage\">\n" \
" </div>\n" \
- " <script src=\"scripts/functions.js\" type=\"text/javascript\"></script>\n" \
"<script type=\"text/javascript\">\n" \
" var _gaq = _gaq || [];\n" \
" _gaq.push([\'_setAccount\', \'UA-4457116-5\']);\n" \
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index cc3e436..69ab4e1 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -9,6 +9,7 @@ versionsym =
version = %VERSION%
description = Qt Reference Documentation
url = http://qt.nokia.com/doc/4.7
+online = true
sourceencoding = UTF-8
outputencoding = UTF-8
@@ -25,14 +26,12 @@ qhp.Qt.indexRoot =
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
qhp.Qt.extraFiles = index.html \
- style/style.css \
- scripts/functions.js \
- scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
images/api_topics.png \
- images/bg_ll.png \
images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
images/bg_l.png \
images/bg_lr.png \
images/bg_r.png \
@@ -40,24 +39,32 @@ qhp.Qt.extraFiles = index.html \
images/bg_ul.png \
images/bg_ur_blank.png \
images/bg_ur.png \
+ images/box_bg.png \
images/breadcrumb.png \
images/bullet_dn.png \
images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
images/feedbackground.png \
images/form_bg.png \
images/horBar.png \
images/page_bg.png \
images/print.png \
images/qt_guide.png \
+ images/qt_icon.png \
images/qt-logo.png \
images/qt_ref_doc.png \
images/qt_tools.png \
images/sep.png \
images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
images/taskmenuextension-example.png \
- images/coloreditorfactoryimage.png \
- images/dynamiclayouts-example.png \
- images/stylesheet-coffee-plastique.png
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
qhp.Qt.filterAttributes = qt 4.7.0 qtrefdoc
qhp.Qt.customFilters.Qt.name = Qt 4.7.0
diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf
index c5d2c88..a5a65d8 100644
--- a/tools/qdoc3/test/qt_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt_zh_CN.qdocconf
@@ -32,14 +32,12 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
qhp.Qt.extraFiles = index.html \
- style/style.css \
- scripts/functions.js \
- scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
images/api_topics.png \
- images/bg_ll.png \
images/bg_l_blank.png \
+ images/bg_ll_blank.png \
+ images/bg_ll.png \
images/bg_l.png \
images/bg_lr.png \
images/bg_r.png \
@@ -47,24 +45,32 @@ qhp.Qt.extraFiles = index.html \
images/bg_ul.png \
images/bg_ur_blank.png \
images/bg_ur.png \
+ images/box_bg.png \
images/breadcrumb.png \
images/bullet_dn.png \
images/bullet_gt.png \
+ images/bullet_sq.png \
+ images/bullet_up.png \
+ images/coloreditorfactoryimage.png \
+ images/content_bg.png \
+ images/dynamiclayouts-example.png \
images/feedbackground.png \
images/form_bg.png \
images/horBar.png \
images/page_bg.png \
images/print.png \
images/qt_guide.png \
+ images/qt_icon.png \
images/qt-logo.png \
images/qt_ref_doc.png \
images/qt_tools.png \
images/sep.png \
images/sprites-combined.png \
+ images/stylesheet-coffee-plastique.png \
images/taskmenuextension-example.png \
- images/coloreditorfactoryimage.png \
- images/dynamiclayouts-example.png \
- images/stylesheet-coffee-plastique.png
+ scripts/functions.js \
+ scripts/jquery.js \
+ style/style.css
language = Cpp
diff --git a/tools/qtconfig/mainwindow.cpp b/tools/qtconfig/mainwindow.cpp
index 0de4b43..9675f99 100644
--- a/tools/qtconfig/mainwindow.cpp
+++ b/tools/qtconfig/mainwindow.cpp
@@ -432,7 +432,7 @@ MainWindow::MainWindow()
#endif
#ifndef QT_NO_OPENGL
videomodeCombo->addItem(tr("OpenGL"), QLatin1String("OpenGL"));
- videomodeCombo->setItemData(videomodeCombo->findText(tr("OpenGL")), tr("Use OpenGL if avaiable"), Qt::ToolTipRole);
+ videomodeCombo->setItemData(videomodeCombo->findText(tr("OpenGL")), tr("Use OpenGL if available"), Qt::ToolTipRole);
#endif
videomodeCombo->addItem(tr("Software"), QLatin1String("Software"));
videomodeCombo->setItemData(videomodeCombo->findText(tr("Software")), tr("Use simple software rendering"), Qt::ToolTipRole);
diff --git a/tools/qtestlib/wince/cetest/main.cpp b/tools/qtestlib/wince/cetest/main.cpp
index 9fe5f02..4272a83 100644
--- a/tools/qtestlib/wince/cetest/main.cpp
+++ b/tools/qtestlib/wince/cetest/main.cpp
@@ -285,10 +285,14 @@ int main(int argc, char **argv)
}
// Check wether the project is still in debug/release mode after reading
// If .pro specifies to be one mode only, we need to accept this
- if (project.isActiveConfig("debug"))
+ if (project.isActiveConfig("debug") && !project.isActiveConfig("release")) {
TestConfiguration::testDebug = true;
- else
+ debugOutput("ActiveConfig: debug only in .pro.", 1);
+ }
+ if (!project.isActiveConfig("debug") && project.isActiveConfig("release")) {
TestConfiguration::testDebug = false;
+ debugOutput("ActiveConfig: release only in .pro.", 1);
+ }
// determine what is the real mkspec to use if the default mkspec is being used
if (Option::mkfile::qmakespec.endsWith("/default"))
diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts
index 0a0d37f..bfafc71 100644
--- a/translations/assistant_de.ts
+++ b/translations/assistant_de.ts
@@ -147,7 +147,7 @@ Grund:
<translation>Lesezeichen verwalten...</translation>
</message>
<message>
- <location line="+2"/>
+ <location line="+3"/>
<source>Add Bookmark...</source>
<translation>Lesezeichen hinzufügen ...</translation>
</message>
@@ -190,7 +190,7 @@ Grund:
<context>
<name>CentralWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+117"/>
+ <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+121"/>
<source>Add new page</source>
<translation>Neue Seite hinzufügen</translation>
</message>
@@ -488,19 +488,19 @@ Grund:
<name>MainWindow</name>
<message>
<location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/>
- <location line="+366"/>
+ <location line="+369"/>
<source>Index</source>
<translation>Index</translation>
</message>
<message>
- <location line="-360"/>
- <location line="+358"/>
+ <location line="-363"/>
+ <location line="+361"/>
<source>Contents</source>
<translation>Inhalt</translation>
</message>
<message>
- <location line="-351"/>
- <location line="+355"/>
+ <location line="-354"/>
+ <location line="+358"/>
<source>Bookmarks</source>
<translation>Lesezeichen</translation>
</message>
@@ -510,14 +510,14 @@ Grund:
<translation>Suchen</translation>
</message>
<message>
- <location line="-335"/>
- <location line="+672"/>
+ <location line="-338"/>
+ <location line="+680"/>
<location line="+284"/>
<source>Qt Assistant</source>
<translation>Qt Assistant</translation>
</message>
<message>
- <location line="-702"/>
+ <location line="-705"/>
<source>Page Set&amp;up...</source>
<translation>S&amp;eite einrichten ...</translation>
</message>
@@ -532,17 +532,17 @@ Grund:
<translation>&amp;Drucken ...</translation>
</message>
<message>
- <location line="+7"/>
+ <location line="-10"/>
<source>New &amp;Tab</source>
<translation>Neuer &amp;Reiter</translation>
</message>
<message>
- <location line="+3"/>
+ <location line="+17"/>
<source>&amp;Close Tab</source>
<translation>Reiter &amp;schließen</translation>
</message>
<message>
- <location line="+4"/>
+ <location line="+5"/>
<source>&amp;Quit</source>
<translation>&amp;Beenden</translation>
</message>
@@ -662,17 +662,17 @@ Grund:
<translation>Ctrl+Alt+Left</translation>
</message>
<message>
- <location line="+591"/>
+ <location line="+596"/>
<source>Could not register file &apos;%1&apos;: %2</source>
<translation>Die Datei &apos;%1&apos; konnte nicht registriert werden: %2</translation>
</message>
<message>
- <location line="-584"/>
+ <location line="-589"/>
<source>About...</source>
<translation>Über ...</translation>
</message>
<message>
- <location line="+16"/>
+ <location line="+21"/>
<source>Navigation Toolbar</source>
<translation>Navigationsleiste</translation>
</message>
@@ -717,12 +717,12 @@ Grund:
<translation>Suchindex wird aufgebaut</translation>
</message>
<message>
- <location line="-661"/>
+ <location line="-669"/>
<source>Looking for Qt Documentation...</source>
<translation>Suche nach Qt-Dokumentation ...</translation>
</message>
<message>
- <location line="+219"/>
+ <location line="+227"/>
<source>&amp;Window</source>
<translation>&amp;Fenster</translation>
</message>
@@ -742,12 +742,12 @@ Grund:
<translation>Zoom</translation>
</message>
<message>
- <location line="-161"/>
+ <location line="-169"/>
<source>&amp;File</source>
<translation>&amp;Datei</translation>
</message>
<message>
- <location line="+29"/>
+ <location line="+32"/>
<source>&amp;Edit</source>
<translation>&amp;Bearbeiten</translation>
</message>
diff --git a/translations/designer_de.ts b/translations/designer_de.ts
index 475a5d5..b508b7f 100644
--- a/translations/designer_de.ts
+++ b/translations/designer_de.ts
@@ -180,12 +180,12 @@
<context>
<name>BrushPropertyManager</name>
<message>
- <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+149"/>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="+159"/>
<source>Style</source>
<translation>Stil</translation>
</message>
<message>
- <location line="-97"/>
+ <location line="-107"/>
<source>No brush</source>
<translation>Kein Muster</translation>
</message>
@@ -260,7 +260,7 @@
<translation>Kreuzende Diagonalen</translation>
</message>
<message>
- <location line="+94"/>
+ <location line="+104"/>
<source>Color</source>
<translation>Farbe</translation>
</message>
@@ -741,7 +741,7 @@
<context>
<name>Designer</name>
<message>
- <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+449"/>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="+446"/>
<source>Qt Designer</source>
<translation>Qt Designer</translation>
</message>
@@ -1202,7 +1202,7 @@
<context>
<name>MainWindowBase</name>
<message>
- <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+119"/>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="+121"/>
<source>Main</source>
<extracomment>Not currently used (main tool bar)</extracomment>
<translation>Haupt-Werkzeugleiste</translation>
@@ -1579,7 +1579,7 @@ Script: %3</source>
<context>
<name>QDesignerActions</name>
<message>
- <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+178"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="+180"/>
<source>Edit Widgets</source>
<translation>Widgets bearbeiten</translation>
</message>
@@ -1604,17 +1604,17 @@ Script: %3</source>
<translation>Einstellungen...</translation>
</message>
<message>
- <location line="+298"/>
+ <location line="+321"/>
<source>Clear &amp;Menu</source>
<translation>Menü &amp;löschen</translation>
</message>
<message>
- <location line="-233"/>
+ <location line="-246"/>
<source>CTRL+SHIFT+S</source>
<translation>CTRL+SHIFT+S</translation>
</message>
<message>
- <location line="+113"/>
+ <location line="+126"/>
<source>CTRL+R</source>
<translation>CTRL+R</translation>
</message>
@@ -1668,7 +1668,7 @@ Script: %3</source>
<translation>Designer-UI-Dateien (*.%1);;Alle Dateien (*)</translation>
</message>
<message>
- <location line="-620"/>
+ <location line="-643"/>
<source>%1 already exists.
Do you want to replace it?</source>
<translation>Die Datei %1 existiert bereits.
@@ -1680,7 +1680,7 @@ Möchten Sie sie überschreiben?</translation>
<translation>Das Formular %1 wurde gespeichert...</translation>
</message>
<message>
- <location line="+371"/>
+ <location line="+394"/>
<source>&amp;Recent Forms</source>
<translation>&amp;Zuletzt bearbeitete Formulare</translation>
</message>
@@ -1764,7 +1764,7 @@ Möchten Sie einen anderen Namen eingeben oder ein neues Formular erzeugen?</tra
<translation>Vorschau &amp;schließen</translation>
</message>
<message>
- <location line="-898"/>
+ <location line="-921"/>
<source>Save &amp;Image...</source>
<translation>&amp;Vorschaubild speichern...</translation>
</message>
@@ -1779,7 +1779,7 @@ Möchten Sie einen anderen Namen eingeben oder ein neues Formular erzeugen?</tra
<translation>&amp;Zusätzliche Schriftarten...</translation>
</message>
<message>
- <location line="+651"/>
+ <location line="+674"/>
<source>The file %1 could not be opened.
Reason: %2
Would you like to retry or select a different file?</source>
@@ -1813,7 +1813,7 @@ Möchten Sie es noch einmal versuchen?</translation>
<translation>Die Datei %1 konnte nicht geschrieben werden.</translation>
</message>
<message>
- <location line="-1163"/>
+ <location line="-1186"/>
<source>&amp;New...</source>
<translation>&amp;Neu...</translation>
</message>
@@ -1844,17 +1844,17 @@ Möchten Sie es noch einmal versuchen?</translation>
</message>
<message>
<location line="+1"/>
- <location line="+901"/>
+ <location line="+924"/>
<source>&amp;Close</source>
<translation>&amp;Schließen</translation>
</message>
<message>
- <location line="-896"/>
+ <location line="-919"/>
<source>View &amp;Code...</source>
<translation>&amp;Code anzeigen...</translation>
</message>
<message>
- <location line="+424"/>
+ <location line="+447"/>
<location line="+248"/>
<source>Save Form As</source>
<translation>Formular unter einem anderen Namen speichern</translation>
@@ -1886,7 +1886,7 @@ Möchten Sie es noch einmal versuchen?</translation>
<translation>%1 wurde gedruckt.</translation>
</message>
<message>
- <location line="-1149"/>
+ <location line="-1162"/>
<source>ALT+CTRL+S</source>
<translation>ALT+CTRL+S</translation>
</message>
@@ -2085,7 +2085,7 @@ Möchten Sie es noch einmal versuchen?</translation>
<context>
<name>QDesignerPropertySheet</name>
<message>
- <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+755"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="+758"/>
<source>Dynamic Properties</source>
<translation>Dynamische Eigenschaften</translation>
</message>
@@ -2098,14 +2098,14 @@ Möchten Sie es noch einmal versuchen?</translation>
<translation>Der Layout-Typ &apos;%1&apos; wird nicht unterstützt; es wurde ein Grid-Layout erzeugt.</translation>
</message>
<message>
- <location line="+243"/>
+ <location line="+239"/>
<source>The container extension of the widget &apos;%1&apos; (%2) returned a widget not managed by Designer &apos;%3&apos; (%4) when queried for page #%5.
Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source>
<translation>Die Container-Extension des Widgets &apos;%1&apos; (%2) gab für Seite %5 ein Widget &apos;%3&apos; (%4) zurück, was nicht von Designer verwaltet wird.
Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifiziert werden.</translation>
</message>
<message>
- <location line="+599"/>
+ <location line="+545"/>
<source>Unexpected element &lt;%1&gt;</source>
<extracomment>Parsing clipboard contents</extracomment>
<translation>Ungültiges Element &lt;%1&gt;</translation>
@@ -2207,12 +2207,12 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<translation>Werkzeugleisten</translation>
</message>
<message>
- <location line="+465"/>
+ <location line="+466"/>
<source>Save Forms?</source>
<translation>Formulare speichern?</translation>
</message>
<message>
- <location line="-494"/>
+ <location line="-495"/>
<source>&amp;View</source>
<translation>&amp;Ansicht</translation>
</message>
@@ -2227,7 +2227,7 @@ Container-Seiten sollten ausschließlich im XML der domXML()-Methode spezifizier
<translation>Widgetbox</translation>
</message>
<message>
- <location line="+292"/>
+ <location line="+293"/>
<source>If you do not review your documents, all your changes will be lost.</source>
<translation>Die Änderungen gehen verloren, wenn Sie sich die Formulare nicht noch einmal ansehen.</translation>
</message>
@@ -3497,7 +3497,7 @@ Dies kann zum Beispiel eine Sprachkennung wie &quot;_de&quot; sein.</translation
<context>
<name>QtResourceView</name>
<message>
- <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+566"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="+567"/>
<source>Size: %1 x %2
%3</source>
<translation>Größe: %1 x %2
@@ -3908,6 +3908,26 @@ Möchten Sie sie überschreiben?</translation>
</message>
<message>
<location line="+6"/>
+ <source>File</source>
+ <translation>Datei</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Edit</source>
+ <translation>Bearbeiten</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Tools</source>
+ <translation>Werkzeuge</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Form</source>
+ <translation>Formular</translation>
+ </message>
+ <message>
+ <location line="+4"/>
<source>Toolbars</source>
<translation>Werkzeugleisten</translation>
</message>
@@ -4698,9 +4718,14 @@ Möchten Sie sie überschreiben?</translation>
<context>
<name>qdesigner_internal::FilterWidget</name>
<message>
- <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/>
- <source>&lt;Filter&gt;</source>
- <translation>&lt;Filter&gt;</translation>
+ <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+160"/>
+ <source>Filter</source>
+ <translation>Filter</translation>
+ </message>
+ <message>
+ <location line="+36"/>
+ <source>Clear text</source>
+ <translation>Text löschen</translation>
</message>
</context>
<context>
@@ -4827,7 +4852,7 @@ Möchten Sie sie überschreiben?</translation>
<context>
<name>qdesigner_internal::FormWindowBase</name>
<message>
- <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+393"/>
+ <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="+404"/>
<source>Delete</source>
<translation>Löschen</translation>
</message>
@@ -4997,7 +5022,7 @@ Möchten Sie sie überschreiben?</translation>
<translation>Formular&amp;einstellungen...</translation>
</message>
<message>
- <location line="+92"/>
+ <location line="+94"/>
<source>Break Layout</source>
<translation>Layout auflösen</translation>
</message>
@@ -5018,7 +5043,7 @@ Möchten Sie sie überschreiben?</translation>
<translation>Formulareinstellungen - %1</translation>
</message>
<message>
- <location line="-525"/>
+ <location line="-527"/>
<source>Removes empty columns and rows</source>
<translation>Entfernt unbesetzte Zeilen und Spalten</translation>
</message>
@@ -5975,7 +6000,7 @@ ate the goose who was loose.</source>
<context>
<name>qdesigner_internal::PropertyEditor</name>
<message>
- <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+183"/>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="+231"/>
<source>Add Dynamic Property...</source>
<translation>Dynamische Eigenschaft hinzufügen...</translation>
</message>
@@ -5995,14 +6020,14 @@ ate the goose who was loose.</source>
<translation>Detailansicht</translation>
</message>
<message>
- <location line="+597"/>
+ <location line="+598"/>
<source>Object: %1
Class: %2</source>
<translation>Objekt: %1
Klasse: %2</translation>
</message>
<message>
- <location line="-600"/>
+ <location line="-601"/>
<source>Sorting</source>
<translation>Sortiert</translation>
</message>
@@ -6012,7 +6037,7 @@ Klasse: %2</translation>
<translation>Farbige Hervorhebung</translation>
</message>
<message>
- <location line="+66"/>
+ <location line="+61"/>
<source>Configure Property Editor</source>
<translation>Anzeige der Eigenschaften konfigurieren</translation>
</message>
diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts
index 14095ba..5597458 100644
--- a/translations/linguist_de.ts
+++ b/translations/linguist_de.ts
@@ -453,7 +453,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+646"/>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+668"/>
<location line="+15"/>
<source>&amp;Save</source>
<translation>&amp;Speichern</translation>
@@ -909,7 +909,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation>
<translation>Freigeben unter ...</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2013"/>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2035"/>
<source></source>
<comment>This is the application&apos;s main window.</comment>
<translation></translation>
@@ -1023,12 +1023,12 @@ Soll die erstgenannte Datei übersprungen werden?</translation>
<message>
<location filename="../tools/linguist/linguist/mainwindow.ui"/>
<location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/>
- <location line="+1165"/>
+ <location line="+1187"/>
<source>Release</source>
<translation>Freigeben</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1164"/>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1186"/>
<source>Qt message files for released applications (*.qm)
All files (*)</source>
<translation>Qt-Nachrichtendateien (*.qm)
@@ -1095,7 +1095,7 @@ Alle Dateien (*)</translation>
<location line="+34"/>
<location line="+24"/>
<location line="+22"/>
- <location line="+516"/>
+ <location line="+538"/>
<location line="+1"/>
<location line="+274"/>
<location line="+40"/>
@@ -1104,7 +1104,7 @@ Alle Dateien (*)</translation>
<translation>Qt Linguist</translation>
</message>
<message>
- <location line="-1198"/>
+ <location line="-1220"/>
<location line="+102"/>
<source>Cannot find the string &apos;%1&apos;.</source>
<translation>Kann Zeichenkette &apos;%1&apos; nicht finden.</translation>
@@ -1233,7 +1233,7 @@ Alle Dateien (*)</translation>
<translation>Es wurden alle Übersetzungseinheiten abgearbeitet.</translation>
</message>
<message>
- <location line="+176"/>
+ <location line="+198"/>
<source>&amp;Window</source>
<translation>&amp;Fenster</translation>
</message>
@@ -1493,7 +1493,7 @@ Alle Dateien (*)</translation>
<message>
<location/>
<source>Display information about the Qt toolkit by Nokia.</source>
- <translation type="unfinished"></translation>
+ <translation>Zeigt Informationen über das Qt-Toolkit von Nokia an.</translation>
</message>
</context>
<context>
@@ -1797,7 +1797,7 @@ Zeile: %2</translation>
<translation>Kompilierte Qt-Übersetzungen</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1280"/>
+ <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1302"/>
<source>Translation files (%1);;</source>
<translation>Übersetzungsdateien (%1);;</translation>
</message>
@@ -1818,11 +1818,16 @@ Zeile: %2</translation>
<translation>Qt Linguist</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/po.cpp" line="+658"/>
+ <location filename="../tools/linguist/shared/po.cpp" line="+817"/>
<source>GNU Gettext localization files</source>
<translation>GNU-Gettext-Übersetzungsdateien</translation>
</message>
<message>
+ <location line="+7"/>
+ <source>GNU Gettext localization template files</source>
+ <translation>Vorlagen für GNU-Gettext-Übersetzungsdateien</translation>
+ </message>
+ <message>
<location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
<source>Qt translation sources (format 1.1)</source>
<translation>Qt-Übersetzungsdateien (Formatversion 1.1)</translation>
@@ -1838,7 +1843,7 @@ Zeile: %2</translation>
<translation>Qt-Übersetzungsdateien (aktuelles Format)</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/xliff.cpp" line="+827"/>
+ <location filename="../tools/linguist/shared/xliff.cpp" line="+829"/>
<source>XLIFF localization files</source>
<translation>XLIFF-Übersetzungsdateien</translation>
</message>
diff --git a/translations/qt_de.ts b/translations/qt_de.ts
index ec7e786..86d5edb 100644
--- a/translations/qt_de.ts
+++ b/translations/qt_de.ts
@@ -12,7 +12,7 @@
<context>
<name>FakeReply</name>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2200"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2217"/>
<source>Fake error !</source>
<translation>Fake error !</translation>
</message>
@@ -25,7 +25,7 @@
<context>
<name>MAC_APPLICATION_MENU</name>
<message>
- <location filename="../src/gui/kernel/qapplication.cpp" line="+2314"/>
+ <location filename="../src/gui/kernel/qapplication.cpp" line="+2316"/>
<source>Services</source>
<translation>Dienste</translation>
</message>
@@ -44,6 +44,21 @@
<source>Show All</source>
<translation>Alle anzeigen</translation>
</message>
+ <message>
+ <location line="+1"/>
+ <source>Preferences...</source>
+ <translation>Einstellungen...</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Quit %1</source>
+ <translation>%1 beenden</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>About %1</source>
+ <translation>Über %1</translation>
+ </message>
</context>
<context>
<name>Phonon::</name>
@@ -81,25 +96,32 @@
<context>
<name>Phonon::AudioOutput</name>
<message>
- <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/>
+ <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+444"/>
+ <location line="+34"/>
<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;Das Audiogerät &lt;b&gt;%1&lt;/b&gt; funktioniert nicht.&lt;br/&gt;Es wird stattdessen &lt;b&gt;%2&lt;/b&gt; verwendet.&lt;/html&gt;</translation>
</message>
<message>
- <location line="+13"/>
+ <location line="-21"/>
<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;Das Audiogerät &lt;b&gt;%1&lt;/b&gt; wurde aktiviert,&lt;br/&gt;da es gerade verfügbar und höher priorisiert ist.&lt;/html&gt;</translation>
</message>
<message>
<location line="+3"/>
+ <location line="+14"/>
<source>Revert back to device &apos;%1&apos;</source>
<translation>Zurückschalten zum Gerät &apos;%1&apos;</translation>
</message>
+ <message>
+ <location line="-3"/>
+ <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;Es wird zum Audiogerät &lt;b&gt;%1&lt;/b&gt; geschaltet, &lt;br/&gt;da es höher priorisiert ist oder spezifisch für diesen Stream konfiguriert wurde.&lt;/html&gt;</translation>
+ </message>
</context>
<context>
<name>Phonon::Gstreamer::Backend</name>
<message>
- <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/>
+ <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+188"/>
<source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
Some video features have been disabled.</source>
<translation>Achtung: Das Paket gstreamer0.10-plugins-good ist nicht installiert.
@@ -116,7 +138,7 @@ Die Audio- und Video-Unterstützung steht nicht zur Verfügung.</translation>
<context>
<name>Phonon::Gstreamer::MediaObject</name>
<message>
- <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/>
+ <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+93"/>
<source>Cannot start playback.
Check your GStreamer installation and make sure you
@@ -126,29 +148,39 @@ have libgstreamer-plugins-base installed.</source>
Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation>
</message>
<message>
- <location line="+113"/>
+ <location line="+129"/>
+ <source>Missing codec helper script assistant.</source>
+ <translation>Der Skript-Hilfsassistent des Codecs fehlt.</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Plugin codec installation failed for codec: %0</source>
+ <translation>Die Installation des Codec-Plugins schlug fehl für: %0</translation>
+ </message>
+ <message>
+ <location line="+11"/>
<source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
<translation>Es sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0</translation>
</message>
<message>
- <location line="+702"/>
- <location line="+8"/>
- <location line="+15"/>
- <location line="+26"/>
+ <location line="+730"/>
<location line="+6"/>
- <location line="+19"/>
- <location line="+339"/>
+ <location line="+13"/>
+ <location line="+24"/>
+ <location line="+6"/>
+ <location line="+18"/>
+ <location line="+434"/>
<location line="+24"/>
<source>Could not open media source.</source>
<translation>Die Medienquelle konnte nicht geöffnet werden.</translation>
</message>
<message>
- <location line="-424"/>
+ <location line="-514"/>
<source>Invalid source type.</source>
<translation>Ungültiger Typ der Medienquelle.</translation>
</message>
<message>
- <location line="+398"/>
+ <location line="+488"/>
<source>Could not locate media source.</source>
<translation>Die Medienquelle konnte nicht gefunden werden.</translation>
</message>
@@ -350,12 +382,40 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<translation>Die Lautstärke konnte nicht eingestellt werden</translation>
</message>
<message>
- <location line="+50"/>
+ <location line="+45"/>
+ <source>Loading clip failed</source>
+ <translation>Das Laden des Clips schlug fehl</translation>
+ </message>
+ <message>
+ <location line="+24"/>
<source>Playback complete</source>
<translation>Abspielen beendet</translation>
</message>
</context>
<context>
+ <name>Phonon::MMF::AbstractVideoPlayer</name>
+ <message>
+ <location filename="../src/3rdparty/phonon/mmf/abstractvideoplayer.cpp" line="+108"/>
+ <source>Pause failed</source>
+ <translation>Fehler bei Pause-Funktion</translation>
+ </message>
+ <message>
+ <location line="+16"/>
+ <source>Seek failed</source>
+ <translation>Suchoperation fehlgeschlagen</translation>
+ </message>
+ <message>
+ <location line="+54"/>
+ <source>Getting position failed</source>
+ <translation>Die Position konnte nicht bestimmt werden</translation>
+ </message>
+ <message>
+ <location line="+66"/>
+ <source>Opening clip failed</source>
+ <translation>Der Clip konnte nicht geöffnet werden</translation>
+ </message>
+</context>
+<context>
<name>Phonon::MMF::AudioEqualizer</name>
<message>
<location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/>
@@ -370,10 +430,17 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<source>Getting position failed</source>
<translation>Die Position konnte nicht bestimmt werden</translation>
</message>
+</context>
+<context>
+ <name>Phonon::MMF::DsaVideoPlayer</name>
<message>
- <location line="+36"/>
- <source>Opening clip failed</source>
- <translation>Der Clip konnte nicht geöffnet werden</translation>
+ <location filename="../src/3rdparty/phonon/mmf/videoplayer_dsa.cpp" line="+238"/>
+ <location line="+15"/>
+ <location line="+8"/>
+ <location line="+22"/>
+ <location line="+22"/>
+ <source>Video display error</source>
+ <translation>Fehler bei der Video-Anzeige</translation>
</message>
</context>
<context>
@@ -450,7 +517,7 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<context>
<name>Phonon::MMF::MediaObject</name>
<message>
- <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+270"/>
+ <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+276"/>
<source>Error opening source: type not supported</source>
<translation>Die Quelle konnte nicht geöffnet werden: Dieser Typ wird nicht unterstützt</translation>
</message>
@@ -469,38 +536,10 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
</message>
</context>
<context>
- <name>Phonon::MMF::VideoPlayer</name>
- <message>
- <location filename="../src/3rdparty/phonon/mmf/mmf_videoplayer.cpp" line="+125"/>
- <source>Pause failed</source>
- <translation>Fehler bei Pause-Funktion</translation>
- </message>
+ <name>Phonon::MMF::SurfaceVideoPlayer</name>
<message>
+ <location filename="../src/3rdparty/phonon/mmf/videoplayer_surface.cpp" line="+126"/>
<location line="+16"/>
- <source>Seek failed</source>
- <translation>Suchoperation fehlgeschlagen</translation>
- </message>
- <message>
- <location line="+54"/>
- <source>Getting position failed</source>
- <translation>Die Position konnte nicht bestimmt werden</translation>
- </message>
- <message>
- <location line="+26"/>
- <source>Opening clip failed</source>
- <translation>Der Clip konnte nicht geöffnet werden</translation>
- </message>
- <message>
- <location line="+26"/>
- <source>Buffering clip failed</source>
- <translation>Fehler beim Puffern des Clips</translation>
- </message>
- <message>
- <location line="+174"/>
- <location line="+12"/>
- <location line="+176"/>
- <location line="+15"/>
- <location line="+6"/>
<source>Video display error</source>
<translation>Fehler bei der Video-Anzeige</translation>
</message>
@@ -1236,7 +1275,7 @@ nach
<translation>Diese Socket-Operation wird nicht unterstützt</translation>
</message>
<message>
- <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+598"/>
+ <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+614"/>
<location filename="../src/network/socket/qabstractsocket.cpp" line="+203"/>
<source>Socket operation timed out</source>
<translation>Das Zeitlimit für die Operation wurde überschritten</translation>
@@ -1281,7 +1320,7 @@ nach
<context>
<name>QApplication</name>
<message>
- <location filename="../src/gui/kernel/qapplication.cpp" line="-10"/>
+ <location filename="../src/gui/kernel/qapplication.cpp" line="-13"/>
<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>
@@ -1409,7 +1448,7 @@ nach
<context>
<name>QComboBox</name>
<message>
- <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1771"/>
+ <location filename="../src/plugins/accessible/widgets/complexwidgets.cpp" line="+1772"/>
<location line="+65"/>
<source>Open</source>
<translation>Öffnen</translation>
@@ -1558,7 +1597,7 @@ nach
<context>
<name>QDeclarativeAbstractAnimation</name>
<message>
- <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+164"/>
+ <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+165"/>
<source>Cannot animate non-existent property &quot;%1&quot;</source>
<translation>Die Eigenschaft &apos;%1&quot; existiert nicht und kann daher nicht animiert werden</translation>
</message>
@@ -1571,19 +1610,19 @@ nach
<context>
<name>QDeclarativeAnchors</name>
<message>
- <location filename="../src/declarative/graphicsitems/qdeclarativeanchors.cpp" line="+176"/>
+ <location filename="../src/declarative/graphicsitems/qdeclarativeanchors.cpp" line="+181"/>
<source>Possible anchor loop detected on fill.</source>
<translation>Bei der Fülloperation wurde eine potentielle Endlosschleife der Anker festgestellt.</translation>
</message>
<message>
- <location line="+28"/>
+ <location line="+29"/>
<source>Possible anchor loop detected on centerIn.</source>
<translation>Bei der Operation &apos;centerIn&apos; wurde eine potentielle Endlosschleife der Anker festgestellt.</translation>
</message>
<message>
- <location line="+170"/>
+ <location line="+201"/>
<location line="+34"/>
- <location line="+607"/>
+ <location line="+610"/>
<location line="+37"/>
<source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
<translation>Das Ziel eines Anker muss ein Elternelement oder Element der gleichen Ebene sein.</translation>
@@ -1639,7 +1678,7 @@ nach
<context>
<name>QDeclarativeBehavior</name>
<message>
- <location filename="../src/declarative/util/qdeclarativebehavior.cpp" line="+124"/>
+ <location filename="../src/declarative/util/qdeclarativebehavior.cpp" line="+122"/>
<source>Cannot change the animation assigned to a Behavior.</source>
<translation>Die zu einem Behavior-Element gehörende Animation kann nicht geändert werden.</translation>
</message>
@@ -1647,7 +1686,15 @@ nach
<context>
<name>QDeclarativeBinding</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativebinding.cpp" line="+195"/>
+ <location filename="../src/declarative/qml/qdeclarativebinding.cpp" line="+222"/>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>Bei der für die Eigenschaft &quot;%1&quot; angegebenen Bindung wurde eine Endlosschleife festgestellt</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiledBindings</name>
+ <message>
+ <location filename="../src/declarative/qml/qdeclarativecompiledbindings.cpp" line="+305"/>
<source>Binding loop detected for property &quot;%1&quot;</source>
<translation>Bei der für die Eigenschaft &quot;%1&quot; angegebenen Bindung wurde eine Endlosschleife festgestellt</translation>
</message>
@@ -1655,16 +1702,17 @@ nach
<context>
<name>QDeclarativeCompiler</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativecompiler.cpp" line="+188"/>
- <location line="+1807"/>
+ <location filename="../src/declarative/qml/qdeclarativecompiler.cpp" line="+186"/>
+ <location line="+1654"/>
+ <location line="+187"/>
<location line="+82"/>
<location line="+75"/>
- <location line="+459"/>
+ <location line="+488"/>
<source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
<translation>Ungültige Zuweisung bei Eigenschaft: &quot;%1&quot; ist schreibgeschützt</translation>
</message>
<message>
- <location line="-2414"/>
+ <location line="-2477"/>
<source>Invalid property assignment: unknown enumeration</source>
<translation>Ungültige Zuweisung bei Eigenschaft: Ungültiger Aufzählungswert</translation>
</message>
@@ -1749,12 +1797,12 @@ nach
<translation>Ungültige Zuweisung bei Eigenschaft: Der Typ &quot;%1&quot; ist nicht unterstützt</translation>
</message>
<message>
- <location line="+259"/>
+ <location line="+269"/>
<source>Element is not creatable.</source>
<translation>Das Element kann nicht erzeugt werden.</translation>
</message>
<message>
- <location line="+548"/>
+ <location line="+603"/>
<source>Component elements may not contain properties other than id</source>
<translation>Komponenten dürfen außer id keine weiteren Eigenschaften enthalten.</translation>
</message>
@@ -1770,12 +1818,12 @@ nach
</message>
<message>
<location line="+6"/>
- <location line="+594"/>
+ <location line="+558"/>
<source>id is not unique</source>
<translation>ID-Wert nicht eindeutig</translation>
</message>
<message>
- <location line="-584"/>
+ <location line="-548"/>
<source>Invalid component body specification</source>
<translation>Inhalt der Komponente ungültig</translation>
</message>
@@ -1785,7 +1833,7 @@ nach
<translation>Es kann keine leere Komponentenangabe erzeugt werden</translation>
</message>
<message>
- <location line="+17"/>
+ <location line="+19"/>
<source>Invalid Script block. Specify either the source property or inline script</source>
<translation>Ungültiges Skript. Es muss die Eigenschaft oder ein eingebettetes Skript angegeben werden</translation>
</message>
@@ -1795,7 +1843,7 @@ nach
<translation>Ungültige Angabe für Skript</translation>
</message>
<message>
- <location line="+24"/>
+ <location line="+25"/>
<source>Properties cannot be set on Script block</source>
<translation>Für ein Skript können keine Eigenschaften angegeben werden</translation>
</message>
@@ -1805,12 +1853,7 @@ nach
<translation>Ungültiges Skript</translation>
</message>
<message>
- <location line="+144"/>
- <source>Incorrectly specified signal</source>
- <translation>Ungültige Signalspezifikation</translation>
- </message>
- <message>
- <location line="+13"/>
+ <location line="+128"/>
<source>Empty signal assignment</source>
<translation>Leere Signalzuweisung</translation>
</message>
@@ -1843,12 +1886,12 @@ nach
</message>
<message>
<location line="+2"/>
- <location line="+361"/>
+ <location line="+355"/>
<source>Cannot assign to non-existent property &quot;%1&quot;</source>
<translation>Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens &apos;%1&quot; existiert</translation>
</message>
<message>
- <location line="-330"/>
+ <location line="-324"/>
<source>Invalid use of namespace</source>
<translation>Ungültige Verwendung eines Namensraums</translation>
</message>
@@ -1863,23 +1906,18 @@ nach
<translation>Ungültige Verwendung einer Eigenschaft des Typs &apos;Id&apos;</translation>
</message>
<message>
- <location line="+13"/>
- <source>id conflicts with type name</source>
- <translation>Der Wert der Id ist ungültig, da er bereits als Typnamen vergeben ist</translation>
- </message>
- <message>
- <location line="+2"/>
- <source>id conflicts with namespace prefix</source>
- <translation>Der Wert der Id ist ungültig, da er bereits als Namensraum vergeben ist</translation>
+ <location line="-356"/>
+ <source>Incorrectly specified signal assignment</source>
+ <translation></translation>
</message>
<message>
- <location line="+84"/>
+ <location line="+445"/>
<location line="+2"/>
<source>Property has already been assigned a value</source>
<translation>Der Eigenschaft wurde bereits ein Wert zugewiesen</translation>
</message>
<message>
- <location line="+8"/>
+ <location line="+12"/>
<location line="+8"/>
<source>Invalid grouped property access</source>
<translation>Falsche Gruppierung bei Zugriff auf Eigenschaft</translation>
@@ -1895,7 +1933,7 @@ nach
<translation>Ungültige Verwendung von Eigenschaften</translation>
</message>
<message>
- <location line="+12"/>
+ <location line="+13"/>
<source>Property assignment expected</source>
<translation>Zuweisung an Eigenschaft erwartet</translation>
</message>
@@ -1945,7 +1983,7 @@ nach
<translation>&quot;%1&quot; kann nicht auf &quot;%2&quot; angewandt werden</translation>
</message>
<message>
- <location line="+96"/>
+ <location line="+117"/>
<source>Duplicate default property</source>
<translation>Mehrfaches Auftreten der Vorgabe-Eigenschaft</translation>
</message>
@@ -2000,7 +2038,7 @@ nach
<translation>Ungültiger Typ der Eigenschaft</translation>
</message>
<message>
- <location line="+151"/>
+ <location line="+159"/>
<source>Invalid empty ID</source>
<translation>Ungültiger (leerer) Id-Wert</translation>
</message>
@@ -2050,7 +2088,7 @@ nach
<context>
<name>QDeclarativeComponent</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativecomponent.cpp" line="+442"/>
+ <location filename="../src/declarative/qml/qdeclarativecomponent.cpp" line="+452"/>
<source>Invalid empty URL</source>
<translation>Ungültige (leere) URL</translation>
</message>
@@ -2058,18 +2096,13 @@ nach
<context>
<name>QDeclarativeCompositeTypeManager</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativecompositetypemanager.cpp" line="+415"/>
- <location line="+220"/>
+ <location filename="../src/declarative/qml/qdeclarativecompositetypemanager.cpp" line="+483"/>
+ <location line="+268"/>
<source>Resource %1 unavailable</source>
<translation>Auf die Ressource %1 konnte nicht zugegriffen werden</translation>
</message>
<message>
- <location line="-141"/>
- <source>Import %1 unavailable</source>
- <translation>Import %1 nicht verfügbar</translation>
- </message>
- <message>
- <location line="+30"/>
+ <location line="-119"/>
<source>Namespace %1 cannot be used as a type</source>
<translation>Der Namensraum %1 kann nicht als Typangabe verwendet werden</translation>
</message>
@@ -2079,7 +2112,7 @@ nach
<translation>%1 ist keine Typangabe</translation>
</message>
<message>
- <location line="+42"/>
+ <location line="+46"/>
<source>Type %1 unavailable</source>
<translation>Der Typ %1 ist nicht verfügbar</translation>
</message>
@@ -2142,11 +2175,48 @@ nach
<source>SQL: database version mismatch</source>
<translation>SQL: Die Version der Datenbank entspricht nicht der erwarteten Version</translation>
</message>
+ <message>
+ <location filename="../src/declarative/qml/qdeclarativeengine.cpp" line="+1515"/>
+ <source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
+ <translation>Modul &quot;%1&quot; Definition &quot;%2&quot; kann nicht gelesen werden</translation>
+ </message>
+ <message>
+ <location line="+23"/>
+ <source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
+ <translation>Das Plugin des Moduls &quot;%1&quot; konnte nicht geladen werden: %2</translation>
+ </message>
+ <message>
+ <location line="+5"/>
+ <source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
+ <translation>Modul &quot;%1&quot; Plugin &quot;%2&quot; konnte nicht gefunden werden</translation>
+ </message>
+ <message>
+ <location line="+82"/>
+ <location line="+55"/>
+ <source>module &quot;%1&quot; version %2.%3 is not installed</source>
+ <translation>Modul &quot;%1&quot; Version %2.%3 ist nicht installiert</translation>
+ </message>
+ <message>
+ <location line="-53"/>
+ <source>module &quot;%1&quot; is not installed</source>
+ <translation>Modul &quot;%1&quot; ist nicht installiert</translation>
+ </message>
+ <message>
+ <location line="+14"/>
+ <location line="+19"/>
+ <source>&quot;%1&quot;: no such directory</source>
+ <translation>Das Verzeichnis &quot;%1&quot; existiert nicht</translation>
+ </message>
+ <message>
+ <location line="-2"/>
+ <source>import &quot;%1&quot; has no qmldir and no namespace</source>
+ <translation>&quot;qmldir&quot; und Namensraum fehlt bei Import &quot;%1&quot;</translation>
+ </message>
</context>
<context>
<name>QDeclarativeFlipable</name>
<message>
- <location filename="../src/declarative/graphicsitems/qdeclarativeflipable.cpp" line="+124"/>
+ <location filename="../src/declarative/graphicsitems/qdeclarativeflipable.cpp" line="+125"/>
<source>front is a write-once property</source>
<translation>&apos;front&apos; kann nur einmal zugewiesen werden</translation>
</message>
@@ -2159,7 +2229,7 @@ nach
<context>
<name>QDeclarativeInfo</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativeinfo.cpp" line="+112"/>
+ <location filename="../src/declarative/qml/qdeclarativeinfo.cpp" line="+113"/>
<location line="+3"/>
<source>unknown location</source>
<translation>Unbekannter Ort</translation>
@@ -2168,50 +2238,51 @@ nach
<context>
<name>QDeclarativeListModel</name>
<message>
- <location filename="../src/declarative/util/qdeclarativelistmodel.cpp" line="+483"/>
+ <location filename="../src/declarative/util/qdeclarativelistmodel.cpp" line="+399"/>
<source>remove: index %1 out of range</source>
<translation>remove: Der Index %1 ist außerhalb des gültigen Bereichs</translation>
</message>
<message>
- <location line="+30"/>
+ <location line="+33"/>
<source>insert: value is not an object</source>
<translation>insert: Der Wert ist kein Objekt</translation>
</message>
<message>
- <location line="+9"/>
+ <location line="+5"/>
<source>insert: index %1 out of range</source>
<translation>insert: Der Index %1 ist außerhalb des gültigen Bereichs</translation>
</message>
<message>
- <location line="+29"/>
+ <location line="+30"/>
<source>move: out of range</source>
<translation>move: Außerhalb des gültigen Bereichs</translation>
</message>
<message>
- <location line="+49"/>
+ <location line="+40"/>
<source>append: value is not an object</source>
<translation>append: Der Wert ist kein Objekt</translation>
</message>
<message>
- <location line="+39"/>
+ <location line="+34"/>
<source>get: index %1 out of range</source>
<translation>get: Der Index %1 ist außerhalb des gültigen Bereichs</translation>
</message>
<message>
- <location line="+33"/>
+ <location line="+25"/>
<source>set: value is not an object</source>
<translation>set: Der Wert ist kein Objekt</translation>
</message>
<message>
<location line="+4"/>
- <location line="+39"/>
+ <location line="+34"/>
<source>set: index %1 out of range</source>
<translation>set: Der Index %1 ist außerhalb des gültigen Bereichs</translation>
</message>
<message>
- <location line="+38"/>
- <source>ListElement: cannot use default property</source>
- <translation>ListElement: Die Vorgabe-Eigenschaft kann nicht verwendet werden</translation>
+ <location line="+39"/>
+ <location line="+15"/>
+ <source>ListElement: cannot contain nested elements</source>
+ <translation>ListElement kann keine geschachtelten Elemente enthalten</translation>
</message>
<message>
<location line="+4"/>
@@ -2219,20 +2290,28 @@ nach
<translation>ListElement: Die &quot;id&quot;-Eigenschaft kann nicht verwendet werden</translation>
</message>
<message>
- <location line="+46"/>
+ <location line="+49"/>
<source>ListElement: cannot use script for property value</source>
<translation>ListElement: Es kann kein Skript für den Wert der Eigenschaft verwendet werden</translation>
</message>
<message>
- <location line="+25"/>
+ <location line="+29"/>
<source>ListModel: undefined property &apos;%1&apos;</source>
<translation>ListModel: Die Eigenschaft &apos;%1&apos; ist nicht definiert</translation>
</message>
</context>
<context>
+ <name>QDeclarativeLoader</name>
+ <message>
+ <location filename="../src/declarative/graphicsitems/qdeclarativeloader.cpp" line="+309"/>
+ <source>Loader does not support loading non-visual elements.</source>
+ <translation>Das Laden nicht-visueller Elemente ist nicht unterstützt.</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeParentAnimation</name>
<message>
- <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+2486"/>
+ <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+2370"/>
<source>Unable to preserve appearance under complex transform</source>
<translation>Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden</translation>
</message>
@@ -2251,7 +2330,7 @@ nach
<context>
<name>QDeclarativeParentChange</name>
<message>
- <location filename="../src/declarative/util/qdeclarativestateoperations.cpp" line="+93"/>
+ <location filename="../src/declarative/util/qdeclarativestateoperations.cpp" line="+94"/>
<source>Unable to preserve appearance under complex transform</source>
<translation>Das Erscheinungsbild kann bei einer komplexen Transformation nicht beibehalten werden</translation>
</message>
@@ -2270,7 +2349,7 @@ nach
<context>
<name>QDeclarativeParser</name>
<message>
- <location filename="../src/declarative/qml/parser/qdeclarativejslexer.cpp" line="+556"/>
+ <location filename="../src/declarative/qml/parser/qdeclarativejslexer.cpp" line="+558"/>
<source>Illegal character</source>
<translation>Ungültiges Zeichen</translation>
</message>
@@ -2315,7 +2394,7 @@ nach
<translation>Ungültiger Modifikator &apos;%0&apos; bei regulärem Ausdruck</translation>
</message>
<message>
- <location filename="../src/declarative/qml/parser/qdeclarativejsparser.cpp" line="+1781"/>
+ <location filename="../src/declarative/qml/parser/qdeclarativejsparser.cpp" line="+1828"/>
<location line="+67"/>
<source>Syntax error</source>
<translation>Syntaxfehler</translation>
@@ -2332,14 +2411,14 @@ nach
<translation>Es wird das Element &apos;%1&apos; erwartet</translation>
</message>
<message>
- <location filename="../src/declarative/qml/qdeclarativescriptparser.cpp" line="+266"/>
- <location line="+434"/>
+ <location filename="../src/declarative/qml/qdeclarativescriptparser.cpp" line="+264"/>
+ <location line="+481"/>
<location line="+59"/>
<source>Property value set multiple times</source>
<translation>Mehrfache Zuweisung eines Wertes an eine Eigenschaft</translation>
</message>
<message>
- <location line="-482"/>
+ <location line="-529"/>
<source>Expected type name</source>
<translation>Es wird ein Typname erwartet</translation>
</message>
@@ -2349,17 +2428,27 @@ nach
<translation>Ungültige Verwendung von Skript-Blöcken</translation>
</message>
<message>
- <location line="+154"/>
+ <location line="+161"/>
<source>Invalid import qualifier ID</source>
<translation>Ungültige Id-Angabe bei Import</translation>
</message>
<message>
+ <location line="+15"/>
+ <source>Script import qualifiers must be unique.</source>
+ <translation>Der für den Skript-Import angegebene Qualifizierer muss eindeutig sein.</translation>
+ </message>
+ <message>
+ <location line="+10"/>
+ <source>Script import requires a qualifier</source>
+ <translation>Der Skript-Import erfordert die Angabe eines Qualifizierers.</translation>
+ </message>
+ <message>
<location line="+11"/>
<source>Library import requires a version</source>
<translation>Der Import einer Bibliothek erfordert eine Versionsangabe</translation>
</message>
<message>
- <location line="+53"/>
+ <location line="+60"/>
<source>Expected parameter type</source>
<translation>Es wird eine Typangabe für den Parameter erwartet</translation>
</message>
@@ -2384,7 +2473,7 @@ nach
<translation>&apos;read-only&apos; wird an dieser Stelle noch nicht unterstützt</translation>
</message>
<message>
- <location line="+213"/>
+ <location line="+222"/>
<source>JavaScript declaration outside Script element</source>
<translation>Eine JavaScript-Deklaration ist außerhalb eines Skriptelementes nicht zulässig</translation>
</message>
@@ -2397,15 +2486,39 @@ nach
<context>
<name>QDeclarativePauseAnimation</name>
<message>
- <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-2103"/>
+ <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="-1972"/>
<source>Cannot set a duration of &lt; 0</source>
<translation>Es kann keine Zeitdauer &lt;0 gesetzt werden</translation>
</message>
</context>
<context>
+ <name>QDeclarativePixmapCache</name>
+ <message>
+ <location filename="../src/declarative/util/qdeclarativepixmapcache.cpp" line="+197"/>
+ <source>Error decoding: %1: %2</source>
+ <translation>Fehler beim Decodieren: %1: %2</translation>
+ </message>
+ <message>
+ <location line="+70"/>
+ <source>Failed to get image from provider: %1</source>
+ <translation>Bilddaten konnten nicht erhalten werden: %1</translation>
+ </message>
+ <message>
+ <location line="+19"/>
+ <location line="+342"/>
+ <source>Cannot open: %1</source>
+ <translation>Fehlschlag beim Öffnen: %1</translation>
+ </message>
+ <message>
+ <location line="+37"/>
+ <source>Unknown Error loading %1</source>
+ <translation>Unbekannter Fehler beim Laden von %1</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativePropertyAnimation</name>
<message>
- <location line="+1252"/>
+ <location filename="../src/declarative/util/qdeclarativeanimation.cpp" line="+1100"/>
<source>Cannot set a duration of &lt; 0</source>
<translation>Es kann keine Zeitdauer &lt;0 gesetzt werden</translation>
</message>
@@ -2413,7 +2526,12 @@ nach
<context>
<name>QDeclarativePropertyChanges</name>
<message>
- <location filename="../src/declarative/util/qdeclarativepropertychanges.cpp" line="+380"/>
+ <location filename="../src/declarative/util/qdeclarativepropertychanges.cpp" line="+231"/>
+ <source>PropertyChanges does not support creating state-specific objects.</source>
+ <translation>Die Erzeugung von Objekten, die einem Zustand zugeordnet sind, wird von PropertyChanges nicht unterstützt.</translation>
+ </message>
+ <message>
+ <location line="+151"/>
<source>Cannot assign to non-existent property &quot;%1&quot;</source>
<translation>Es kann keine Zuweisung erfolgen, da keine Eigenschaft des Namens &apos;%1&quot; existiert</translation>
</message>
@@ -2426,7 +2544,7 @@ nach
<context>
<name>QDeclarativeTextInput</name>
<message>
- <location filename="../src/declarative/graphicsitems/qdeclarativetextinput.cpp" line="+594"/>
+ <location filename="../src/declarative/graphicsitems/qdeclarativetextinput.cpp" line="+783"/>
<location line="+9"/>
<source>Could not load cursor delegate</source>
<translation>Cursor-Delegate konnte nicht geladen werden</translation>
@@ -2440,12 +2558,12 @@ nach
<context>
<name>QDeclarativeVME</name>
<message>
- <location filename="../src/declarative/qml/qdeclarativevme.cpp" line="+195"/>
+ <location filename="../src/declarative/qml/qdeclarativevme.cpp" line="+194"/>
<source>Unable to create object of type %1</source>
<translation>Es konnte kein Objekt des Typs %1 erzeugt werden</translation>
</message>
<message>
- <location line="+306"/>
+ <location line="+380"/>
<source>Cannot assign value %1 to property %2</source>
<translation>Der Wert &apos;%1&apos; kann nicht der Eigenschaft %2 zugewiesen werden</translation>
</message>
@@ -2465,7 +2583,7 @@ nach
<translation>Der Signal-Eigenschaft %1 kann kein Objekt zugewiesen werden</translation>
</message>
<message>
- <location line="+147"/>
+ <location line="+153"/>
<source>Cannot assign object to list</source>
<translation>Zuweisung eines Objekts an eine Liste nicht zulässig</translation>
</message>
@@ -2488,7 +2606,7 @@ nach
<context>
<name>QDeclarativeVisualDataModel</name>
<message>
- <location filename="../src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp" line="+1022"/>
+ <location filename="../src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp" line="+1032"/>
<source>Delegate component must be Item type.</source>
<translation>Delegate-Komponente muss vom Typ &apos;Item&apos; sein</translation>
</message>
@@ -2496,7 +2614,7 @@ nach
<context>
<name>QDeclarativeXmlListModelRole</name>
<message>
- <location filename="../src/declarative/util/qdeclarativexmllistmodel_p.h" line="+158"/>
+ <location filename="../src/declarative/util/qdeclarativexmllistmodel_p.h" line="+168"/>
<source>An XmlRole query must not start with &apos;/&apos;</source>
<translation>Eine XmlRole-Abfrage darf nicht mit &apos;/&apos; beginnen</translation>
</message>
@@ -2504,7 +2622,7 @@ nach
<context>
<name>QDeclarativeXmlRoleList</name>
<message>
- <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="+623"/>
+ <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="+638"/>
<source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
<translation>Eine XmlListModel-Abfrage muss mit &apos;/&apos; oder &quot;//&quot; beginnen</translation>
</message>
@@ -2530,12 +2648,12 @@ nach
<context>
<name>QDialog</name>
<message>
- <location filename="../src/gui/dialogs/qdialog.cpp" line="+659"/>
+ <location filename="../src/gui/dialogs/qdialog.cpp" line="+645"/>
<source>What&apos;s This?</source>
<translation>Direkthilfe</translation>
</message>
<message>
- <location line="-135"/>
+ <location line="-122"/>
<source>Done</source>
<translation>Fertig</translation>
</message>
@@ -2543,9 +2661,9 @@ nach
<context>
<name>QDialogButtonBox</name>
<message>
- <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1906"/>
+ <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1920"/>
<location line="+464"/>
- <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+648"/>
+ <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+649"/>
<source>OK</source>
<translation>OK</translation>
</message>
@@ -2757,7 +2875,7 @@ nach
<context>
<name>QFile</name>
<message>
- <location filename="../src/corelib/io/qfile.cpp" line="+698"/>
+ <location filename="../src/corelib/io/qfile.cpp" line="+703"/>
<location line="+155"/>
<source>Destination file exists</source>
<translation>Die Zieldatei existiert bereits</translation>
@@ -2797,7 +2915,7 @@ nach
<name>QFileDialog</name>
<message>
<location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/>
- <location line="+471"/>
+ <location line="+481"/>
<source>All Files (*)</source>
<translation>Alle Dateien (*)</translation>
</message>
@@ -2820,13 +2938,13 @@ nach
<translation>Details</translation>
</message>
<message>
- <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+465"/>
+ <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+467"/>
<location line="+1"/>
<source>File</source>
<translation>Datei</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-488"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-498"/>
<source>Open</source>
<translation>Öffnen</translation>
</message>
@@ -2836,7 +2954,7 @@ nach
<translation>Speichern unter</translation>
</message>
<message>
- <location line="+699"/>
+ <location line="+709"/>
<location line="+55"/>
<location line="+1532"/>
<source>&amp;Open</source>
@@ -2854,7 +2972,7 @@ nach
<translation>Zuletzt besucht</translation>
</message>
<message>
- <location line="-2530"/>
+ <location line="-2540"/>
<source>&amp;Rename</source>
<translation>&amp;Umbenennen</translation>
</message>
@@ -2869,17 +2987,17 @@ nach
<translation>&amp;Versteckte Dateien anzeigen</translation>
</message>
<message>
- <location line="+1976"/>
+ <location line="+1986"/>
<source>New Folder</source>
<translation>Neues Verzeichnis</translation>
</message>
<message>
- <location line="-2011"/>
+ <location line="-2021"/>
<source>Find Directory</source>
<translation>Verzeichnis suchen</translation>
</message>
<message>
- <location line="+706"/>
+ <location line="+716"/>
<source>Directories</source>
<translation>Verzeichnisse</translation>
</message>
@@ -2889,8 +3007,8 @@ nach
<translation>Alle Dateien (*.*)</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-665"/>
- <location line="+669"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-675"/>
+ <location line="+679"/>
<source>Directory:</source>
<translation>Verzeichnis:</translation>
</message>
@@ -2989,7 +3107,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Unbekannt</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2130"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2140"/>
<source>Show </source>
<translation>Anzeigen </translation>
</message>
@@ -3005,7 +3123,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>&amp;Neues Verzeichnis</translation>
</message>
<message>
- <location line="+677"/>
+ <location line="+687"/>
<location line="+43"/>
<source>&amp;Choose</source>
<translation>&amp;Auswählen</translation>
@@ -3016,8 +3134,8 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Löschen</translation>
</message>
<message>
- <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-713"/>
- <location line="+673"/>
+ <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-723"/>
+ <location line="+683"/>
<source>File &amp;name:</source>
<translation>Datei&amp;name:</translation>
</message>
@@ -3033,12 +3151,42 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<source>Create New Folder</source>
<translation>Neuen Ordner erstellen</translation>
</message>
+ <message>
+ <location/>
+ <source>Go back</source>
+ <translation>Zurück</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Go forward</source>
+ <translation>Vor</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Go to the parent directory</source>
+ <translation>Gehe zum übergeordneten Verzeichnis</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Create a New Folder</source>
+ <translation>Neuen Ordner erstellen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Change to list view mode</source>
+ <translation>Wechsle zu Listenansicht</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Change to detail view mode</source>
+ <translation>Wechsle zu Detailansicht</translation>
+ </message>
</context>
<context>
<name>QFileSystemModel</name>
<message>
<location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+740"/>
- <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/>
+ <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+482"/>
<source>%1 TB</source>
<translation>%1 TB</translation>
</message>
@@ -3418,14 +3566,14 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Verbindung mit %1 beendet</translation>
</message>
<message>
- <location filename="../src/network/access/qftp.cpp" line="+1377"/>
+ <location filename="../src/network/access/qftp.cpp" line="+1383"/>
<location filename="../src/qt3support/network/q3ftp.cpp" line="-243"/>
<location line="+250"/>
<source>Connection closed</source>
<translation>Verbindung beendet</translation>
</message>
<message>
- <location line="-1489"/>
+ <location line="-1495"/>
<location filename="../src/qt3support/network/q3ftp.cpp" line="-1566"/>
<source>Host %1 not found</source>
<translation>Rechner %1 konnte nicht gefunden werden</translation>
@@ -3450,7 +3598,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Unbekannter Fehler</translation>
</message>
<message>
- <location line="+891"/>
+ <location line="+897"/>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+77"/>
<source>Connecting to host failed:
%1</source>
@@ -3522,7 +3670,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
%1</translation>
</message>
<message>
- <location line="-1529"/>
+ <location line="-1535"/>
<location filename="../src/qt3support/network/q3ftp.cpp" line="-1356"/>
<source>Not connected</source>
<translation>Keine Verbindung</translation>
@@ -3912,7 +4060,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QIODevice</name>
<message>
- <location filename="../src/corelib/global/qglobal.cpp" line="+2094"/>
+ <location filename="../src/corelib/global/qglobal.cpp" line="+2099"/>
<source>Permission denied</source>
<translation>Zugriff verweigert</translation>
</message>
@@ -3932,7 +4080,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Kein freier Speicherplatz auf dem Gerät vorhanden</translation>
</message>
<message>
- <location filename="../src/corelib/io/qiodevice.cpp" line="+1564"/>
+ <location filename="../src/corelib/io/qiodevice.cpp" line="+1596"/>
<source>Unknown error</source>
<translation>Unbekannter Fehler</translation>
</message>
@@ -3940,7 +4088,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QInputContext</name>
<message>
- <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+256"/>
+ <location filename="../src/gui/inputmethod/qinputcontextfactory.cpp" line="+301"/>
<source>XIM</source>
<translation>XIM</translation>
</message>
@@ -3996,7 +4144,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Operation unmap fehlgeschlagen für &apos;%1&apos;: %2</translation>
</message>
<message>
- <location line="+361"/>
+ <location line="+375"/>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
<translation>Das Plugin &apos;%1&apos; verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation>
</message>
@@ -4011,7 +4159,8 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Unbekannter Fehler</translation>
</message>
<message>
- <location line="-402"/>
+ <location line="-540"/>
+ <location line="+138"/>
<location filename="../src/corelib/plugin/qpluginloader.cpp" line="+343"/>
<source>The shared library was not found.</source>
<translation>Die dynamische Bibliothek konnte nicht gefunden werden.</translation>
@@ -4048,7 +4197,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QLineEdit</name>
<message>
- <location filename="../src/gui/widgets/qlineedit.cpp" line="+2107"/>
+ <location filename="../src/gui/widgets/qlineedit.cpp" line="+2110"/>
<source>Select All</source>
<translation>Alles auswählen</translation>
</message>
@@ -4124,7 +4273,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<message>
<location line="+3"/>
<location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/>
- <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/>
+ <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+79"/>
<location line="+59"/>
<source>%1: Invalid name</source>
<translation>%1: Ungültiger Name</translation>
@@ -4371,7 +4520,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QMediaPlayer</name>
<message>
- <location filename="../src/multimedia/playback/qmediaplayer.cpp" line="+494"/>
+ <location filename="../src/multimedia/playback/qmediaplayer.cpp" line="+496"/>
<source>The QMediaPlayer object does not have a valid service</source>
<translation>Das QMediaPlayer-Objekt verfügt über keinen gültigen Dienst</translation>
</message>
@@ -4462,7 +4611,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Hilfe</translation>
</message>
<message>
- <location line="-1119"/>
+ <location line="-1129"/>
<source>Show Details...</source>
<translation>Details einblenden...</translation>
</message>
@@ -4735,7 +4884,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkAccessManager</name>
<message>
- <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+885"/>
+ <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+910"/>
<source>Network access is disabled.</source>
<translation>Der Zugriff auf das Netzwerk ist nicht gestattet.</translation>
</message>
@@ -4748,17 +4897,17 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Beim Herunterladen von %1 trat ein Fehler auf - Die Antwort des Servers ist: %2</translation>
</message>
<message>
- <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-801"/>
+ <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="-828"/>
<source>Protocol &quot;%1&quot; is unknown</source>
<translation>Das Protokoll &quot;%1&quot; ist unbekannt</translation>
</message>
<message>
- <location line="+177"/>
+ <location line="+192"/>
<source>Network session error.</source>
<translation>Fehler bei Netzwerkverbindung.</translation>
</message>
<message>
- <location line="+323"/>
+ <location line="+329"/>
<source>Temporary network failure.</source>
<translation>Das Netzwerk ist zur Zeit ausgefallen.</translation>
</message>
@@ -4766,7 +4915,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkReplyImpl</name>
<message>
- <location line="+110"/>
+ <location line="+111"/>
<location line="+28"/>
<source>Operation canceled</source>
<translation>Operation abgebrochen</translation>
@@ -4775,7 +4924,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkSession</name>
<message>
- <location filename="../src/network/bearer/qnetworksession.cpp" line="+441"/>
+ <location filename="../src/network/bearer/qnetworksession.cpp" line="+449"/>
<source>Invalid configuration.</source>
<translation>Ungültige Konfiguration.</translation>
</message>
@@ -4783,8 +4932,8 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QNetworkSessionPrivateImpl</name>
<message>
- <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+270"/>
- <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+215"/>
+ <location filename="../src/plugins/bearer/qnetworksession_impl.cpp" line="+272"/>
+ <location filename="../src/plugins/bearer/symbian/qnetworksession_impl.cpp" line="+227"/>
<source>Unknown session error.</source>
<translation>Unbekannter Fehler bei Netzwerkverbindung.</translation>
</message>
@@ -4813,7 +4962,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>Das Roaming wurde abgebrochen oder ist hier nicht möglich.</translation>
</message>
<message>
- <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1159"/>
+ <location filename="../src/plugins/bearer/icd/qnetworksession_impl.cpp" line="+1005"/>
<source>Roaming error</source>
<translation>Fehler beim Roaming</translation>
</message>
@@ -4905,12 +5054,12 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QODBCDriver</name>
<message>
- <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1842"/>
+ <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1888"/>
<source>Unable to connect</source>
<translation>Es kann keine Verbindung aufgebaut werden</translation>
</message>
<message>
- <location line="+234"/>
+ <location line="+269"/>
<source>Unable to disable autocommit</source>
<translation>&apos;autocommit&apos; konnte nicht deaktiviert werden</translation>
</message>
@@ -4930,7 +5079,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<translation>&apos;autocommit&apos; konnte nicht aktiviert werden</translation>
</message>
<message>
- <location line="-277"/>
+ <location line="-312"/>
<source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
<translation>Es kann keine Verbindung aufgebaut werden weil der Treiber die benötigte Funktionalität nicht vollständig unterstützt</translation>
</message>
@@ -4938,7 +5087,7 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QODBCResult</name>
<message>
- <location line="-940"/>
+ <location line="-941"/>
<location line="+351"/>
<source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
<translation>QODBCResult::reset: &apos;SQL_CURSOR_STATIC&apos; konnte nicht als Attribut des Befehls gesetzt werden. Bitte prüfen Sie die Konfiguration Ihres ODBC-Treibers</translation>
@@ -4990,10 +5139,16 @@ Möchten Sie die Datei trotzdem löschen?</translation>
<context>
<name>QObject</name>
<message>
- <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="-193"/>
+ <location filename="../src/declarative/util/qdeclarativexmllistmodel.cpp" line="-194"/>
<source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
<translation>&quot;%1&quot; ist bereits als Name einer Rolle vergeben und wird daher deaktiviert.</translation>
</message>
+ <message>
+ <location filename="../src/3rdparty/phonon/phonon/pulsesupport.cpp" line="+162"/>
+ <location line="+11"/>
+ <source>PulseAudio Sound Server</source>
+ <translation>PulseAudio Sound Server</translation>
+ </message>
</context>
<context>
<name>QPPDOptionsModel</name>
@@ -5915,7 +6070,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Zeitüberschreitung</translation>
</message>
<message>
- <location filename="../src/corelib/io/qprocess.cpp" line="+856"/>
+ <location filename="../src/corelib/io/qprocess.cpp" line="+866"/>
<location line="+52"/>
<location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/>
<location line="+50"/>
@@ -7535,7 +7690,157 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Umdrehen</translation>
</message>
<message>
- <location line="+603"/>
+ <location line="+4"/>
+ <source>Kanji</source>
+ <translation>Kanji</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Muhenkan</source>
+ <translation>Muhenkan</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Henkan</source>
+ <translation>Henkan</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Romaji</source>
+ <translation>Romaji</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hiragana</source>
+ <translation>Hiragana</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Katakana</source>
+ <translation>Katakana</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hiragana Katakana</source>
+ <translation>Hiragana Katakana</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Zenkaku</source>
+ <translation>Zenkaku</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hankaku</source>
+ <translation>Hankaku</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Zenkaku Hankaku</source>
+ <translation>Zenkaku Hankaku</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Touroku</source>
+ <translation>Touroku</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Massyo</source>
+ <translation>Massyo</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Kana Lock</source>
+ <translation>Kana Lock</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Kana Shift</source>
+ <translation>Kana Shift</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Eisu Shift</source>
+ <translation>Eisu Shift</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Eisu toggle</source>
+ <translation>Eisu toggle</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Code input</source>
+ <translation>Code-Eingabe</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Multiple Candidate</source>
+ <translation>Mehrere Vorschläge</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Previous Candidate</source>
+ <translation>Vorangegangener Vorschlag</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Hangul</source>
+ <translation>Hangul</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Start</source>
+ <translation>Hangul Anfang</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul End</source>
+ <translation>Hangul Ende</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Hanja</source>
+ <translation>Hangul Hanja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Jamo</source>
+ <translation>Hangul Jamo</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Romaja</source>
+ <translation>Hangul Romaja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Jeonja</source>
+ <translation>Hangul Jeonja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Banja</source>
+ <translation>Hangul Banja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul PreHanja</source>
+ <translation>Hangul PreHanja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul PostHanja</source>
+ <translation>Hangul PostHanja</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Hangul Special</source>
+ <translation>Hangul Special</translation>
+ </message>
+ <message>
+ <location line="+602"/>
<location line="+135"/>
<source>Ctrl</source>
<translation>Strg</translation>
@@ -7569,7 +7874,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>F%1</translation>
</message>
<message>
- <location line="-899"/>
+ <location line="-934"/>
<source>Home Page</source>
<translation>Startseite</translation>
</message>
@@ -7703,7 +8008,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+331"/>
+ <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+319"/>
<source>Exit</source>
<translation>Beenden</translation>
</message>
@@ -8039,7 +8344,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QTcpServer</name>
<message>
- <location filename="../src/network/socket/qtcpserver.cpp" line="+282"/>
+ <location filename="../src/network/socket/qtcpserver.cpp" line="+292"/>
<source>Operation on socket is not supported</source>
<translation>Diese Socket-Operation wird nicht unterstützt</translation>
</message>
@@ -8047,7 +8352,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QTextControl</name>
<message>
- <location filename="../src/gui/text/qtextcontrol.cpp" line="+2034"/>
+ <location filename="../src/gui/text/qtextcontrol.cpp" line="+2036"/>
<source>&amp;Undo</source>
<translation>&amp;Rückgängig</translation>
</message>
@@ -8105,7 +8410,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QUdpSocket</name>
<message>
- <location filename="../src/network/socket/qudpsocket.cpp" line="+179"/>
+ <location filename="../src/network/socket/qudpsocket.cpp" line="+189"/>
<source>This platform does not support IPv6</source>
<translation>Diese Plattform unterstützt kein IPv6</translation>
</message>
@@ -8205,7 +8510,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QWebFrame</name>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+753"/>
<source>Request cancelled</source>
<translation>Anfrage wurde abgebrochen</translation>
</message>
@@ -8238,7 +8543,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QWebPage</name>
<message>
- <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/>
+ <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+44"/>
<source>Submit</source>
<comment>default label for Submit buttons in forms on web pages</comment>
<translation>Senden</translation>
@@ -8490,7 +8795,13 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Von rechts nach links</translation>
</message>
<message>
- <location line="+105"/>
+ <location line="+100"/>
+ <source>Missing Plug-in</source>
+ <comment>Label text to be used when a plug-in is missing</comment>
+ <translation>Fehlendes Plugin</translation>
+ </message>
+ <message>
+ <location line="+20"/>
<source>Loading...</source>
<comment>Media controller status message when the media is loading</comment>
<translation>Lädt...</translation>
@@ -8724,7 +9035,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>%1 Sekunden</translation>
</message>
<message>
- <location line="-210"/>
+ <location line="-225"/>
<source>Inspect</source>
<comment>Inspect Element context menu item</comment>
<translation>Prüfen</translation>
@@ -8748,13 +9059,13 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Gespeicherte Suchanfragen löschen</translation>
</message>
<message>
- <location line="+75"/>
+ <location line="+90"/>
<source>Unknown</source>
<comment>Unknown filesize FTP directory listing item</comment>
<translation>Unbekannt</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+236"/>
<source>Web Inspector - %2</source>
<translation>Web Inspector - %2</translation>
</message>
@@ -8765,12 +9076,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>%1 (%2x%3 Pixel)</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/>
+ <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+456"/>
<source>Bad HTTP request</source>
<translation>Ungültige HTTP-Anforderung</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-291"/>
+ <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-306"/>
<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>Dieser Index verfügt über eine Suchfunktion. Geben Sie einen Suchbegriff ein:</translation>
@@ -8850,22 +9161,22 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
</translation>
</message>
<message>
- <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1833"/>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1959"/>
<source>JavaScript Alert - %1</source>
<translation>JavaScript-Hinweis - %1</translation>
</message>
<message>
- <location line="+16"/>
+ <location line="+17"/>
<source>JavaScript Confirm - %1</source>
<translation>JavaScript-Bestätigung - %1</translation>
</message>
<message>
- <location line="+19"/>
+ <location line="+20"/>
<source>JavaScript Prompt - %1</source>
<translation>JavaScript-Eingabeaufforderung - %1</translation>
</message>
<message>
- <location line="+25"/>
+ <location line="+26"/>
<source>JavaScript Problem - %1</source>
<translation>JavaScript-Problem - %1</translation>
</message>
@@ -8875,7 +9186,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Das Skript dieser Webseite ist fehlerhaft. Möchten Sie es anhalten?</translation>
</message>
<message>
- <location line="+381"/>
+ <location line="+374"/>
<source>Move the cursor to the next character</source>
<translation>Positionsmarke auf folgendes Zeichen setzen</translation>
</message>
@@ -9096,7 +9407,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QWidget</name>
<message>
- <location filename="../src/gui/kernel/qwidget.cpp" line="+5805"/>
+ <location filename="../src/gui/kernel/qwidget.cpp" line="+5809"/>
<source>*</source>
<translation>*</translation>
</message>
@@ -9104,7 +9415,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<context>
<name>QWizard</name>
<message>
- <location filename="../src/gui/dialogs/qwizard.cpp" line="+661"/>
+ <location filename="../src/gui/dialogs/qwizard.cpp" line="+701"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
@@ -11927,4 +12238,27 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Das Attribut &apos;%1&apos; enthält einen ungültigen qualifizierten Namen: %2.</translation>
</message>
</context>
+<context>
+ <name>Widget</name>
+ <message>
+ <location filename="../src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui"/>
+ <source>Widget</source>
+ <translation>Widget</translation>
+ </message>
+ <message>
+ <location/>
+ <source>about:blank</source>
+ <translation>about:blank</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Image from Qt to HTML</source>
+ <translation>Bild von Qt zu HTML</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Pixmap from Qt to HTML</source>
+ <translation>Pixmap von Qt zu HTML</translation>
+ </message>
+</context>
</TS>
diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts
index 40d1158..c7a8103 100644
--- a/translations/qt_help_de.ts
+++ b/translations/qt_help_de.ts
@@ -43,7 +43,7 @@
</message>
<message>
<location line="+11"/>
- <location line="+49"/>
+ <location line="+52"/>
<source>Cannot open collection file: %1</source>
<translation>Katalogdatei kann nicht geöffnet werden: %1</translation>
</message>
@@ -58,7 +58,7 @@
<translation>Die Katalogdatei &apos;%1&apos; existiert bereits.</translation>
</message>
<message>
- <location line="+148"/>
+ <location line="+151"/>
<source>Unknown filter &apos;%1&apos;!</source>
<translation>Unbekannter Filter &apos;%1&apos;.</translation>
</message>
@@ -78,12 +78,12 @@
<translation>Die Datenbank &apos;%1&apos; kann nicht zur Optimierung geöffnet werden.</translation>
</message>
<message>
- <location line="-436"/>
+ <location line="-439"/>
<source>Cannot create directory: %1</source>
<translation>Das Verzeichnis kann nicht angelegt werden: %1</translation>
</message>
<message>
- <location line="+23"/>
+ <location line="+26"/>
<source>Cannot copy collection file: %1</source>
<translation>Die Katalogdatei kann nicht kopiert werden: %1</translation>
</message>
@@ -158,7 +158,7 @@
<translation>Die Datenbank-Datei %1 kann nicht geöffnet werden.</translation>
</message>
<message>
- <location line="+11"/>
+ <location line="+14"/>
<source>Cannot register namespace %1!</source>
<translation>Der Namensraum %1 kann nicht registriert werden.</translation>
</message>
@@ -266,7 +266,7 @@
<context>
<name>QHelpProject</name>
<message>
- <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+86"/>
+ <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+88"/>
<source>Unknown token.</source>
<translation>Unbekanntes Token.</translation>
</message>
@@ -282,16 +282,16 @@
</message>
<message>
<location line="+14"/>
- <source>A virtual folder must not contain a &apos;/&apos; character!</source>
- <translation>Ein virtuelles Verzeichnis darf kein &apos;/&apos;-Zeichen enthalten.</translation>
+ <source>Virtual folder has invalid syntax.</source>
+ <translation>Ungültige Syntax bei Angabe des virtuellen Verzeichnisses.</translation>
</message>
<message>
- <location line="+6"/>
- <source>A namespace must not contain a &apos;/&apos; character!</source>
- <translation>Ein Namensraum darf kein &apos;/&apos;-Zeichen enthalten.</translation>
+ <location line="+5"/>
+ <source>Namespace has invalid syntax.</source>
+ <translation>Ungültige Syntax der Namensraum-Angabe.</translation>
</message>
<message>
- <location line="+20"/>
+ <location line="+19"/>
<source>Missing namespace in QtHelpProject.</source>
<translation>Fehlender Namensraum in QtHelpProject.</translation>
</message>
@@ -306,7 +306,7 @@
<translation>Fehlendes Attribut in Schlagwort in Zeile %1.</translation>
</message>
<message>
- <location line="+125"/>
+ <location line="+141"/>
<source>The input file %1 could not be opened!</source>
<translation>Die Eingabe-Datei %1 kann nicht geöffnet werden.</translation>
</message>