[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.
This commit is contained in:
parent
f280423b92
commit
bc6eba6114
1 changed files with 9 additions and 15 deletions
|
@ -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);
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
// 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…
Reference in a new issue