summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-04-08 09:53:39 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-04-08 09:53:39 +0200
commit01a269593d281ae1cacc9cef5c5ccae10d41f03e (patch)
tree4e08108745b41314c6d3b5b35e66f4cb1d0024d9
parente199710d0ea804e4481042f41b91b5234540f5d5 (diff)
parenta0b5d6e60f96359d88352e0b1c000678cdc80988 (diff)
Merge remote-tracking branch 'origin/5.12.3' into 5.12
-rw-r--r--qmake/main.cpp26
-rw-r--r--src/3rdparty/wintab/LICENSE.txt2
-rw-r--r--src/3rdparty/wintab/qt_attribution.json6
-rw-r--r--src/gui/configure.json6
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp2
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp75
6 files changed, 100 insertions, 17 deletions
diff --git a/qmake/main.cpp b/qmake/main.cpp
index e5f7032554..a4ef79227b 100644
--- a/qmake/main.cpp
+++ b/qmake/main.cpp
@@ -260,25 +260,31 @@ static int installFile(const QString &source, const QString &target, bool exe =
return 3;
}
- QFileDevice::Permissions targetPermissions = QFileDevice::ReadOwner | QFileDevice::WriteOwner
- | QFileDevice::ReadUser | QFileDevice::WriteUser
- | QFileDevice::ReadGroup | QFileDevice::ReadOther;
if (exe) {
- targetPermissions |= QFileDevice::ExeOwner | QFileDevice::ExeUser |
- QFileDevice::ExeGroup | QFileDevice::ExeOther;
- }
- if (!targetFile.setPermissions(targetPermissions)) {
- fprintf(stderr, "Error setting permissions on %s: %s\n",
- qPrintable(target), qPrintable(targetFile.errorString()));
- return 3;
+ if (!targetFile.setPermissions(sourceFile.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeUser |
+ QFileDevice::ExeGroup | QFileDevice::ExeOther)) {
+ fprintf(stderr, "Error setting execute permissions on %s: %s\n",
+ qPrintable(target), qPrintable(targetFile.errorString()));
+ return 3;
+ }
}
// Copy file times
QString error;
+#ifdef Q_OS_WIN
+ const QFile::Permissions permissions = targetFile.permissions();
+ const bool readOnly = !(permissions & QFile::WriteUser);
+ if (readOnly)
+ targetFile.setPermissions(permissions | QFile::WriteUser);
+#endif
if (!IoUtils::touchFile(target, sourceFile.fileName(), &error)) {
fprintf(stderr, "%s", qPrintable(error));
return 3;
}
+#ifdef Q_OS_WIN
+ if (readOnly)
+ targetFile.setPermissions(permissions);
+#endif
return 0;
}
diff --git a/src/3rdparty/wintab/LICENSE.txt b/src/3rdparty/wintab/LICENSE.txt
new file mode 100644
index 0000000000..6c03ad2aff
--- /dev/null
+++ b/src/3rdparty/wintab/LICENSE.txt
@@ -0,0 +1,2 @@
+The text and information contained in this file may be freely used,
+copied, or distributed without compensation or licensing restrictions.
diff --git a/src/3rdparty/wintab/qt_attribution.json b/src/3rdparty/wintab/qt_attribution.json
index f0c9b49841..1b9c55552e 100644
--- a/src/3rdparty/wintab/qt_attribution.json
+++ b/src/3rdparty/wintab/qt_attribution.json
@@ -5,9 +5,9 @@
"QtUsage": "Used in the Qt platform plugin for Windows. Configure with -no-feature-tabletevent to avoid.",
"Description": "Wintab is a de facto API for pointing devices on Windows.",
- "Version": "Upstream no longer offers updates; treat as final",
- "Homepage": "http://www.pointing.com/Wintab.html",
- "License": "Public Domain",
+ "PackageComment": "Upstream http://www.pointing.com/Wintab.html no longer offers updates; treat as final",
+ "License": "Custom License",
+ "LicenseFile": "LICENSE.txt",
"LicenseId": "NONE",
"Copyright": "Copyright 1991-1998 by LCS/Telegraphics."
}
diff --git a/src/gui/configure.json b/src/gui/configure.json
index e4f25ab313..6fdcd562a7 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -764,7 +764,8 @@
},
"headers": [ "xkbcommon/xkbcommon.h" ],
"sources": [
- { "type": "pkgConfig", "args": "xkbcommon >= 0.5.0" }
+ { "type": "pkgConfig", "args": "xkbcommon >= 0.5.0" },
+ "-lxkbcommon"
]
},
"xkbcommon_x11": {
@@ -774,7 +775,8 @@
},
"headers": [ "xkbcommon/xkbcommon-x11.h" ],
"sources": [
- { "type": "pkgConfig", "args": "xkbcommon-x11" }
+ { "type": "pkgConfig", "args": "xkbcommon-x11" },
+ "-lxkbcommon -lxkbcommon-x11"
]
},
"xrender": {
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index e9b749d7c2..fbc71cd0ea 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -878,8 +878,6 @@ void QWidgetWindow::handleDragEnterEvent(QDragEnterEvent *event, QWidget *widget
const QPoint mapped = widget->mapFromGlobal(m_widget->mapToGlobal(event->pos()));
QDragEnterEvent translated(mapped, event->possibleActions(), event->mimeData(),
event->mouseButtons(), event->keyboardModifiers());
- translated.setDropAction(event->dropAction());
- translated.setAccepted(event->isAccepted());
QGuiApplication::forwardEvent(m_dragTarget, &translated, event);
event->setAccepted(translated.isAccepted());
event->setDropAction(translated.dropAction());
diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
index 431d6ba960..8b558aa56f 100644
--- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
@@ -46,6 +46,9 @@
#include <private/qwindow_p.h>
#include <private/qguiapplication_p.h>
#include <qpa/qplatformintegration.h>
+#include <qpa/qwindowsysteminterface.h>
+#include <qpa/qplatformdrag.h>
+#include <private/qhighdpiscaling_p.h>
#include <QtTest/private/qtesthelpers_p.h>
@@ -87,6 +90,7 @@ private slots:
#if QT_CONFIG(draganddrop)
void tst_dnd();
void tst_dnd_events();
+ void tst_dnd_propagation();
#endif
void tst_qtbug35600();
@@ -744,6 +748,77 @@ void tst_QWidget_window::tst_dnd_events()
QCOMPARE(dndWidget._dndEvents, expectedDndEvents);
}
+
+class DropTarget : public QWidget
+{
+public:
+ explicit DropTarget()
+ {
+ setAcceptDrops(true);
+
+ const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ auto width = availableGeometry.width() / 6;
+ auto height = availableGeometry.height() / 4;
+
+ setGeometry(availableGeometry.x() + 200, availableGeometry.y() + 200, width, height);
+
+ QLabel *label = new QLabel(QStringLiteral("Test"), this);
+ label->setGeometry(40, 40, 60, 60);
+ label->setAcceptDrops(true);
+ }
+
+ void dragEnterEvent(QDragEnterEvent *event) override
+ {
+ event->accept();
+ mDndEvents.append("enter ");
+ }
+
+ void dragMoveEvent(QDragMoveEvent *event) override
+ {
+ event->acceptProposedAction();
+ }
+
+ void dragLeaveEvent(QDragLeaveEvent *) override
+ {
+ mDndEvents.append("leave ");
+ }
+
+ void dropEvent(QDropEvent *event) override
+ {
+ event->accept();
+ mDndEvents.append("drop ");
+ }
+
+ QString mDndEvents;
+};
+
+void tst_QWidget_window::tst_dnd_propagation()
+{
+ QMimeData mimeData;
+ mimeData.setText(QLatin1String("testmimetext"));
+
+ DropTarget target;
+ target.show();
+ QVERIFY(QTest::qWaitForWindowActive(&target));
+
+ Qt::DropActions supportedActions = Qt::DropAction::CopyAction;
+ QWindow *window = target.windowHandle();
+
+ auto posInsideDropTarget = QHighDpi::toNativePixels(QPoint(20, 20), window->screen());
+ auto posInsideLabel = QHighDpi::toNativePixels(QPoint(60, 60), window->screen());
+
+ // Enter DropTarget.
+ QWindowSystemInterface::handleDrag(window, &mimeData, posInsideDropTarget, supportedActions, 0, 0);
+ // Enter QLabel. This will propagate because default QLabel does
+ // not accept the drop event in dragEnterEvent().
+ QWindowSystemInterface::handleDrag(window, &mimeData, posInsideLabel, supportedActions, 0, 0);
+ // Drop on QLabel. DropTarget will get dropEvent(), because it accepted the event.
+ QWindowSystemInterface::handleDrop(window, &mimeData, posInsideLabel, supportedActions, 0, 0);
+
+ QGuiApplication::processEvents();
+
+ QCOMPARE(target.mDndEvents, "enter leave enter drop ");
+}
#endif
void tst_QWidget_window::tst_qtbug35600()