pub(crate) fn create_shell_surface<F>(
    shell: &Shell,
    surface: &WlSurface,
    callback: F
) -> Box<dyn ShellSurface>where
    F: FnMut(Event, DispatchData<'_>) + 'static,