summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/global/qtenvironmentvariables.cpp10
-rw-r--r--src/corelib/itemmodels/qrangemodel.h4
-rw-r--r--src/corelib/itemmodels/qrangemodel_impl.h1
-rw-r--r--src/corelib/kernel/qmetaobject.cpp2
-rw-r--r--src/corelib/kernel/qmetaobject_moc_p.h22
-rw-r--r--src/corelib/text/qchar.cpp3
-rw-r--r--src/corelib/text/qlocale.cpp39
-rw-r--r--src/corelib/text/qunicodetables.cpp1
-rw-r--r--src/corelib/time/qcalendarbackend_p.h28
-rw-r--r--src/gui/image/qimage.cpp2
-rw-r--r--src/gui/image/qimage_darwin.mm16
-rw-r--r--src/gui/kernel/qtestsupport_gui.cpp21
-rw-r--r--src/gui/text/qtextengine.cpp37
-rw-r--r--src/gui/text/qtextengine_p.h9
-rw-r--r--src/plugins/platforms/wasm/qwasminputcontext.h4
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp22
-rw-r--r--src/plugins/styles/modernwindows/qwindows11style.cpp27
-rw-r--r--src/plugins/styles/modernwindows/qwindows11style_p.h2
-rw-r--r--src/tools/windeployqt/main.cpp22
-rw-r--r--src/tools/windeployqt/qmlutils.cpp5
-rw-r--r--src/tools/windeployqt/qmlutils.h2
-rw-r--r--src/tools/windeployqt/utils.cpp4
-rw-r--r--src/tools/windeployqt/utils.h2
-rw-r--r--src/widgets/doc/snippets/dockwidgets/mainwindow.cpp16
-rw-r--r--src/widgets/doc/snippets/include/mainwindow.h104
-rw-r--r--src/widgets/doc/snippets/mainwindowsnippet.cpp10
-rw-r--r--src/widgets/doc/snippets/qlistview-dnd/main.cpp2
-rw-r--r--src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp2
-rw-r--r--src/widgets/doc/snippets/qlistview-dnd/mainwindow.h29
-rw-r--r--src/widgets/doc/snippets/qlistwidget-dnd/main.cpp2
-rw-r--r--src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp2
-rw-r--r--src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h29
-rw-r--r--src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp13
-rw-r--r--src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp13
-rw-r--r--src/widgets/doc/snippets/qtablewidget-using/main.cpp2
-rw-r--r--src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp2
-rw-r--r--src/widgets/doc/snippets/qtablewidget-using/mainwindow.h37
-rw-r--r--src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp57
-rw-r--r--src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp24
-rw-r--r--src/widgets/doc/snippets/reading-selections/main.cpp2
-rw-r--r--src/widgets/doc/snippets/reading-selections/window.cpp3
-rw-r--r--src/widgets/doc/snippets/reading-selections/window.h30
-rw-r--r--src/widgets/doc/snippets/updating-selections/main.cpp2
-rw-r--r--src/widgets/doc/snippets/updating-selections/window.cpp3
-rw-r--r--src/widgets/doc/snippets/updating-selections/window.h30
-rw-r--r--src/widgets/doc/src/model-view-programming.qdoc3
-rw-r--r--src/widgets/kernel/qtestsupport_widgets.cpp6
-rw-r--r--tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp9
-rw-r--r--tests/auto/wayland/reconnect/wl-socket.c2
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST2
-rw-r--r--util/unicode/main.cpp13
51 files changed, 330 insertions, 404 deletions
diff --git a/src/corelib/global/qtenvironmentvariables.cpp b/src/corelib/global/qtenvironmentvariables.cpp
index 4c0b4765717..7dba83607d2 100644
--- a/src/corelib/global/qtenvironmentvariables.cpp
+++ b/src/corelib/global/qtenvironmentvariables.cpp
@@ -401,26 +401,24 @@ bool qLocalTime(time_t utc, struct tm *local)
*/
QString qTzName(int dstIndex)
{
+ Q_DECL_UNINITIALIZED
char name[512];
bool ok;
size_t size = 0;
-#if defined(_UCRT) // i.e., MSVC and MinGW-UCRT
{
const auto locker = qt_scoped_lock(environmentMutex);
+#if defined(_UCRT) // i.e., MSVC and MinGW-UCRT
ok = _get_tzname(&size, name, sizeof(name), dstIndex) == 0;
size -= 1; // It includes space for '\0' (or !ok => we're going to ignore it).
Q_ASSERT(!ok || size < sizeof(name));
- }
#else
- {
- const auto locker = qt_scoped_lock(environmentMutex);
const char *const src = tzname[dstIndex];
- size = strlen(src);
+ size = src ? strlen(src) : 0;
ok = src != nullptr && size < sizeof(name);
if (ok)
memcpy(name, src, size + 1);
- }
#endif // _UCRT
+ }
return ok ? QString::fromLocal8Bit(name, qsizetype(size)) : QString();
}
diff --git a/src/corelib/itemmodels/qrangemodel.h b/src/corelib/itemmodels/qrangemodel.h
index 52038ed2541..a73f0e2c53c 100644
--- a/src/corelib/itemmodels/qrangemodel.h
+++ b/src/corelib/itemmodels/qrangemodel.h
@@ -115,10 +115,6 @@ void QRangeModelImplBase::changePersistentIndexList(const QModelIndexList &from,
{
m_rangeModel->changePersistentIndexList(from, to);
}
-QHash<int, QByteArray> QRangeModelImplBase::roleNames() const
-{
- return m_rangeModel->roleNames();
-}
void QRangeModelImplBase::dataChanged(const QModelIndex &from, const QModelIndex &to,
const QList<int> &roles)
{
diff --git a/src/corelib/itemmodels/qrangemodel_impl.h b/src/corelib/itemmodels/qrangemodel_impl.h
index 0328a27c7ca..4dfc07be37d 100644
--- a/src/corelib/itemmodels/qrangemodel_impl.h
+++ b/src/corelib/itemmodels/qrangemodel_impl.h
@@ -716,7 +716,6 @@ protected:
inline QModelIndex createIndex(int row, int column, const void *ptr = nullptr) const;
inline void changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to);
- inline QHash<int, QByteArray> roleNames() const;
inline void dataChanged(const QModelIndex &from, const QModelIndex &to,
const QList<int> &roles);
inline void beginInsertColumns(const QModelIndex &parent, int start, int count);
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index 965e1b57ce6..f19970b52d1 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -1391,7 +1391,7 @@ static const char *qNormalizeType(QByteArrayView in, int &templdepth, QByteArray
return next;
}
- result += normalizeTypeInternal(t, d);
+ normalizeTypeInternal(QByteArrayView{t, d}, result);
return d;
}
diff --git a/src/corelib/kernel/qmetaobject_moc_p.h b/src/corelib/kernel/qmetaobject_moc_p.h
index ad8c6f92d60..b0867af0cea 100644
--- a/src/corelib/kernel/qmetaobject_moc_p.h
+++ b/src/corelib/kernel/qmetaobject_moc_p.h
@@ -17,20 +17,32 @@
//
#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
#include <QtCore/private/qglobal_p.h>
QT_BEGIN_NAMESPACE
+static void normalizeTypeInternal(QByteArrayView in, QByteArray &appendTo);
+
// This function is shared with moc.cpp. This file should be included where needed.
static QByteArray normalizeTypeInternal(const char *t, const char *e)
{
+ QByteArrayView in{t, e};
+ QByteArray appendTo;
+ normalizeTypeInternal(in, appendTo);
+ return appendTo;
+}
+
+static void normalizeTypeInternal(QByteArrayView in, QByteArray &appendTo)
+{
+ const char *t = in.begin();
+ const char *e = in.end();
int len = QtPrivate::qNormalizeType(t, e, nullptr);
if (len == 0)
- return QByteArray();
- QByteArray result(len, Qt::Uninitialized);
- len = QtPrivate::qNormalizeType(t, e, result.data());
- Q_ASSERT(len == result.size());
- return result;
+ return;
+ qsizetype oldLen = appendTo.size();
+ appendTo.resize(appendTo.size() + len);
+ QtPrivate::qNormalizeType(t, e, appendTo.begin() + oldLen);
}
QT_END_NAMESPACE
diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp
index 052dba39e9c..d7006281614 100644
--- a/src/corelib/text/qchar.cpp
+++ b/src/corelib/text/qchar.cpp
@@ -830,8 +830,9 @@ bool QChar::isPrint(char32_t ucs4) noexcept
*/
bool QT_FASTCALL QChar::isSpace_helper(char32_t ucs4) noexcept
{
- if (ucs4 > LastValidCodePoint)
+ if (ucs4 > MaxSeparatorCodepoint)
return false;
+
const int test = FLAG(Separator_Space) |
FLAG(Separator_Line) |
FLAG(Separator_Paragraph);
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index f5ff0686454..dec5b6fd33e 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -3313,20 +3313,7 @@ static QString rawMonthName(const QCalendarLocale &localeData,
const char16_t *monthsData, int month,
QLocale::FormatType type)
{
- QLocaleData::DataRange range;
- switch (type) {
- case QLocale::LongFormat:
- range = localeData.longMonth();
- break;
- case QLocale::ShortFormat:
- range = localeData.shortMonth();
- break;
- case QLocale::NarrowFormat:
- range = localeData.narrowMonth();
- break;
- default:
- return QString();
- }
+ const QLocaleData::DataRange range = localeData.monthName(type);
return range.getListEntry(monthsData, month - 1);
}
@@ -3338,22 +3325,10 @@ static QString rawStandaloneMonthName(const QCalendarLocale &localeData,
const char16_t *monthsData, int month,
QLocale::FormatType type)
{
- QLocaleData::DataRange range;
- switch (type) {
- case QLocale::LongFormat:
- range = localeData.longMonthStandalone();
- break;
- case QLocale::ShortFormat:
- range = localeData.shortMonthStandalone();
- break;
- case QLocale::NarrowFormat:
- range = localeData.narrowMonthStandalone();
- break;
- default:
- return QString();
- }
- QString name = range.getListEntry(monthsData, month - 1);
- return name.isEmpty() ? rawMonthName(localeData, monthsData, month, type) : name;
+ const QLocaleData::DataRange range = localeData.standaloneMonthName(type);
+ if (QString name = range.getListEntry(monthsData, month - 1); !name.isEmpty())
+ return name;
+ return rawMonthName(localeData, monthsData, month, type);
}
/*!
@@ -4021,7 +3996,9 @@ QString QCalendarBackend::dateTimeToString(QStringView format, const QDateTime &
text = when.toOffsetFromUtc(when.offsetFromUtc()).timeZoneAbbreviation();
if (text.isEmpty()) // Notably including type != Offset
text = when.timeZoneAbbreviation();
- return type == Offset ? offsetFromAbbreviation(std::move(text)) : text;
+ if (type == Offset)
+ text = offsetFromAbbreviation(std::move(text));
+ return text;
};
used = true;
diff --git a/src/corelib/text/qunicodetables.cpp b/src/corelib/text/qunicodetables.cpp
index cf4fdb199ea..fd491532f1a 100644
--- a/src/corelib/text/qunicodetables.cpp
+++ b/src/corelib/text/qunicodetables.cpp
@@ -8,6 +8,7 @@
QT_BEGIN_NAMESPACE
namespace QUnicodeTables {
+static constexpr char32_t MaxSeparatorCodepoint = 0x3000;
static constexpr unsigned short uc_property_trie[] = {
// [0x0..0x11000)
diff --git a/src/corelib/time/qcalendarbackend_p.h b/src/corelib/time/qcalendarbackend_p.h
index 15e07957552..ba586114b89 100644
--- a/src/corelib/time/qcalendarbackend_p.h
+++ b/src/corelib/time/qcalendarbackend_p.h
@@ -34,13 +34,27 @@ class QCalendarRegistry;
struct QCalendarLocale {
quint16 m_language_id, m_script_id, m_territory_id;
-#define rangeGetter(name) \
- QLocaleData::DataRange name() const { return { m_ ## name ## _idx, m_ ## name ## _size }; }
-
- rangeGetter(longMonthStandalone) rangeGetter(longMonth)
- rangeGetter(shortMonthStandalone) rangeGetter(shortMonth)
- rangeGetter(narrowMonthStandalone) rangeGetter(narrowMonth)
-#undef rangeGetter
+#define CASE(E, member) case QLocale::FormatType::E: \
+ return { m_ ## member ## _idx, m_ ## member ## _size }
+ QLocaleData::DataRange monthName(QLocale::FormatType type) const
+ {
+ switch (type) {
+ CASE(LongFormat, longMonth);
+ CASE(ShortFormat, shortMonth);
+ CASE(NarrowFormat, narrowMonth);
+ }
+ Q_UNREACHABLE_RETURN({});
+ }
+ QLocaleData::DataRange standaloneMonthName(QLocale::FormatType type) const
+ {
+ switch (type) {
+ CASE(LongFormat, longMonthStandalone);
+ CASE(ShortFormat, shortMonthStandalone);
+ CASE(NarrowFormat, narrowMonthStandalone);
+ }
+ Q_UNREACHABLE_RETURN({});
+ }
+#undef CASE
// Month name indexes:
quint16 m_longMonthStandalone_idx, m_longMonth_idx;
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 9450668d820..6d4c93b2553 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -6168,7 +6168,7 @@ static constexpr QPixelFormat pixelformats[] = {
/*FIFTH*/ 0,
/*ALPHA*/ 4,
/*ALPHA USAGE*/ QPixelFormat::UsesAlpha,
- /*ALPHA POSITION*/ QPixelFormat::AtEnd,
+ /*ALPHA POSITION*/ QPixelFormat::AtBeginning,
/*PREMULTIPLIED*/ QPixelFormat::Premultiplied,
/*INTERPRETATION*/ QPixelFormat::UnsignedShort,
/*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian),
diff --git a/src/gui/image/qimage_darwin.mm b/src/gui/image/qimage_darwin.mm
index 049fbb3a60a..69488366b8a 100644
--- a/src/gui/image/qimage_darwin.mm
+++ b/src/gui/image/qimage_darwin.mm
@@ -6,6 +6,8 @@
#include <private/qcore_mac_p.h>
#include <private/qcoregraphics_p.h>
+#include <QtGui/qcolorspace.h>
+
#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
@@ -56,7 +58,8 @@ QT_BEGIN_NAMESPACE
convert the QImage to a supported format first, for example
Format_ARGB32_Premultiplied.
- The CGImageRef color space is set to the sRGB color space.
+ If the image does not have a color space set the resulting
+ CGImageRef color space is set to the sRGB color space.
\ingroup platform-type-conversions
*/
@@ -77,7 +80,14 @@ CGImageRef QImage::toCGImage() const
QCFType<CGDataProviderRef> dataProvider =
CGDataProviderCreateWithData(new QImage(*this), bits(), sizeInBytes(), deleter);
- QCFType<CGColorSpaceRef> colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ QCFType<CGColorSpaceRef> cgColorSpace = [&]{
+ if (colorSpace().isValid()) {
+ QCFType<CFDataRef> iccData = colorSpace().iccProfile().toCFData();
+ return CGColorSpaceCreateWithICCData(iccData);
+ } else {
+ return CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ }
+ }();
const size_t bitsPerComponent = 8;
const size_t bitsPerPixel = 32;
@@ -85,7 +95,7 @@ CGImageRef QImage::toCGImage() const
const bool shouldInterpolate = false;
return CGImageCreate(width(), height(), bitsPerComponent, bitsPerPixel,
- this->bytesPerLine(), colorSpace, bitmapInfo, dataProvider,
+ this->bytesPerLine(), cgColorSpace, bitmapInfo, dataProvider,
decode, shouldInterpolate, kCGRenderingIntentDefault);
}
diff --git a/src/gui/kernel/qtestsupport_gui.cpp b/src/gui/kernel/qtestsupport_gui.cpp
index ba247800e7b..dd50d0489b7 100644
--- a/src/gui/kernel/qtestsupport_gui.cpp
+++ b/src/gui/kernel/qtestsupport_gui.cpp
@@ -59,7 +59,12 @@ bool QTest::qWaitForWindowActive(QWindow *window, QDeadlineTimer timeout)
<< "Falling back to qWaitForWindowExposed.";
return qWaitForWindowExposed(window, timeout);
}
- return QTest::qWaitFor([&]() { return window->isActive(); }, timeout);
+ return QTest::qWaitFor([wp = QPointer(window)]() {
+ if (QWindow *w = wp.data(); !w)
+ return false;
+ else
+ return w->isActive();
+ }, timeout);
}
/*!
@@ -91,7 +96,12 @@ bool QTest::qWaitForWindowActive(QWindow *window)
*/
Q_GUI_EXPORT bool QTest::qWaitForWindowFocused(QWindow *window, QDeadlineTimer timeout)
{
- return QTest::qWaitFor([&]() { return qGuiApp->focusWindow() == window; }, timeout);
+ return QTest::qWaitFor([wp = QPointer(window)]() {
+ if (QWindow *w = wp.data(); !w)
+ return false;
+ else
+ return qGuiApp->focusWindow() == w;
+ }, timeout);
}
/*!
@@ -132,7 +142,12 @@ bool QTest::qWaitForWindowExposed(QWindow *window, int timeout)
*/
bool QTest::qWaitForWindowExposed(QWindow *window, QDeadlineTimer timeout)
{
- return QTest::qWaitFor([&]() { return window->isExposed(); }, timeout);
+ return QTest::qWaitFor([wp = QPointer(window)]() {
+ if (QWindow *w = wp.data(); !w)
+ return false;
+ else
+ return w->isExposed();
+ }, timeout);
}
/*!
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index cd9b85df20b..419e6642d17 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1368,6 +1368,9 @@ void QTextEngine::shapeText(int item) const
si.glyph_data_offset = layoutData->used;
const ushort *string = reinterpret_cast<const ushort *>(layoutData->string.constData()) + si.position;
+ const ushort *baseString = reinterpret_cast<const ushort *>(layoutData->string.constData());
+ int baseStringStart = si.position;
+ int baseStringLength = layoutData->string.length();
const int itemLength = length(item);
QString casedString;
@@ -1393,6 +1396,9 @@ void QTextEngine::shapeText(int item) const
}
}
string = reinterpret_cast<const ushort *>(casedString.constData());
+ baseString = string;
+ baseStringStart = 0;
+ baseStringLength = casedString.length();
}
if (Q_UNLIKELY(!ensureSpace(itemLength))) {
@@ -1486,14 +1492,9 @@ void QTextEngine::shapeText(int item) const
#if QT_CONFIG(harfbuzz)
if (Q_LIKELY(shapingEnabled)) {
- si.num_glyphs = shapeTextWithHarfbuzzNG(si,
- string,
- itemLength,
- fontEngine,
- itemBoundaries,
- kerningEnabled,
- letterSpacing != 0,
- features);
+ si.num_glyphs = shapeTextWithHarfbuzzNG(si, baseString, baseStringStart, baseStringLength,
+ itemLength, fontEngine, itemBoundaries,
+ kerningEnabled, letterSpacing != 0, features);
} else
#endif
{
@@ -1603,13 +1604,10 @@ QT_BEGIN_INCLUDE_NAMESPACE
QT_END_INCLUDE_NAMESPACE
-int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
- const ushort *string,
- int itemLength,
- QFontEngine *fontEngine,
- QSpan<uint> itemBoundaries,
- bool kerningEnabled,
- bool hasLetterSpacing,
+int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si, const ushort *string,
+ int stringBaseIndex, int stringLength, int itemLength,
+ QFontEngine *fontEngine, QSpan<uint> itemBoundaries,
+ bool kerningEnabled, bool hasLetterSpacing,
const QHash<QFont::Tag, quint32> &fontFeatures) const
{
uint glyphs_shaped = 0;
@@ -1642,7 +1640,12 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
// prepare buffer
hb_buffer_clear_contents(buffer);
- hb_buffer_add_utf16(buffer, reinterpret_cast<const uint16_t *>(string) + item_pos, item_length, 0, item_length);
+
+ // Populate the buffer using the base string pointer and length, so HarfBuzz can grab an
+ // enclosing context for proper shaping at item boundaries in certain languages (e.g.
+ // Arabic).
+ hb_buffer_add_utf16(buffer, reinterpret_cast<const uint16_t *>(string), stringLength,
+ stringBaseIndex + item_pos, item_length);
hb_buffer_set_segment_properties(buffer, &props);
@@ -1746,7 +1749,7 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
last_glyph_pos = i + glyphs_shaped;
last_cluster = cluster;
- applyVisibilityRules(string[item_pos + str_pos], &g, i, actualFontEngine);
+ applyVisibilityRules(string[stringBaseIndex + item_pos + str_pos], &g, i, actualFontEngine);
}
}
while (str_pos < item_length)
diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h
index 872426dfc08..dffbc129b3a 100644
--- a/src/gui/text/qtextengine_p.h
+++ b/src/gui/text/qtextengine_p.h
@@ -620,12 +620,9 @@ private:
void addRequiredBoundaries() const;
void shapeText(int item) const;
#if QT_CONFIG(harfbuzz)
- int shapeTextWithHarfbuzzNG(const QScriptItem &si,
- const ushort *string,
- int itemLength,
- QFontEngine *fontEngine,
- QSpan<uint> itemBoundaries,
- bool kerningEnabled,
+ int shapeTextWithHarfbuzzNG(const QScriptItem &si, const ushort *string, int stringBaseIndex,
+ int stringLength, int itemLength, QFontEngine *fontEngine,
+ QSpan<uint> itemBoundaries, bool kerningEnabled,
bool hasLetterSpacing,
const QHash<QFont::Tag, quint32> &features) const;
#endif
diff --git a/src/plugins/platforms/wasm/qwasminputcontext.h b/src/plugins/platforms/wasm/qwasminputcontext.h
index 6d24c7fea0d..43d688e8037 100644
--- a/src/plugins/platforms/wasm/qwasminputcontext.h
+++ b/src/plugins/platforms/wasm/qwasminputcontext.h
@@ -48,10 +48,6 @@ public:
void updateGeometry();
- bool isActive() const {
- return m_focusObject && m_inputMethodAccepted;
- }
-
private:
void updateInputElement();
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp
index d27385be723..853e7771de9 100644
--- a/src/plugins/platforms/wasm/qwasmwindow.cpp
+++ b/src/plugins/platforms/wasm/qwasmwindow.cpp
@@ -645,7 +645,7 @@ void QWasmWindow::handleKeyEvent(const KeyEvent &event)
{
qCDebug(qLcQpaWasmInputContext) << "handleKeyEvent";
- if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); inputContext->isActive()) {
+ if ((event.webEvent["target"] == m_inputElement) && QWasmIntegration::get()->wasmInputContext()) {
handleKeyForInputContextEvent(event);
} else {
if (processKey(event)) {
@@ -758,26 +758,38 @@ bool QWasmWindow::processKeyForInputContext(const KeyEvent &event)
void QWasmWindow::handleInputEvent(emscripten::val event)
{
- if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); inputContext->isActive())
+ if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); event["target"] == m_inputElement)
inputContext->inputCallback(event);
+
+ if (event["target"] == m_focusHelper)
+ m_focusHelper.set("innerHTML", std::string());
}
void QWasmWindow::handleCompositionStartEvent(emscripten::val event)
{
- if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); inputContext->isActive())
+ if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); event["target"] == m_inputElement)
inputContext->compositionStartCallback(event);
+
+ if (event["target"] == m_focusHelper)
+ m_focusHelper.set("innerHTML", std::string());
}
void QWasmWindow::handleCompositionUpdateEvent(emscripten::val event)
{
- if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); inputContext->isActive())
+ if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); event["target"] == m_inputElement)
inputContext->compositionUpdateCallback(event);
+
+ if (event["target"] == m_focusHelper)
+ m_focusHelper.set("innerHTML", std::string());
}
void QWasmWindow::handleCompositionEndEvent(emscripten::val event)
{
- if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); inputContext->isActive())
+ if (QWasmInputContext *inputContext = QWasmIntegration::get()->wasmInputContext(); event["target"] == m_inputElement)
inputContext->compositionEndCallback(event);
+
+ if (event["target"] == m_focusHelper)
+ m_focusHelper.set("innerHTML", std::string());
}
void QWasmWindow::handlePointerEnterLeaveEvent(const PointerEvent &event)
diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp
index de94f11937b..3c28113b2cc 100644
--- a/src/plugins/styles/modernwindows/qwindows11style.cpp
+++ b/src/plugins/styles/modernwindows/qwindows11style.cpp
@@ -848,17 +848,6 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
painter->drawRoundedRect(rect,
secondLevelRoundingRadius, secondLevelRoundingRadius);
- if (!option->palette.isBrushSet(QPalette::Current, QPalette::Button)) {
- painter->setPen(Qt::NoPen);
- if (!isRaised)
- painter->setBrush(WINUI3Colors[colorSchemeIndex][controlFillTertiary]);
- else if (isMouseOver)
- painter->setBrush(WINUI3Colors[colorSchemeIndex][controlFillSecondary]);
- else
- painter->setBrush(option->palette.button());
- painter->drawRoundedRect(rect, secondLevelRoundingRadius,
- secondLevelRoundingRadius);
- }
if (isRaised) {
const qreal sublineOffset = secondLevelRoundingRadius - 0.5;
painter->setPen(WINUI3Colors[colorSchemeIndex][controlStrokeSecondary]);
@@ -1122,7 +1111,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
rect.translate(shiftX, shiftY);
painter->setFont(toolbutton->font);
const QString text = d->toolButtonElideText(toolbutton, rect, alignment);
- painter->setPen(buttonLabelColor(option, colorSchemeIndex));
+ painter->setPen(buttonLabelColor(option));
proxy()->drawItemText(painter, rect, alignment, toolbutton->palette,
toolbutton->state & State_Enabled, text);
} else {
@@ -1173,7 +1162,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
}
tr.translate(shiftX, shiftY);
const QString text = d->toolButtonElideText(toolbutton, tr, alignment);
- painter->setPen(buttonLabelColor(option, colorSchemeIndex));
+ painter->setPen(buttonLabelColor(option));
proxy()->drawItemText(painter, QStyle::visualRect(toolbutton->direction, rect, tr), alignment, toolbutton->palette,
toolbutton->state & State_Enabled, text);
} else {
@@ -1381,7 +1370,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
tf |= Qt::AlignHCenter;
}
- painter->setPen(buttonLabelColor(option, colorSchemeIndex));
+ painter->setPen(buttonLabelColor(option));
proxy()->drawItemText(painter, textRect, tf, option->palette,btn->state & State_Enabled, btn->text);
}
break;
@@ -2332,19 +2321,19 @@ QBrush QWindows11Style::buttonFillBrush(const QStyleOption *option)
return brush;
}
-QColor QWindows11Style::buttonLabelColor(const QStyleOption *option, int colorSchemeIndex)
+QColor QWindows11Style::buttonLabelColor(const QStyleOption *option) const
{
if (option->palette.isBrushSet(QPalette::Current, QPalette::ButtonText))
return option->palette.buttonText().color();
const bool isOn = option->state & QStyle::State_On;
if (option->state & QStyle::State_Sunken)
- return isOn ? WINUI3Colors[colorSchemeIndex][textOnAccentSecondary]
- : WINUI3Colors[colorSchemeIndex][controlTextSecondary];
+ return isOn ? winUI3Color(textOnAccentSecondary)
+ : winUI3Color(controlTextSecondary);
if (!(option->state & QStyle::State_Enabled))
- return isOn ? WINUI3Colors[colorSchemeIndex][textAccentDisabled]
+ return isOn ? winUI3Color(textAccentDisabled)
: option->palette.buttonText().color();
- return isOn ? WINUI3Colors[colorSchemeIndex][textOnAccentPrimary]
+ return isOn ? winUI3Color(textOnAccentPrimary)
: option->palette.buttonText().color();
}
diff --git a/src/plugins/styles/modernwindows/qwindows11style_p.h b/src/plugins/styles/modernwindows/qwindows11style_p.h
index eccedc5bf67..45822a2591c 100644
--- a/src/plugins/styles/modernwindows/qwindows11style_p.h
+++ b/src/plugins/styles/modernwindows/qwindows11style_p.h
@@ -74,7 +74,7 @@ protected:
private:
static inline QBrush buttonFillBrush(const QStyleOption *option);
- static inline QColor buttonLabelColor(const QStyleOption *option, int colorSchemeIndex);
+ QColor buttonLabelColor(const QStyleOption *option) const;
void drawLineEditFrame(QPainter *p, const QRectF &rect, const QStyleOption *o, bool isEditable = true) const;
inline QColor winUI3Color(enum WINUI3Color col) const;
diff --git a/src/tools/windeployqt/main.cpp b/src/tools/windeployqt/main.cpp
index 4c132e2794f..941a3d9b441 100644
--- a/src/tools/windeployqt/main.cpp
+++ b/src/tools/windeployqt/main.cpp
@@ -196,6 +196,7 @@ struct Options {
unsigned updateFileFlags = 0;
QStringList qmlDirectories; // Project's QML files.
QStringList qmlImportPaths; // Custom QML module locations.
+ int qmlImportTimeout = 30000;
QString directory;
QString qtpathsBinary;
QString translationsDirectory; // Translations target directory
@@ -444,6 +445,12 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse
QStringLiteral("directory"));
parser->addOption(qmlImportOption);
+ QCommandLineOption qmlImportTimeoutOption(QStringLiteral("qmlimporttimeout"),
+ QStringLiteral("Set timeout (in ms for) execution of "
+ "qmlimportscanner."),
+ QStringLiteral("timeout"));
+ parser->addOption(qmlImportTimeoutOption);
+
QCommandLineOption noQuickImportOption(QStringLiteral("no-quick-import"),
QStringLiteral("Skip deployment of Qt Quick imports."));
parser->addOption(noQuickImportOption);
@@ -708,6 +715,18 @@ static inline int parseArguments(const QStringList &arguments, QCommandLineParse
if (parser->isSet(qmlImportOption))
options->qmlImportPaths = parser->values(qmlImportOption);
+ if (parser->isSet(qmlImportTimeoutOption)) {
+ const QString timeoutString = parser->value(qmlImportTimeoutOption);
+ bool ok;
+ int timeout = timeoutString.toInt(&ok);
+ if (!ok) {
+ *errorMessage = u'"' + timeoutString + QStringLiteral("\" is not an acceptable timeout "
+ "value.");
+ return CommandLineParseError;
+ }
+ options->qmlImportTimeout = timeout;
+ }
+
const QString &file = posArgs.front();
const QFileInfo fi(QDir::cleanPath(file));
if (!fi.exists()) {
@@ -1589,7 +1608,8 @@ static DeployResult deploy(const Options &options, const QMap<QString, QString>
const QmlImportScanResult scanResult =
runQmlImportScanner(qmlDirectory, qmlImportPaths,
result.directlyUsedQtLibraries.test(QtWidgetsModuleId),
- options.platform, debugMatchMode, errorMessage);
+ options.platform, debugMatchMode, errorMessage,
+ options.qmlImportTimeout);
if (!scanResult.ok)
return result;
qmlScanResult.append(scanResult);
diff --git a/src/tools/windeployqt/qmlutils.cpp b/src/tools/windeployqt/qmlutils.cpp
index a7e63e74705..0f7c13653a7 100644
--- a/src/tools/windeployqt/qmlutils.cpp
+++ b/src/tools/windeployqt/qmlutils.cpp
@@ -75,7 +75,7 @@ static void findFileRecursion(const QDir &directory, Platform platform,
QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringList &qmlImportPaths,
bool usesWidgets, int platform, DebugMatchMode debugMatchMode,
- QString *errorMessage)
+ QString *errorMessage, int timeout)
{
Q_UNUSED(usesWidgets);
QmlImportScanResult result;
@@ -87,7 +87,8 @@ QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringL
QByteArray stdOut;
QByteArray stdErr;
const QString binary = QStringLiteral("qmlimportscanner");
- if (!runProcess(binary, arguments, QDir::currentPath(), &exitCode, &stdOut, &stdErr, errorMessage))
+ if (!runProcess(binary, arguments, QDir::currentPath(), &exitCode, &stdOut, &stdErr,
+ errorMessage, timeout))
return result;
if (exitCode) {
*errorMessage = binary + QStringLiteral(" returned ") + QString::number(exitCode)
diff --git a/src/tools/windeployqt/qmlutils.h b/src/tools/windeployqt/qmlutils.h
index bff1fb3a9bf..81a31fbe9c3 100644
--- a/src/tools/windeployqt/qmlutils.h
+++ b/src/tools/windeployqt/qmlutils.h
@@ -33,7 +33,7 @@ bool operator==(const QmlImportScanResult::Module &m1, const QmlImportScanResult
QmlImportScanResult runQmlImportScanner(const QString &directory, const QStringList &qmlImportPaths,
bool usesWidgets, int platform, DebugMatchMode debugMatchMode,
- QString *errorMessage);
+ QString *errorMessage, int timeout = 30000);
QT_END_NAMESPACE
diff --git a/src/tools/windeployqt/utils.cpp b/src/tools/windeployqt/utils.cpp
index d7daa855cc2..227acca53b0 100644
--- a/src/tools/windeployqt/utils.cpp
+++ b/src/tools/windeployqt/utils.cpp
@@ -137,7 +137,7 @@ static inline void appendToCommandLine(const QString &argument, QString *command
bool runProcess(const QString &binary, const QStringList &args,
const QString &workingDirectory,
unsigned long *exitCode, QByteArray *stdOut, QByteArray *stdErr,
- QString *errorMessage)
+ QString *errorMessage, int timeout)
{
if (exitCode)
*exitCode = 0;
@@ -157,7 +157,7 @@ bool runProcess(const QString &binary, const QStringList &args,
}
process.start();
- if (!process.waitForStarted() || !process.waitForFinished()) {
+ if (!process.waitForStarted() || !process.waitForFinished(timeout)) {
if (errorMessage)
*errorMessage = process.errorString();
return false;
diff --git a/src/tools/windeployqt/utils.h b/src/tools/windeployqt/utils.h
index b3957e5aa77..e32b402e880 100644
--- a/src/tools/windeployqt/utils.h
+++ b/src/tools/windeployqt/utils.h
@@ -170,7 +170,7 @@ bool updateFile(const QString &sourceFileName, const QStringList &nameFilters,
bool runProcess(const QString &binary, const QStringList &args,
const QString &workingDirectory = QString(),
unsigned long *exitCode = 0, QByteArray *stdOut = 0, QByteArray *stdErr = 0,
- QString *errorMessage = 0);
+ QString *errorMessage = 0, int timeout = 30000);
bool readPeExecutableInfo(const QString &peExecutableFileName, QString *errorMessage,
PeHeaderInfoStruct *headerInfo);
diff --git a/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp b/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
index 5126d3266a1..e9c94232b62 100644
--- a/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
+++ b/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp
@@ -3,21 +3,7 @@
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow(QWidget *parent = nullptr);
- void setupContents();
- void setupDockWindow();
- void setupMenus();
- void updateText(QListWidgetItem *item);
-
-private:
- QTextBrowser *textBrowser;
- QListWidget *headingList;
- QDockWidget *contentsWindow;
-};
+#include "../include/mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
diff --git a/src/widgets/doc/snippets/include/mainwindow.h b/src/widgets/doc/snippets/include/mainwindow.h
new file mode 100644
index 00000000000..1e9c54a3cf7
--- /dev/null
+++ b/src/widgets/doc/snippets/include/mainwindow.h
@@ -0,0 +1,104 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+
+class QWidget;
+class QAction;
+
+class QTableWidget;
+class QListWidget;
+class QTreeWidget;
+class QDockWidget;
+
+class QTableView;
+class QListView;
+
+class QTextBrowser;
+
+class QListWidgetItem;
+class QTreeWidgetItem;
+
+class QAbstractItemModel;
+class QItemSelectionModel;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+ MainWindow(QWidget *parent = nullptr);
+
+ void setupContents();
+ void setupDockWindow();
+ void setupMenus();
+ void setupTableItems();
+ void setupTreeItems();
+
+ void updateText(QListWidgetItem *item);
+ void updateMenus(QTreeWidgetItem *current);
+ void updateSortItems();
+ void updateSelection(const QItemSelection &selected,
+ const QItemSelection &deselected);
+
+ void createMenus();
+ void createToolBars();
+ void createDockWidgets();
+
+ void sortAscending();
+ void sortDescending();
+
+ void insertItem();
+ void removeItem();
+
+ void changeWidth();
+ void changeHeight();
+ void changeCurrent(const QModelIndex &current,
+ const QModelIndex &previous);
+
+ void findItems();
+ void averageItems();
+ void sumItems();
+
+private:
+ void setupListItems();
+
+ void fillSelection();
+ void clearSelection();
+ void selectAll();
+
+ QTextBrowser *textBrowser;
+ QListWidget *headingList;
+ QDockWidget *contentsWindow;
+
+ QAction *insertAction;
+ QAction *removeAction;
+ QAction *ascendingAction;
+ QAction *descendingAction;
+ QAction *autoSortAction;
+ QAction *findItemsAction;
+
+ //! [0]
+ QTableWidget *tableWidget;
+ //! [0]
+
+ QTreeWidget *treeWidget;
+ QListWidget *listWidget;
+
+ QAbstractItemModel *model;
+ QItemSelectionModel *selectionModel;
+
+ QTableView *table;
+ QListView *listView;
+
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/widgets/doc/snippets/mainwindowsnippet.cpp b/src/widgets/doc/snippets/mainwindowsnippet.cpp
index 86364d2f500..b96f818b594 100644
--- a/src/widgets/doc/snippets/mainwindowsnippet.cpp
+++ b/src/widgets/doc/snippets/mainwindowsnippet.cpp
@@ -4,15 +4,7 @@
#include <QtGui>
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow();
- void createMenus();
- void createToolBars();
- void createDockWidgets();
-};
+#include "include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/qlistview-dnd/main.cpp b/src/widgets/doc/snippets/qlistview-dnd/main.cpp
index 07d6ff9b101..435707b095b 100644
--- a/src/widgets/doc/snippets/qlistview-dnd/main.cpp
+++ b/src/widgets/doc/snippets/qlistview-dnd/main.cpp
@@ -3,7 +3,7 @@
#include <QtWidgets>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
int main(int argc, char *argv[])
{
diff --git a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp
index c62c704d516..33d3970b69f 100644
--- a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp
@@ -3,7 +3,7 @@
#include <QtWidgets>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
#include "model.h"
MainWindow::MainWindow()
diff --git a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h
deleted file mode 100644
index 8d145108448..00000000000
--- a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QMainWindow>
-
-QT_BEGIN_NAMESPACE
-
-
-class QListView;
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- MainWindow();
-
-private:
- void setupListItems();
-
- QListView *listView;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp b/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp
index a266be0fb9c..ca5cb942bc9 100644
--- a/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp
+++ b/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp
@@ -3,7 +3,7 @@
#include <QtGui>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
int main(int argc, char *argv[])
{
diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp
index 3ddbeeec4c2..e875f688aae 100644
--- a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp
@@ -3,7 +3,7 @@
#include <QtWidgets>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h
deleted file mode 100644
index 8ceac2d7350..00000000000
--- a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QMainWindow>
-
-QT_BEGIN_NAMESPACE
-
-class QListWidget;
-class QListWidgetItem;
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- MainWindow();
-
-private:
- void setupListItems();
-
- QListWidget *listWidget;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp
index 34e10eb0e1d..2f743b687a6 100644
--- a/src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp
@@ -3,18 +3,7 @@
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow(QWidget *parent = nullptr);
- void setupListItems();
- void sortAscending();
- void sortDescending();
- void insertItem();
- void removeItem();
- void updateMenus(QListWidgetItem *current);
-};
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp b/src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp
index 87e9945e135..90b0ceb43c5 100644
--- a/src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp
@@ -3,18 +3,7 @@
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow();
- void setupTableItems();
- void changeWidth();
- void changeHeight();
-
-private:
- QTableWidget *tableWidget;
-};
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/qtablewidget-using/main.cpp b/src/widgets/doc/snippets/qtablewidget-using/main.cpp
index a266be0fb9c..ca5cb942bc9 100644
--- a/src/widgets/doc/snippets/qtablewidget-using/main.cpp
+++ b/src/widgets/doc/snippets/qtablewidget-using/main.cpp
@@ -3,7 +3,7 @@
#include <QtGui>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
int main(int argc, char *argv[])
{
diff --git a/src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp
index bb4833d4b1d..9c38dd8d10d 100644
--- a/src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp
@@ -4,7 +4,7 @@
#include <QtWidgets>
#include <math.h>
-#include "mainwindow.h"
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/qtablewidget-using/mainwindow.h b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.h
deleted file mode 100644
index d9c4ce5ea66..00000000000
--- a/src/widgets/doc/snippets/qtablewidget-using/mainwindow.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QMainWindow>
-
-QT_BEGIN_NAMESPACE
-
-class QAction;
-class QTableWidget;
-class QTableWidgetItem;
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- MainWindow();
-
-public slots:
- void averageItems();
- void sumItems();
-
-private:
- void setupTableItems();
-
- QAction *removeAction;
-//! [0]
- QTableWidget *tableWidget;
-//! [0]
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp
index cb33cfa7079..0310f7bbfa2 100644
--- a/src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp
@@ -3,29 +3,7 @@
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow();
- void setupTreeItems();
- void findItems();
- void insertItem();
- void removeItem();
- void sortAscending();
- void sortDescending();
- void updateMenus(QTreeWidgetItem *current);
- void updateSortItems();
-
-private:
- QAction *insertAction;
- QAction *removeAction;
- QAction *ascendingAction;
- QAction *descendingAction;
- QAction *autoSortAction;
- QAction *findItemsAction;
- QTreeWidget *treeWidget;
-};
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
@@ -57,13 +35,15 @@ MainWindow::MainWindow()
//! [0]
*/
treeWidget = new QTreeWidget(this);
-//! [1]
+ //! [1]
treeWidget->setColumnCount(2);
-//! [1] //! [2]
+ //! [1]
+
+ //! [2]
QStringList headers;
headers << tr("Subject") << tr("Default");
treeWidget->setHeaderLabels(headers);
-//! [2]
+ //! [2]
connect(quitAction, &QAction::triggered, this, &QWidget::close);
connect(ascendingAction, &QAction::triggered, this, &MainWindow::sortAscending);
@@ -84,23 +64,23 @@ MainWindow::MainWindow()
void MainWindow::setupTreeItems()
{
-//! [3]
+ //! [3]
QTreeWidgetItem *cities = new QTreeWidgetItem(treeWidget);
cities->setText(0, tr("Cities"));
QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities);
osloItem->setText(0, tr("Oslo"));
osloItem->setText(1, tr("Yes"));
-//! [3]
+ //! [3]
(new QTreeWidgetItem(cities))->setText(0, tr("Stockholm"));
(new QTreeWidgetItem(cities))->setText(0, tr("Helsinki"));
(new QTreeWidgetItem(cities))->setText(0, tr("Copenhagen"));
-//! [4] //! [5]
+ //! [4] //! [5]
QTreeWidgetItem *planets = new QTreeWidgetItem(treeWidget, cities);
-//! [4]
+ //! [4]
planets->setText(0, tr("Planets"));
-//! [5]
+ //! [5]
(new QTreeWidgetItem(planets))->setText(0, tr("Mercury"));
(new QTreeWidgetItem(planets))->setText(0, tr("Venus"));
@@ -128,7 +108,7 @@ void MainWindow::findItems()
for (QTreeWidgetItem *item : items)
item->setSelected(false);
-//! [7]
+ //! [7]
const QList<QTreeWidgetItem *> found = treeWidget->findItems(
itemText, Qt::MatchWildcard);
@@ -136,7 +116,7 @@ void MainWindow::findItems()
item->setSelected(true);
// Show the item->text(0) for each item.
}
-//! [7]
+ //! [7]
}
void MainWindow::insertItem()
@@ -152,15 +132,15 @@ void MainWindow::insertItem()
if (itemText.isEmpty())
return;
-//! [8]
+ //! [8]
QTreeWidgetItem *parent = currentItem->parent();
QTreeWidgetItem *newItem;
if (parent)
newItem = new QTreeWidgetItem(parent, treeWidget->currentItem());
else
-//! [8] //! [9]
+ //! [8] //! [9]
newItem = new QTreeWidgetItem(treeWidget, treeWidget->currentItem());
-//! [9]
+ //! [9]
newItem->setText(0, itemText);
}
@@ -172,7 +152,7 @@ void MainWindow::removeItem()
if (!currentItem)
return;
-//! [10]
+ //! [10]
QTreeWidgetItem *parent = currentItem->parent();
int index;
@@ -182,9 +162,8 @@ void MainWindow::removeItem()
} else {
index = treeWidget->indexOfTopLevelItem(treeWidget->currentItem());
delete treeWidget->takeTopLevelItem(index);
-//! [10] //! [11]
}
-//! [11]
+ //! [10]
}
void MainWindow::sortAscending()
diff --git a/src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp b/src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp
index aa9be523834..0c003684bca 100644
--- a/src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp
+++ b/src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp
@@ -3,29 +3,7 @@
#include <QtWidgets>
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow();
- void setupTreeItems();
- void findItems();
- void insertItem();
- void removeItem();
- void sortAscending();
- void sortDescending();
- void updateMenus(QTreeWidgetItem *current);
- void updateSortItems();
-
-private:
- QAction *insertAction;
- QAction *removeAction;
- QAction *ascendingAction;
- QAction *descendingAction;
- QAction *autoSortAction;
- QAction *findItemsAction;
- QTreeWidget *treeWidget;
-};
+#include "../include/mainwindow.h"
MainWindow::MainWindow()
{
diff --git a/src/widgets/doc/snippets/reading-selections/main.cpp b/src/widgets/doc/snippets/reading-selections/main.cpp
index a87b55f1f70..f3b6de5ef7f 100644
--- a/src/widgets/doc/snippets/reading-selections/main.cpp
+++ b/src/widgets/doc/snippets/reading-selections/main.cpp
@@ -10,7 +10,7 @@
#include <QApplication>
-#include "window.h"
+#include "../include/mainwindow.h"
int main(int argc, char *argv[])
{
diff --git a/src/widgets/doc/snippets/reading-selections/window.cpp b/src/widgets/doc/snippets/reading-selections/window.cpp
index 1400f500d03..c0c3bcbe6f4 100644
--- a/src/widgets/doc/snippets/reading-selections/window.cpp
+++ b/src/widgets/doc/snippets/reading-selections/window.cpp
@@ -14,8 +14,9 @@
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
+#include <QTableView>
-#include "window.h"
+#include "../include/mainwindow.h"
class TableModel : public QAbstractTableModel
{
diff --git a/src/widgets/doc/snippets/reading-selections/window.h b/src/widgets/doc/snippets/reading-selections/window.h
deleted file mode 100644
index a4cdb0cc08f..00000000000
--- a/src/widgets/doc/snippets/reading-selections/window.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QItemSelection>
-#include <QMainWindow>
-#include <QAbstractItemModel>
-#include <QWidget>
-#include <QTableView>
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow(QWidget *parent = nullptr);
-
-private slots:
- void fillSelection();
- void clearSelection();
- void selectAll();
-
-private:
- QAbstractItemModel *model;
- QItemSelectionModel *selectionModel;
- QTableView *table;
-};
-
-#endif
diff --git a/src/widgets/doc/snippets/updating-selections/main.cpp b/src/widgets/doc/snippets/updating-selections/main.cpp
index a87b55f1f70..f3b6de5ef7f 100644
--- a/src/widgets/doc/snippets/updating-selections/main.cpp
+++ b/src/widgets/doc/snippets/updating-selections/main.cpp
@@ -10,7 +10,7 @@
#include <QApplication>
-#include "window.h"
+#include "../include/mainwindow.h"
int main(int argc, char *argv[])
{
diff --git a/src/widgets/doc/snippets/updating-selections/window.cpp b/src/widgets/doc/snippets/updating-selections/window.cpp
index 4685b33130d..d03a36d5fc3 100644
--- a/src/widgets/doc/snippets/updating-selections/window.cpp
+++ b/src/widgets/doc/snippets/updating-selections/window.cpp
@@ -12,8 +12,9 @@
#include <QItemSelection>
#include <QItemSelectionModel>
#include <QStatusBar>
+#include <QTableView>
-#include "window.h"
+#include "../include/mainwindow.h"
class TableModel : public QAbstractTableModel
{
diff --git a/src/widgets/doc/snippets/updating-selections/window.h b/src/widgets/doc/snippets/updating-selections/window.h
deleted file mode 100644
index 37764537214..00000000000
--- a/src/widgets/doc/snippets/updating-selections/window.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QItemSelection>
-#include <QMainWindow>
-#include <QModelIndex>
-#include <QWidget>
-#include <QTableView>
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-public:
- MainWindow(QWidget *parent = nullptr);
-
-public slots:
- void updateSelection(const QItemSelection &selected,
- const QItemSelection &deselected);
- void changeCurrent(const QModelIndex &current, const QModelIndex &previous);
-
-private:
- QAbstractItemModel *model;
- QItemSelectionModel *selectionModel;
- QTableView *table;
-};
-
-#endif
diff --git a/src/widgets/doc/src/model-view-programming.qdoc b/src/widgets/doc/src/model-view-programming.qdoc
index 5461619a4de..cecbe34b215 100644
--- a/src/widgets/doc/src/model-view-programming.qdoc
+++ b/src/widgets/doc/src/model-view-programming.qdoc
@@ -1480,7 +1480,6 @@
regardless of its location:
\snippet qtreewidget-using/mainwindow.cpp 10
- \snippet qtreewidget-using/mainwindow.cpp 11
Inserting the item somewhere else in the tree widget follows the same
pattern:
@@ -1497,7 +1496,7 @@
Tables can be created with a set number of rows and columns, or these
can be added to an unsized table as they are needed.
- \snippet qtablewidget-using/mainwindow.h 0
+ \snippet include/mainwindow.h 0
\snippet qtablewidget-using/mainwindow.cpp 0
Items are constructed outside the table before being added to the table
diff --git a/src/widgets/kernel/qtestsupport_widgets.cpp b/src/widgets/kernel/qtestsupport_widgets.cpp
index e0118605308..0816b640cc8 100644
--- a/src/widgets/kernel/qtestsupport_widgets.cpp
+++ b/src/widgets/kernel/qtestsupport_widgets.cpp
@@ -22,8 +22,10 @@ static bool qWaitForWidgetWindow(QWidget *w, Predicate predicate, QDeadlineTimer
if (!w->window()->windowHandle())
return false;
- return QTest::qWaitFor([&]() {
- if (QWindow *window = w->window()->windowHandle())
+ return QTest::qWaitFor([&, wp = QPointer(w)]() {
+ if (QWidget *widget = wp.data(); !widget)
+ return false;
+ else if (QWindow *window = widget->window()->windowHandle())
return predicate(window);
return false;
}, timeout);
diff --git a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
index d4dc6544a0e..ba92fb3fb30 100644
--- a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
+++ b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
@@ -1060,12 +1060,21 @@ void tst_QQuaternion::fromEulerAngles_data()
QTest::newRow("xonly")
<< 90.0f << 0.0f << 0.0f << QQuaternion(0.707107f, 0.707107f, 0.0f, 0.0f);
+ QTest::newRow("xonly-opposite")
+ << -90.0f << 0.0f << 0.0f << QQuaternion{M_SQRT1_2, -M_SQRT1_2, 0, 0};
+
QTest::newRow("yonly")
<< 0.0f << 180.0f << 0.0f << QQuaternion(0.0f, 0.0f, 1.0f, 0.0f);
+ QTest::newRow("yonly-opposite")
+ << 0.0f << -180.0f << 0.0f << QQuaternion(0.0f, 0.0f, -1.0f, 0.0f);
+
QTest::newRow("zonly")
<< 0.0f << 0.0f << 270.0f << QQuaternion(-0.707107f, 0.0f, 0.0f, 0.707107f);
+ QTest::newRow("zonly-opposite")
+ << 0.0f << 0.0f << -270.0f << QQuaternion(-M_SQRT1_2, 0.0f, 0.0f, M_SQRT1_2);
+
QTest::newRow("x+z")
<< 30.0f << 0.0f << 45.0f << QQuaternion(0.892399f, 0.239118f, -0.099046f, 0.369644f);
diff --git a/tests/auto/wayland/reconnect/wl-socket.c b/tests/auto/wayland/reconnect/wl-socket.c
index 3d449162251..f1258c10980 100644
--- a/tests/auto/wayland/reconnect/wl-socket.c
+++ b/tests/auto/wayland/reconnect/wl-socket.c
@@ -30,7 +30,7 @@ struct wl_socket {
int fd_lock;
struct sockaddr_un addr;
char lock_addr[UNIX_PATH_MAX + LOCK_SUFFIXLEN];
- char display_name[16];
+ char display_name[32];
};
static struct wl_socket *wl_socket_alloc(void)
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST b/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
index 00ff17aaa83..d5f45f47e7a 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
+++ b/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
@@ -8,3 +8,5 @@ ci b2qt 32bit
ci b2qt 32bit
[task232085_spinBoxLineEditBg]
ci b2qt 32bit
+[emptyStyleSheet]
+macos # QTBUG-21468
diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp
index e5d1ad47e08..46a39d2ed96 100644
--- a/util/unicode/main.cpp
+++ b/util/unicode/main.cpp
@@ -1306,6 +1306,7 @@ static QHash<int, int> combiningClassUsage;
static int maxLowerCaseDiff = 0;
static int maxUpperCaseDiff = 0;
static int maxTitleCaseDiff = 0;
+static int maxSeparatorCodepoint = 0;
static void readUnicodeData()
{
@@ -1366,6 +1367,9 @@ static void readUnicodeData()
UnicodeData &data = UnicodeData::valueRef(codepoint);
data.p.category = categoryMap.value(properties[UD_Category], QChar::Other_NotAssigned);
+ if (data.p.category == QChar::Separator_Space || data.p.category == QChar::Separator_Line
+ || data.p.category == QChar::Separator_Paragraph)
+ maxSeparatorCodepoint = codepoint;
data.p.combiningClass = properties[UD_CombiningClass].toInt();
if (!combiningClassUsage.contains(data.p.combiningClass))
combiningClassUsage[data.p.combiningClass] = 1;
@@ -2986,7 +2990,12 @@ static QByteArray createPropertyInfo()
Q_ASSERT(blockMap.size() == BMP_END/BMP_BLOCKSIZE +(SMP_END-BMP_END)/SMP_BLOCKSIZE); // 0x1870
Q_ASSERT(blockMap.last() + blockMap.size() < (1<<(sizeof(unsigned short)*8)));
- QByteArray out = "static constexpr unsigned short uc_property_trie[] = {\n";
+ QByteArray out;
+ out += "static constexpr char32_t MaxSeparatorCodepoint = 0x";
+ out += QByteArray::number(maxSeparatorCodepoint, 16);
+ out += ";\n";
+
+ out += "\nstatic constexpr unsigned short uc_property_trie[] = {\n";
// First write the map from blockId to indices of unique blocks:
out += " // [0x0..0x" + QByteArray::number(BMP_END, 16) + ")";
for (int i = 0; i < BMP_END/BMP_BLOCKSIZE; ++i) {
@@ -3702,7 +3711,7 @@ int main(int, char **)
f.write(note);
f.write("#include \"qunicodetables_p.h\"\n\n");
f.write("QT_BEGIN_NAMESPACE\n\n");
- f.write("namespace QUnicodeTables {\n\n");
+ f.write("namespace QUnicodeTables {\n");
f.write(properties);
f.write(specialCases);
f.write(compositions);