[xwl] Create a new datasource on offer changes

Offers shoul be set on a source before data_device.set_selection. Doing
so afterwards appears to be against the spec and as such we may not pass
the update to wayland clients / klipper.
remotes/origin/work/x11-share-opengl-contexts
David Edmundson 5 years ago
parent f280423b92
commit bc6eba6114
  1. 26
      src/xwl/clipboard.cpp

@ -167,22 +167,16 @@ void Clipboard::x11OffersChanged(const QStringList &added, const QStringList &re
const Mimes offers = source->offers();
if (!offers.isEmpty()) {
if (!source->dataSource() || !removed.isEmpty()) {
// create new Wl DataSource if there is none or when types
// were removed (Wl Data Sources can only add types)
KWayland::Client::DataDeviceManager *dataDeviceManager =
waylandServer()->internalDataDeviceManager();
KWayland::Client::DataSource *dataSource =
dataDeviceManager->createDataSource(source);
// also offers directly the currently available types
source->setDataSource(dataSource);
DataBridge::self()->dataDevice()->setSelection(0, dataSource);
} else if (auto *dataSource = source->dataSource()) {
for (const QString &mime : added) {
dataSource->offer(mime);
}
}
// create new Wl DataSource if there is none or when types
// were removed (Wl Data Sources can only add types)
KWayland::Client::DataDeviceManager *dataDeviceManager =
waylandServer()->internalDataDeviceManager();
KWayland::Client::DataSource *dataSource =
dataDeviceManager->createDataSource(source);
// also offers directly the currently available types
source->setDataSource(dataSource);
DataBridge::self()->dataDevice()->setSelection(0, dataSource);
} else {
KWaylandServer::AbstractDataSource *currentSelection = waylandServer()->seat()->selection();
if (!ownsSelection(currentSelection)) {

Loading…
Cancel
Save