wayland/dmabuf: Allow global creation with a client filter
This commit is contained in:
parent
3842b78979
commit
bafc378181
|
@ -22,6 +22,7 @@
|
||||||
- Setting the parent of a toplevel surface is now possible with the `xdg::ToplevelSurface::set_parent` function.
|
- Setting the parent of a toplevel surface is now possible with the `xdg::ToplevelSurface::set_parent` function.
|
||||||
- Add support for the zxdg-foreign-v2 protocol.
|
- Add support for the zxdg-foreign-v2 protocol.
|
||||||
- Support for `xdg_wm_base` protocol version 3
|
- Support for `xdg_wm_base` protocol version 3
|
||||||
|
- Added the option to initialize the dmabuf global with a client filter
|
||||||
|
|
||||||
### Bugfixes
|
### Bugfixes
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ use wayland_protocols::unstable::linux_dmabuf::v1::server::{
|
||||||
},
|
},
|
||||||
zwp_linux_dmabuf_v1,
|
zwp_linux_dmabuf_v1,
|
||||||
};
|
};
|
||||||
use wayland_server::{protocol::wl_buffer, DispatchData, Display, Filter, Global, Main};
|
use wayland_server::{protocol::wl_buffer, Client, DispatchData, Display, Filter, Global, Main};
|
||||||
|
|
||||||
use slog::{o, trace};
|
use slog::{o, trace};
|
||||||
|
|
||||||
|
@ -63,9 +63,7 @@ use crate::backend::allocator::{
|
||||||
Format, Fourcc, Modifier,
|
Format, Fourcc, Modifier,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Handler trait for dmabuf validation
|
const DMABUF_VERSION: u32 = 3;
|
||||||
///
|
|
||||||
/// You need to provide an implementation of this trait
|
|
||||||
|
|
||||||
/// Initialize a dmabuf global.
|
/// Initialize a dmabuf global.
|
||||||
///
|
///
|
||||||
|
@ -77,6 +75,37 @@ pub fn init_dmabuf_global<F, L>(
|
||||||
handler: F,
|
handler: F,
|
||||||
logger: L,
|
logger: L,
|
||||||
) -> Global<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>
|
) -> Global<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>
|
||||||
|
where
|
||||||
|
L: Into<Option<::slog::Logger>>,
|
||||||
|
F: for<'a> FnMut(&Dmabuf, DispatchData<'a>) -> bool + 'static,
|
||||||
|
{
|
||||||
|
display.create_global(DMABUF_VERSION, dmabuf_global(formats, handler, logger))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Initialize a dmabuf global with a client filter.
|
||||||
|
///
|
||||||
|
/// You need to provide a vector of the supported formats, as well as a closure,
|
||||||
|
/// that will validate the parameters provided by the client and tests the import as a dmabuf.
|
||||||
|
pub fn init_dmabuf_global_with_filter<H, F, L>(
|
||||||
|
display: &mut Display,
|
||||||
|
formats: Vec<Format>,
|
||||||
|
handler: H,
|
||||||
|
filter: F,
|
||||||
|
logger: L,
|
||||||
|
) -> Global<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>
|
||||||
|
where
|
||||||
|
L: Into<Option<::slog::Logger>>,
|
||||||
|
H: for<'a> FnMut(&Dmabuf, DispatchData<'a>) -> bool + 'static,
|
||||||
|
F: FnMut(Client) -> bool + 'static,
|
||||||
|
{
|
||||||
|
display.create_global_with_filter(DMABUF_VERSION, dmabuf_global(formats, handler, logger), filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dmabuf_global<F, L>(
|
||||||
|
formats: Vec<Format>,
|
||||||
|
handler: F,
|
||||||
|
logger: L,
|
||||||
|
) -> Filter<(Main<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>, u32)>
|
||||||
where
|
where
|
||||||
L: Into<Option<::slog::Logger>>,
|
L: Into<Option<::slog::Logger>>,
|
||||||
F: for<'a> FnMut(&Dmabuf, DispatchData<'a>) -> bool + 'static,
|
F: for<'a> FnMut(&Dmabuf, DispatchData<'a>) -> bool + 'static,
|
||||||
|
@ -92,8 +121,6 @@ where
|
||||||
formats.len()
|
formats.len()
|
||||||
);
|
);
|
||||||
|
|
||||||
display.create_global(
|
|
||||||
3,
|
|
||||||
Filter::new(
|
Filter::new(
|
||||||
move |(dmabuf, version): (Main<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>, u32), _, _| {
|
move |(dmabuf, version): (Main<zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1>, u32), _, _| {
|
||||||
let dma_formats = formats.clone();
|
let dma_formats = formats.clone();
|
||||||
|
@ -137,9 +164,7 @@ where
|
||||||
height,
|
height,
|
||||||
format,
|
format,
|
||||||
flags,
|
flags,
|
||||||
} => {
|
} => handler.create_immed(&*params, buffer_id, width, height, format, flags, ddata),
|
||||||
handler.create_immed(&*params, buffer_id, width, height, format, flags, ddata)
|
|
||||||
}
|
|
||||||
_ => {}
|
_ => {}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -157,7 +182,6 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue