Merge remote-tracking branch 'origin/5.4.0' into 5.4

Change-Id: I89bbb2977350a03c156d531f810d08a5560ffbb3
This commit is contained in:
Simon Hausmann 2014-12-02 13:41:31 +01:00
commit 1ba68c8431
8 changed files with 182 additions and 19 deletions

144
dist/changes-5.4.0 vendored Normal file
View File

@ -0,0 +1,144 @@
Qt 5.4 introduces many new features and improvements as well as bugfixes
over the 5.3.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:
http://qt-project.org/doc/qt-5
The Qt version 5.4 series is binary compatible with the 5.3.x series.
Applications compiled for 5.3 will continue to run with 5.4.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
http://bugreports.qt-project.org/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* General *
****************************************************************************
General Improvements
--------------------
- The Declarative State Machine Framework extends Qt's State Machine
Framework (QSM) into QML. This gives you the power of deterministic
state machines, but declaratively.
- Added QML linter tool.
Third party components
----------------------
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- [QTBUG-40431] When a JavaScript object/array is passed to C++ through
a QVariant, the engine no longer immediately converts the object
recursively into a QVariantMap or QVariantList but instead stores a
QJSValue in the QVariant. This prevents a loss of data when the JS
object contains non-primitive types such as function objects for
example. Code that expects the variant type to be exactly
QVariant::Map or QVariant::List may need to be adapted. Registered
conversion functions however ensure that code that merely calls
toMap() or toList() continues to work.
- [QTBUG-39971] Qt 5.3 changed the mapping of "var" parameters in QML
declared signals to QJSValue. This was reverted to the behavior of
earlier Qt versions to use QVariant. The original issue of not being
able to pass function objects through var parameters of QML declared
signals is solved by wrapping a QJSValue inside the QVariant.
****************************************************************************
* Library *
****************************************************************************
QtQml
-----
- qmldir:
[QTBUG-41489] added the ability to declare dependencies on other
modules in a module definition qmldir file
QtQuick
-------
- Accessibility for Qt Quick is now included in the qtquick library
instead of being a separate plugin.
- QQuickWindow will compresses touch events and delivers at most one touch
event per frame.
- [QTBUG-38539] Added property MouseArea.drag.smoothed for toggling
whether the drag target is moved to the current mouse position after a
drag operation has started.
- [QTBUG-37944] Introduced QQuickRenderControl as a public API.
- [QTBUG-37589] Added QQuickWidget::grabFramebuffer() for capturing the
content into a QImage.
- tools and examples consistently use the QtProject organization name
- [QTBUG-40130] Add containsPress property to MouseArea
- Added QQuickFontMetrics, which provides a subset of QFontMetricsF's API.
- Added QQuickTextMetrics, which provides a declarative API for the
functions in QFontMetricsF which take arguments.
- Introduced OpenGLInfo attached type that provides information about the
currently used OpenGL version.
- Images exceeding GL_MAX_TEXTURE_SIZE will be downscaled to fit so they
will still show.
- [QTBUG-42096] Fixed nodes sometimes disappearing when adding many new
nodes to the tree.
- Canvas:
* Implement antialiasing on FramebufferObject based render targets
through super-sampling (SSAA) when framebuffer multisampling is not
available.
- Important Behavior Changes:
* Drag and Drop events now propagate to child items before their
parents.
* [QTBUG-40329] TextInput::displayText now includes also partial input
from an input method and thus matches with the actual displayed text.
- Item:
* Added functions QQuickItem::grabToImage() and Item::grabToImage() to
allow grabbing of items into system-memory images.
* When Item.opacity is set to a value outside the range of 0 to 1, it
will be clamped.
- ListView:
* Introduced headerPositioning and footerPositioning properties to
control whether header and footer are positioned inline, as overlays,
or so that they slide away and can be pulled back regardless of the
content position.
- QQuickItem:
* Added signals sceneGraphInitialized and sceneGraphInvalidated
- QQuickWindow:
* Added QQuickWindow::scheduleRenderJob(), a convenience alternative to
the equivalent signals for one-shot tasks.
- SceneGraph:
* There might not be an OpenGL context bound when
QQuickWindow::sceneGraphInvalidated() is emitted if an error occurs
while cleaning up the scene graph (such as EGL_CONTEXT_LOST). This is
according to the documentation, but has never occurred in practice
before.
- TextInput:
* Added passwordMaskDelay property
* [QTBUG-38934] Added TextInput::ensureVisible(int pos) method to be
able to control the scrolling position of a TextInput that has
automatic scrolling enabled.
- Window:
* Added Item.Window attached property
QtQuick.Dialogs
---------------
- [QTBUG-39365] FontDialog: support keyboard navigation
- [QTBUG-39231] FileDialog: added sidebarVisible property and button

View File

@ -637,8 +637,10 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor)
o->initSparseArray();
SparseArrayData *s = static_cast<SparseArrayData *>(o->arrayData());
SparseArrayNode *n = s->sparse()->insert(index);
if (n->value == UINT_MAX)
if (n->value == UINT_MAX) {
n->value = SparseArrayData::allocate(o, isAccessor);
s = static_cast<SparseArrayData *>(o->arrayData());
}
return reinterpret_cast<Property *>(s->arrayData() + n->value);
}

View File

@ -245,7 +245,7 @@ Managed *MemoryManager::allocData(std::size_t size)
m_d->availableItems[pos] += uint(increase);
m_d->totalItems += int(increase);
#ifdef V4_USE_VALGRIND
VALGRIND_MAKE_MEM_NOACCESS(allocation.memory, allocation.chunkSize);
VALGRIND_MAKE_MEM_NOACCESS(allocation.memory.base(), allocSize);
#endif
}

View File

@ -491,6 +491,12 @@ The following functions are also on the Qt object.
\li \c application.domain
\li This is the organization domain set on the QCoreApplication instance. This property can be written
to in order to set the organization domain.
\row
\li \c application.supportsMultipleWindows
\li This read-only property can be used to determine whether or not the
platform supports multiple windows. Some embedded platforms do not support
multiple windows, for example.
\endtable
The object also has one signal, aboutToQuit(), which is the same as \l QCoreApplication::aboutToQuit().

View File

@ -63,7 +63,8 @@ static const QLatin1Char Backslash('\\');
static const QLatin1Char Colon(':');
static const QLatin1String Slash_qmldir("/qmldir");
static const QLatin1String String_qmldir("qmldir");
static const QString dotqml_string(QLatin1String(".qml"));
static const QString dotqml_string(QStringLiteral(".qml"));
static const QString dotuidotqml_string(QStringLiteral(".ui.qml"));
static bool designerSupportRequired = false;
namespace {
@ -657,23 +658,28 @@ bool QQmlImportNamespace::Import::resolveType(QQmlTypeLoader *typeLoader,
return (*type_return != 0);
}
} else if (!isLibrary) {
QString qmlUrl = url + QString::fromRawData(type.constData(), type.length()) + dotqml_string;
QString qmlUrl;
bool exists = false;
if (QQmlFile::isBundle(qmlUrl)) {
exists = QQmlFile::bundleFileExists(qmlUrl, typeLoader->engine());
} else {
exists = !typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(qmlUrl)).isEmpty();
if (!exists) {
QString formUrl = url + QString::fromRawData(type.constData(), type.length()) + QStringLiteral(".ui.qml");
if (!typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(formUrl)).isEmpty()) {
exists = true;
qmlUrl = formUrl;
}
const QString urlsToTry[2] = {
url + QString::fromRawData(type.constData(), type.length()) + dotqml_string, // Type -> Type.qml
url + QString::fromRawData(type.constData(), type.length()) + dotuidotqml_string // Type -> Type.ui.qml
};
for (uint i = 0; i < sizeof(urlsToTry) / sizeof(urlsToTry[0]); ++i) {
const QString url = urlsToTry[i];
if (QQmlFile::isBundle(url)) {
exists = QQmlFile::bundleFileExists(url, typeLoader->engine());
} else {
exists = !typeLoader->absoluteFilePath(QQmlFile::urlToLocalFileOrQrc(url)).isEmpty();
if (!exists)
exists = QQmlMetaType::findCachedCompilationUnit(QUrl(url));
}
if (exists) {
qmlUrl = url;
break;
}
if (!exists)
exists = QQmlMetaType::findCachedCompilationUnit(QUrl(qmlUrl));
}
if (exists) {

View File

@ -3947,7 +3947,7 @@ void QQuickWindow::runJobsAfterSwap()
*
* \sa QWindow::devicePixelRatio()
*/
int QQuickWindow::effectiveDevicePixelRatio() const
qreal QQuickWindow::effectiveDevicePixelRatio() const
{
QWindow *w = QQuickRenderControl::renderWindowFor(const_cast<QQuickWindow *>(this));
return w ? w->devicePixelRatio() : devicePixelRatio();

View File

@ -142,7 +142,7 @@ public:
void scheduleRenderJob(QRunnable *job, RenderStage schedule);
int effectiveDevicePixelRatio() const;
qreal effectiveDevicePixelRatio() const;
Q_SIGNALS:
void frameSwapped();

View File

@ -1209,6 +1209,11 @@ void tst_qquickwindow::headless()
QVERIFY(window->openglContext() == 0);
}
if (QGuiApplication::platformName() == QLatin1String("windows")
&& QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES) {
QSKIP("Crashes on Windows/ANGLE, QTBUG-42967");
}
// Destroy the native windowing system buffers
window->destroy();
QVERIFY(window->handle() == 0);