Add client test for clipboard when losing keyboard focus
Also, verifies that we fixed a recent bug about QClipboard::dataChanged not being emitted when the clipboard is invalidated due to losing focus. Change-Id: Ie92b618a4f673c21d6582979249700aef8785536 Reviewed-by: Pekka Vuorela <pvuorela@iki.fi>
This commit is contained in:
parent
7cc704a3a7
commit
37e0cd278a
@ -59,6 +59,7 @@ private slots:
|
|||||||
void pasteUtf8();
|
void pasteUtf8();
|
||||||
void destroysPreviousSelection();
|
void destroysPreviousSelection();
|
||||||
void destroysSelectionWithSurface();
|
void destroysSelectionWithSurface();
|
||||||
|
void destroysSelectionOnLeave();
|
||||||
void dragWithoutFocus();
|
void dragWithoutFocus();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -215,6 +216,35 @@ void tst_datadevicev1::destroysSelectionWithSurface()
|
|||||||
QCOMPOSITOR_TRY_COMPARE(dataDevice()->m_sentSelectionOffers.size(), 0);
|
QCOMPOSITOR_TRY_COMPARE(dataDevice()->m_sentSelectionOffers.size(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_datadevicev1::destroysSelectionOnLeave()
|
||||||
|
{
|
||||||
|
QRasterWindow window;
|
||||||
|
window.resize(64, 64);
|
||||||
|
window.show();
|
||||||
|
QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial);
|
||||||
|
|
||||||
|
exec([&] {
|
||||||
|
auto *offer = dataDevice()->sendDataOffer(client(), {"text/plain"});
|
||||||
|
dataDevice()->sendSelection(offer);
|
||||||
|
|
||||||
|
auto *surface = xdgSurface()->m_surface;
|
||||||
|
keyboard()->sendEnter(surface); // Need to set keyboard focus according to protocol
|
||||||
|
});
|
||||||
|
|
||||||
|
QTRY_VERIFY(QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard));
|
||||||
|
QTRY_VERIFY(QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard)->hasText());
|
||||||
|
|
||||||
|
QSignalSpy dataChangedSpy(QGuiApplication::clipboard(), &QClipboard::dataChanged);
|
||||||
|
|
||||||
|
exec([&] {
|
||||||
|
auto *surface = xdgSurface()->m_surface;
|
||||||
|
keyboard()->sendLeave(surface);
|
||||||
|
});
|
||||||
|
|
||||||
|
QTRY_COMPARE(dataChangedSpy.count(), 1);
|
||||||
|
QVERIFY(!QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard)->hasText());
|
||||||
|
}
|
||||||
|
|
||||||
// The application should not crash if it attempts to start a drag operation
|
// The application should not crash if it attempts to start a drag operation
|
||||||
// when it doesn't have input focus (QTBUG-76368)
|
// when it doesn't have input focus (QTBUG-76368)
|
||||||
void tst_datadevicev1::dragWithoutFocus()
|
void tst_datadevicev1::dragWithoutFocus()
|
||||||
|
@ -65,7 +65,6 @@ public:
|
|||||||
~DataDevice() override;
|
~DataDevice() override;
|
||||||
void send_data_offer(::wl_resource *resource) = delete;
|
void send_data_offer(::wl_resource *resource) = delete;
|
||||||
DataOffer *sendDataOffer(::wl_client *client, const QStringList &mimeTypes = {});
|
DataOffer *sendDataOffer(::wl_client *client, const QStringList &mimeTypes = {});
|
||||||
DataOffer *sendDataOffer(const QStringList &mimeTypes = {});
|
|
||||||
|
|
||||||
void send_selection(::wl_resource *resource) = delete;
|
void send_selection(::wl_resource *resource) = delete;
|
||||||
void sendSelection(DataOffer *offer);
|
void sendSelection(DataOffer *offer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user