diff options
author | Kai Uwe Broulik <kde@privat.broulik.de> | 2023-08-05 16:48:37 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2023-11-09 10:51:52 +0000 |
commit | 8168df849182aab1424867658254826e8b5ed78e (patch) | |
tree | bd36fda3df4a61b2445436e5bf4c584c8d6871dc /tests/auto/client/datadevicev1/tst_datadevicev1.cpp | |
parent | 6644c401194f38b906dd71edeef882223fdddb9c (diff) |
client: Convert text/x-moz-urls to text/uri-list
Similar to how it's done in the XCB QPA.
This format is used by both Firefox and Chrome
for exchanging URLs.
Pick-to: 6.5
Change-Id: Icd4406ff6297ea2800f4e1389ffc2878ee1ccb65
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 80a3359598553298b544feae0a7e7399d6cfd9a7)
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'tests/auto/client/datadevicev1/tst_datadevicev1.cpp')
-rw-r--r-- | tests/auto/client/datadevicev1/tst_datadevicev1.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/auto/client/datadevicev1/tst_datadevicev1.cpp b/tests/auto/client/datadevicev1/tst_datadevicev1.cpp index cdbf7379a..bb831564a 100644 --- a/tests/auto/client/datadevicev1/tst_datadevicev1.cpp +++ b/tests/auto/client/datadevicev1/tst_datadevicev1.cpp @@ -31,6 +31,7 @@ private slots: void initTestCase(); void pasteAscii(); void pasteUtf8(); + void pasteMozUrl(); void destroysPreviousSelection(); void destroysSelectionWithSurface(); void destroysSelectionOnLeave(); @@ -123,6 +124,49 @@ void tst_datadevicev1::pasteUtf8() QTRY_COMPARE(window.m_text, "face with tears of joy: 😂"); } +void tst_datadevicev1::pasteMozUrl() +{ + class Window : public QRasterWindow { + public: + void mousePressEvent(QMouseEvent *) override { m_urls = QGuiApplication::clipboard()->mimeData()->urls(); } + QList<QUrl> m_urls; + }; + + Window window; + window.resize(64, 64); + window.show(); + + QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); + exec([&] { + auto *client = xdgSurface()->resource()->client(); + auto *offer = dataDevice()->sendDataOffer(client, {"text/x-moz-url"}); + connect(offer, &DataOffer::receive, [](QString mimeType, int fd) { + QFile file; + file.open(fd, QIODevice::WriteOnly, QFile::FileHandleFlag::AutoCloseHandle); + QCOMPARE(mimeType, "text/x-moz-url"); + const QString content("https://www.qt.io/\nQt\nhttps://www.example.com/\nExample Website"); + // Need UTF-16. + file.write(reinterpret_cast<const char *>(content.data()), content.size() * 2); + file.close(); + }); + dataDevice()->sendSelection(offer); + + auto *surface = xdgSurface()->m_surface; + keyboard()->sendEnter(surface); // Need to set keyboard focus according to protocol + + pointer()->sendEnter(surface, {32, 32}); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 1); + pointer()->sendFrame(client); + pointer()->sendButton(client, BTN_LEFT, 0); + pointer()->sendFrame(client); + }); + + QTRY_COMPARE(window.m_urls.count(), 2); + QCOMPARE(window.m_urls.at(0), QUrl("https://www.qt.io/")); + QCOMPARE(window.m_urls.at(1), QUrl("https://www.example.com/")); +} + void tst_datadevicev1::destroysPreviousSelection() { QRasterWindow window; |