From c3226bd5cc6bf009d2fb3c233a09f3ef5cf618e9 Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Mon, 25 Mar 2019 12:40:36 +0100 Subject: [PATCH 1/4] configure: add linker flags for xkbcommon* when pkg-config not present Without this, xkbcommon feature would not be detected even if all xkbcommon dev libs are present. Change-Id: Ic247461dda9e7ddfed547708cccaad88f123903b Reviewed-by: Joerg Bornemann --- src/gui/configure.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/configure.json b/src/gui/configure.json index e4f25ab3138..6fdcd562a78 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": { From 243c8403903781a28832e0bf34ce962058300e99 Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Tue, 26 Mar 2019 00:02:22 +0100 Subject: [PATCH 2/4] Drag'n'Drop: fix dnd regression DragEnter events always should start with the default state, which is accepted = false. This was a copy-and-paste error introduced by f8944a7f07112c85dc4f66848cabb490514cd28e. Fixes: QTBUG-73977 Change-Id: I34b3ea97c9b4f4fc040a9e6f1befd6124533361d Reviewed-by: Friedemann Kleint --- src/widgets/kernel/qwidgetwindow.cpp | 2 - .../qwidget_window/tst_qwidget_window.cpp | 75 +++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp index e9b749d7c2d..fbc71cd0ea1 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 431d6ba9603..8b558aa56fd 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 #include #include +#include +#include +#include #include @@ -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() From ae5db669e8989fe793949346d8061c67e5ec31cd Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 28 Mar 2019 10:12:12 +0100 Subject: [PATCH 3/4] Doc: Improve WinTab license information Do not categorize the license anymore as 'Public Domain', because the actual text is not explicit on whether it allows modifications. Instead show the original license text. Also remove the Homepage link, which now just displays (arguably outdated) information about patents. Finally, do not misuse the "Version" field for metadata information, use the newly introduced "PackageComment" field instead. [ChangeLog][Third-Party Code] Changed classification of the wintab license from Public Domain to Custom. Fixes: QTBUG-74453 Change-Id: Ibae36be1deee3b9c498c45d03ed741c3d5ff630c Reviewed-by: Alex Blasche Reviewed-by: Lars Knoll --- src/3rdparty/wintab/LICENSE.txt | 2 ++ src/3rdparty/wintab/qt_attribution.json | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 src/3rdparty/wintab/LICENSE.txt diff --git a/src/3rdparty/wintab/LICENSE.txt b/src/3rdparty/wintab/LICENSE.txt new file mode 100644 index 00000000000..6c03ad2aff7 --- /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 f0c9b49841d..1b9c55552ee 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." } From a0b5d6e60f96359d88352e0b1c000678cdc80988 Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Thu, 4 Apr 2019 15:05:16 +0300 Subject: [PATCH 4/4] Revert "Let "qmake -install qinstall" set default permissions 0644 and 0755" This reverts commit 3cdf46059a668f588fe237aa881c300dd76cbf9e. It seems change is causing regression & is reverted now to be able to proceed with releases Task-number: QTBUG-74912 Change-Id: Ib2365b96ee98fbbcc8853cc7f8726c157c1913a7 Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: Joerg Bornemann --- qmake/main.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/qmake/main.cpp b/qmake/main.cpp index e5f70325542..a4ef79227bf 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; }