summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-05-06 01:00:13 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-05-06 01:00:13 +0200
commite4e5a1f0b7f85b4c8b593a06a67d83f5be09004e (patch)
treedac64fe28e21f02938be5c726002b379750fe7ad
parent615b02bfa2fb861f362c511087e6962660c25ea3 (diff)
parenta50b29d65bddae44aedfd9372502f656656803d5 (diff)
Merge remote-tracking branch 'origin/5.12' into 5.13
-rw-r--r--mkspecs/common/windows-vulkan.conf5
-rw-r--r--mkspecs/features/qt_configure.prf6
-rw-r--r--mkspecs/features/qt_module_pris.prf8
-rw-r--r--mkspecs/features/win32/windows_vulkan_sdk.prf8
-rw-r--r--src/corelib/io/qdiriterator.cpp3
-rw-r--r--src/gui/configure.json4
-rw-r--r--src/gui/text/qfontsubset.cpp4
-rw-r--r--src/gui/text/qtexthtmlparser.cpp4
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp15
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp15
-rw-r--r--src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h2
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp26
-rw-r--r--src/plugins/platforms/cocoa/qcocoasystemtrayicon.h3
-rw-r--r--src/plugins/platforms/cocoa/qnsview_dragging.mm19
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.cpp2
-rw-r--r--src/widgets/widgets/qwidgetanimator.cpp6
-rw-r--r--src/widgets/widgets/qwidgetanimator_p.h2
17 files changed, 106 insertions, 26 deletions
diff --git a/mkspecs/common/windows-vulkan.conf b/mkspecs/common/windows-vulkan.conf
index 5f930c7910..da061422dc 100644
--- a/mkspecs/common/windows-vulkan.conf
+++ b/mkspecs/common/windows-vulkan.conf
@@ -1,5 +1,2 @@
-# Pick up the VULKAN_SDK env var set by the LunarG SDK so that the Vulkan
-# headers are found out-of-the-box on typical Windows setups.
-
-QMAKE_INCDIR_VULKAN = $$(VULKAN_SDK)\\include
+load(windows_vulkan_sdk)
QMAKE_LIBS_VULKAN =
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index eae4100e64..94eb012b81 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -963,8 +963,10 @@ defineTest(qtConfExportLibrary) {
defines = $$eval($${spfx}.defines)
!isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines)
includes = $$eval($${spfx}.exportincludedir)
- isEmpty(includes): includes = $$eval($${spfx}.includedir)
- !isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
+ !equals(includes, -) {
+ isEmpty(includes): includes = $$eval($${spfx}.includedir)
+ !isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes)
+ }
uses = $$eval($${lpfx}.dependencies)
!isEmpty(uses) {
# FIXME: ideally, we would export transitive deps only for static
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index e0556ce960..e892f83432 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -60,8 +60,12 @@ defineReplace(qtExportLibsForModule) {
QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \
QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME
for (var, vars) {
- defined($$var, var): \
- result += "$$var = $$val_escape($$var)"
+ expvar = $$var
+ expvar ~= s/^QMAKE_/QMAKE_EXPORT_/
+ defined($$expvar, var):equals($$expvar, -): next()
+ !defined($$expvar, var): expvar = $$var
+ defined($$expvar, var): \
+ result += "$$var = $$val_escape($$expvar)"
}
}
return($$result)
diff --git a/mkspecs/features/win32/windows_vulkan_sdk.prf b/mkspecs/features/win32/windows_vulkan_sdk.prf
new file mode 100644
index 0000000000..6c08e28fe9
--- /dev/null
+++ b/mkspecs/features/win32/windows_vulkan_sdk.prf
@@ -0,0 +1,8 @@
+isEmpty(QMAKE_INCDIR_VULKAN) {
+ # Pick up the VULKAN_SDK env var set by the LunarG SDK so that the Vulkan
+ # headers are found out-of-the-box on typical Windows setups.
+ QMAKE_INCDIR_VULKAN = $$(VULKAN_SDK)\\include
+
+ # Do not export the include dir but resolve it on every qmake call.
+ QMAKE_EXPORT_INCDIR_VULKAN = -
+}
diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp
index 648593b020..ccde9745bf 100644
--- a/src/corelib/io/qdiriterator.cpp
+++ b/src/corelib/io/qdiriterator.cpp
@@ -320,7 +320,8 @@ void QDirIteratorPrivate::checkAndPushDirectory(const QFileInfo &fileInfo)
bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInfo &fi) const
{
- Q_ASSERT(!fileName.isEmpty());
+ if (fileName.isEmpty())
+ return false;
// filter . and ..?
const int fileNameSize = fileName.size();
diff --git a/src/gui/configure.json b/src/gui/configure.json
index c74b11e1e3..6280b4dfa2 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -1206,14 +1206,14 @@
"label": " Using system FreeType",
"enable": "input.freetype == 'system'",
"disable": "input.freetype == 'qt'",
- "autoDetect": "!config.win32",
+ "autoDetect": "!config.msvc",
"condition": "features.freetype && libs.freetype",
"output": [ "privateFeature" ]
},
"fontconfig": {
"label": "Fontconfig",
"autoDetect": "!config.darwin",
- "condition": "!config.win32 && features.system-freetype && libs.fontconfig",
+ "condition": "!config.msvc && features.system-freetype && libs.fontconfig",
"output": [ "privateFeature", "feature" ]
},
"gbm": {
diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp
index f5fc562e13..fb12b681a4 100644
--- a/src/gui/text/qfontsubset.cpp
+++ b/src/gui/text/qfontsubset.cpp
@@ -49,6 +49,8 @@
QT_BEGIN_NAMESPACE
+#ifndef QT_NO_PDF
+
// This map is used for symbol fonts to get the correct glyph names for the latin range
static const unsigned short symbol_map[0x100] = {
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
@@ -90,7 +92,7 @@ static const unsigned short symbol_map[0x100] = {
// ---------------------------- PS/PDF helper methods -----------------------------------
-#ifndef QT_NO_PDF
+
QByteArray QFontSubset::glyphName(unsigned short unicode, bool symbol)
{
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index adc3b138f7..895232e4c7 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -1721,6 +1721,8 @@ QStringList QTextHtmlStyleSelector::nodeNames(NodePtr node) const
#endif // QT_NO_CSSPARSER
+#ifndef QT_NO_CSSPARSER
+
static inline int findAttribute(const QStringList &attributes, const QString &name)
{
int idx = -1;
@@ -1730,8 +1732,6 @@ static inline int findAttribute(const QStringList &attributes, const QString &na
return idx;
}
-#ifndef QT_NO_CSSPARSER
-
QString QTextHtmlStyleSelector::attribute(NodePtr node, const QString &name) const
{
const QStringList &attributes = parser->at(node.id).attributes;
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
index 10df85f68e..c456f01b28 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
@@ -1118,7 +1118,7 @@ static bool addFontToDatabase(QString familyName,
}
static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *textmetric,
- DWORD type, LPARAM)
+ DWORD type, LPARAM lparam)
{
const ENUMLOGFONTEX *f = reinterpret_cast<const ENUMLOGFONTEX *>(logFont);
const QString familyName = QString::fromWCharArray(f->elfLogFont.lfFaceName);
@@ -1128,8 +1128,16 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t
// to the documentation is identical to a TEXTMETRIC except for the last four
// members, which we don't use anyway
const FONTSIGNATURE *signature = nullptr;
- if (type & TRUETYPE_FONTTYPE)
+ if (type & TRUETYPE_FONTTYPE) {
signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig;
+ // We get a callback for each script-type supported, but we register them all
+ // at once using the signature, so we only need one call to addFontToDatabase().
+ QSet<QPair<QString,QString>> *foundFontAndStyles = reinterpret_cast<QSet<QPair<QString,QString>> *>(lparam);
+ QPair<QString,QString> fontAndStyle(familyName, styleName);
+ if (foundFontAndStyles->contains(fontAndStyle))
+ return 1;
+ foundFontAndStyles->insert(fontAndStyle);
+ }
addFontToDatabase(familyName, styleName, *logFont, textmetric, signature, type);
// keep on enumerating
@@ -1149,7 +1157,8 @@ void QWindowsFontDatabase::populateFamily(const QString &familyName)
familyName.toWCharArray(lf.lfFaceName);
lf.lfFaceName[familyName.size()] = 0;
lf.lfPitchAndFamily = 0;
- EnumFontFamiliesEx(dummy, &lf, storeFont, 0, 0);
+ QSet<QPair<QString,QString>> foundFontAndStyles;
+ EnumFontFamiliesEx(dummy, &lf, storeFont, reinterpret_cast<intptr_t>(&foundFontAndStyles), 0);
ReleaseDC(0, dummy);
}
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
index db2186644b..fdef0f5ff1 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
@@ -303,7 +303,7 @@ static bool addFontToDatabase(QString familyName,
}
static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *textmetric,
- DWORD type, LPARAM)
+ DWORD type, LPARAM lparam)
{
const ENUMLOGFONTEX *f = reinterpret_cast<const ENUMLOGFONTEX *>(logFont);
const QString faceName = QString::fromWCharArray(f->elfLogFont.lfFaceName);
@@ -314,8 +314,16 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t
// to the documentation is identical to a TEXTMETRIC except for the last four
// members, which we don't use anyway
const FONTSIGNATURE *signature = nullptr;
- if (type & TRUETYPE_FONTTYPE)
+ if (type & TRUETYPE_FONTTYPE) {
signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig;
+ // We get a callback for each script-type supported, but we register them all
+ // at once using the signature, so we only need one call to addFontToDatabase().
+ QSet<QPair<QString,QString>> *foundFontAndStyles = reinterpret_cast<QSet<QPair<QString,QString>> *>(lparam);
+ QPair<QString,QString> fontAndStyle(faceName, styleName);
+ if (foundFontAndStyles->contains(fontAndStyle))
+ return 1;
+ foundFontAndStyles->insert(fontAndStyle);
+ }
addFontToDatabase(faceName, styleName, fullName, *logFont, textmetric, signature, type);
// keep on enumerating
@@ -344,7 +352,8 @@ void QWindowsFontDatabaseFT::populateFamily(const QString &familyName)
lf.lfFaceName[familyName.size()] = 0;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfPitchAndFamily = 0;
- EnumFontFamiliesEx(dummy, &lf, storeFont, 0, 0);
+ QSet<QPair<QString,QString>> foundFontAndStyles;
+ EnumFontFamiliesEx(dummy, &lf, storeFont, reinterpret_cast<intptr_t>(&foundFontAndStyles), 0);
ReleaseDC(0, dummy);
}
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
index c7c3f4bc5b..7959f0c28a 100644
--- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
+++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuconnection_p.h
@@ -55,6 +55,8 @@
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusVariant>
+#include <QtGui/qtgui-config.h>
+
QT_BEGIN_NAMESPACE
class QDBusServiceWatcher;
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index c31e43e0bb..00ab3409d3 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -978,15 +978,25 @@ jboolean QAndroidInputContext::deleteSurroundingText(jint leftLength, jint right
m_composingText.clear();
m_composingTextStart = -1;
- QString text = query->value(Qt::ImSurroundingText).toString();
- if (text.isEmpty())
- return JNI_TRUE;
-
if (leftLength < 0) {
rightLength += -leftLength;
leftLength = 0;
}
+ QVariant textBeforeCursor = query->value(Qt::ImTextBeforeCursor);
+ QVariant textAfterCursor = query->value(Qt::ImTextAfterCursor);
+ if (textBeforeCursor.isValid() && textAfterCursor.isValid()) {
+ leftLength = qMin(leftLength, textBeforeCursor.toString().length());
+ rightLength = qMin(rightLength, textAfterCursor.toString().length());
+ } else {
+ int cursorPos = query->value(Qt::ImCursorPosition).toInt();
+ leftLength = qMin(leftLength, cursorPos);
+ rightLength = qMin(rightLength, query->value(Qt::ImSurroundingText).toString().length() - cursorPos);
+ }
+
+ if (leftLength == 0 && rightLength == 0)
+ return JNI_TRUE;
+
QInputMethodEvent event;
event.setCommitString(QString(), -leftLength, leftLength+rightLength);
sendInputMethodEvent(&event);
@@ -1075,6 +1085,14 @@ const QAndroidInputContext::ExtractedText &QAndroidInputContext::getExtractedTex
int cpos = localPos + composeLength; //actual cursor pos relative to the current block
int localOffset = 0; // start of extracted text relative to the current block
+ if (blockPos > 0) {
+ QString prevBlockEnding = query->value(Qt::ImTextBeforeCursor).toString();
+ prevBlockEnding.chop(localPos);
+ if (prevBlockEnding.endsWith(QLatin1Char('\n'))) {
+ localOffset = -qMin(20, prevBlockEnding.length());
+ blockText = prevBlockEnding.right(-localOffset) + blockText;
+ }
+ }
// It is documented that we should try to return hintMaxChars
// characters, but that's not what the standard Android controls do, and
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
index d831612c22..6779bda491 100644
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
@@ -42,8 +42,9 @@
#define QCOCOASYSTEMTRAYICON_P_H
#include <QtCore/qglobal.h>
+#include <QtGui/qtguiglobal.h>
-#ifndef QT_NO_SYSTEMTRAYICON
+#if QT_CONFIG(systemtrayicon)
#include "QtCore/qstring.h"
#include "QtGui/qpa/qplatformsystemtrayicon.h"
diff --git a/src/plugins/platforms/cocoa/qnsview_dragging.mm b/src/plugins/platforms/cocoa/qnsview_dragging.mm
index 002cb3279e..37e972dba9 100644
--- a/src/plugins/platforms/cocoa/qnsview_dragging.mm
+++ b/src/plugins/platforms/cocoa/qnsview_dragging.mm
@@ -293,7 +293,26 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag();
nativeDrag->setAcceptedAction(qt_mac_mapNSDragOperation(operation));
+ // Qt starts drag-and-drop on a mouse button press event. Cococa in
+ // this case won't send the matching release event, so we have to
+ // synthesize it here.
m_buttons = currentlyPressedMouseButtons();
+ const auto modifiers = [QNSView convertKeyModifiers:NSApp.currentEvent.modifierFlags];
+
+ NSPoint windowPoint = [self.window convertRectFromScreen:NSMakeRect(screenPoint.x, screenPoint.y, 1, 1)].origin;
+ NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil];
+
+ QPoint qtWindowPoint(nsViewPoint.x, nsViewPoint.y);
+ QPoint qtScreenPoint = QCocoaScreen::mapFromNative(screenPoint).toPoint();
+
+ QWindowSystemInterface::handleMouseEvent(
+ target,
+ mapWindowCoordinates(m_platformWindow->window(), target, qtWindowPoint),
+ qtScreenPoint,
+ m_buttons,
+ Qt::NoButton,
+ QEvent::MouseButtonRelease,
+ modifiers);
qCDebug(lcQpaMouse) << "Drag session" << session << "ended, with" << m_buttons;
}
diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp
index 448e775a71..31dde8832b 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.cpp
+++ b/src/widgets/itemviews/qabstractitemdelegate.cpp
@@ -388,6 +388,8 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event,
const QModelIndex &index)
{
Q_D(QAbstractItemDelegate);
+ Q_UNUSED(d);
+ Q_UNUSED(index);
Q_UNUSED(option);
if (!event || !view)
diff --git a/src/widgets/widgets/qwidgetanimator.cpp b/src/widgets/widgets/qwidgetanimator.cpp
index b1e527e3b6..486d65d92c 100644
--- a/src/widgets/widgets/qwidgetanimator.cpp
+++ b/src/widgets/widgets/qwidgetanimator.cpp
@@ -50,8 +50,12 @@
QT_BEGIN_NAMESPACE
-QWidgetAnimator::QWidgetAnimator(QMainWindowLayout *layout) : m_mainWindowLayout(layout)
+QWidgetAnimator::QWidgetAnimator(QMainWindowLayout *layout)
+#if QT_CONFIG(mainwindow)
+: m_mainWindowLayout(layout)
+#endif
{
+ Q_UNUSED(layout)
}
void QWidgetAnimator::abort(QWidget *w)
diff --git a/src/widgets/widgets/qwidgetanimator_p.h b/src/widgets/widgets/qwidgetanimator_p.h
index 920cc3ffc8..9d08d03593 100644
--- a/src/widgets/widgets/qwidgetanimator_p.h
+++ b/src/widgets/widgets/qwidgetanimator_p.h
@@ -81,7 +81,9 @@ private Q_SLOTS:
private:
typedef QHash<QWidget*, QPointer<QPropertyAnimation> > AnimationMap;
AnimationMap m_animation_map;
+#if QT_CONFIG(mainwindow)
QMainWindowLayout *m_mainWindowLayout;
+#endif
};
QT_END_NAMESPACE