fn get_drag_offer_actions()

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,
                }
            }
        })
    }