in native/desktop-linux/src/linux/data_transfer.rs [121:154]
fn get_drag_offer_actions(&self, drag_offer: &DragOffer, x: f64, y: f64, window_id: WindowId) -> DragOfferMimetypeAndActions {
drag_offer.with_mime_types(|mime_types| {
debug!("Drop handler: {x}x{y}, mime_types={mime_types:?}");
let drag_and_drop_query_data = DragAndDropQueryData {
window_id,
location_in_window: (x, y).into(),
};
let target_info = (self.callbacks.query_drag_and_drop_target)(&drag_and_drop_query_data);
let supported_mime_with_actions = target_info
.supported_actions_per_mime
.as_slice()
.unwrap()
.iter()
.find(|&e| mime_types.iter().any(|s| s == e.supported_mime_type.as_str().unwrap()));
debug!("query_drag_and_drop_target -> {target_info:?}, supported_mime_with_actions={supported_mime_with_actions:?}");
if let Some(v) = supported_mime_with_actions {
DragOfferMimetypeAndActions {
mime_type: Some(v.supported_mime_type.as_str().unwrap().to_owned()),
supported_actions: v.supported_actions.into(),
preferred_action: v.preferred_action.into(),
}
} else {
DragOfferMimetypeAndActions {
mime_type: None,
supported_actions: DndAction::None,
preferred_action: DndAction::None,
}
}
})
}