Emit DataOfferInterface::dragAndDropActionsChanged() only if dnd actions change

With some apps, firefox specifically, it's possible to enter a dnd
positive feedback loop, e.g.

* kwin sends wl_data_offer::action event
* the app reacts to it and calls wl_data_offer::set_actions() with the
  same actions
* kwin re-sends the wl_data_offer::action event because
  DataOfferInterface::dragAndDropActionsChanged() has been emitted
* the app calls wl_data_offer::set_actions() again, and so on...

This should make D&D in Firefox more responsive.
This commit is contained in:
Vlad Zahorodnii 2021-10-27 15:40:20 +03:00
parent c45b69595f
commit 81e7c10a73

View file

@ -119,9 +119,11 @@ void DataOfferInterfacePrivate::data_offer_set_actions(Resource *resource, uint3
preferredAction = DataDeviceManagerInterface::DnDAction::Ask;
}
supportedDnDActions = supportedActions;
preferredDnDAction = preferredAction;
Q_EMIT q->dragAndDropActionsChanged();
if (supportedDnDActions != supportedActions || preferredDnDAction != preferredAction) {
supportedDnDActions = supportedActions;
preferredDnDAction = preferredAction;
Q_EMIT q->dragAndDropActionsChanged();
}
}
void DataOfferInterface::sendSourceActions()