parent
64c70be855
commit
ed1cef792b
3 changed files with 111 additions and 1 deletions
|
|
@ -8,6 +8,7 @@ use wayland_protocols::{
|
|||
wp::{
|
||||
fractional_scale::v1::client::wp_fractional_scale_v1::WpFractionalScaleV1,
|
||||
linux_dmabuf::zv1::{client as c_dmabuf, server as s_dmabuf},
|
||||
linux_drm_syncobj::v1::{client as c_sync, server as s_sync},
|
||||
pointer_constraints::zv1::{
|
||||
client::zwp_confined_pointer_v1::ZwpConfinedPointerV1 as ConfinedPointerClient,
|
||||
client::zwp_locked_pointer_v1::ZwpLockedPointerV1 as LockedPointerClient,
|
||||
|
|
@ -1232,6 +1233,107 @@ impl<S: X11Selection> Dispatch<s_tablet::zwp_tablet_pad_strip_v2::ZwpTabletPadSt
|
|||
}
|
||||
}
|
||||
|
||||
impl<S: X11Selection>
|
||||
Dispatch<
|
||||
s_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
|
||||
ClientGlobalWrapper<c_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1>,
|
||||
> for InnerServerState<S>
|
||||
{
|
||||
fn request(
|
||||
state: &mut Self,
|
||||
_: &Client,
|
||||
_: &s_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
|
||||
request: <s_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1 as Resource>::Request,
|
||||
client: &ClientGlobalWrapper<
|
||||
c_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
|
||||
>,
|
||||
_: &DisplayHandle,
|
||||
data_init: &mut wayland_server::DataInit<'_, Self>,
|
||||
) {
|
||||
use s_sync::wp_linux_drm_syncobj_manager_v1::Request;
|
||||
match request {
|
||||
Request::GetSurface { id, surface } => {
|
||||
let c_surface = state
|
||||
.world
|
||||
.get::<&client::wl_surface::WlSurface>(surface.data().copied().unwrap())
|
||||
.unwrap();
|
||||
let client = client.get_surface(&c_surface, &state.qh, ());
|
||||
data_init.init(id, client);
|
||||
}
|
||||
Request::ImportTimeline { id, fd } => {
|
||||
let timeline = client.import_timeline(fd.as_fd(), &state.qh, ());
|
||||
data_init.init(id, timeline);
|
||||
}
|
||||
Request::Destroy => {
|
||||
client.destroy();
|
||||
}
|
||||
other => warn!("unhandled drm syncobj request: {other:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<S: X11Selection>
|
||||
Dispatch<
|
||||
s_sync::wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1,
|
||||
c_sync::wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1,
|
||||
> for InnerServerState<S>
|
||||
{
|
||||
fn request(
|
||||
_: &mut Self,
|
||||
_: &Client,
|
||||
_: &s_sync::wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1,
|
||||
request: <s_sync::wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1 as Resource>::Request,
|
||||
client: &c_sync::wp_linux_drm_syncobj_surface_v1::WpLinuxDrmSyncobjSurfaceV1,
|
||||
_: &DisplayHandle,
|
||||
_: &mut wayland_server::DataInit<'_, Self>,
|
||||
) {
|
||||
use s_sync::wp_linux_drm_syncobj_surface_v1::Request;
|
||||
match request {
|
||||
Request::SetAcquirePoint {
|
||||
timeline,
|
||||
point_hi,
|
||||
point_lo,
|
||||
} => {
|
||||
let c_timeline: &c_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1 = timeline.data().unwrap();
|
||||
client.set_acquire_point(c_timeline, point_hi, point_lo);
|
||||
}
|
||||
Request::SetReleasePoint {
|
||||
timeline,
|
||||
point_hi,
|
||||
point_lo,
|
||||
} => {
|
||||
let c_timeline: &c_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1 = timeline.data().unwrap();
|
||||
client.set_release_point(c_timeline, point_hi, point_lo);
|
||||
}
|
||||
Request::Destroy => client.destroy(),
|
||||
other => warn!("unhandled drm syncobj surface request: {other:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<S: X11Selection>
|
||||
Dispatch<
|
||||
s_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1,
|
||||
c_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1,
|
||||
> for InnerServerState<S>
|
||||
{
|
||||
fn request(
|
||||
_: &mut Self,
|
||||
_: &Client,
|
||||
_: &s_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1,
|
||||
request: <s_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1 as Resource>::Request,
|
||||
client: &c_sync::wp_linux_drm_syncobj_timeline_v1::WpLinuxDrmSyncobjTimelineV1,
|
||||
_: &DisplayHandle,
|
||||
_: &mut wayland_server::DataInit<'_, Self>,
|
||||
) {
|
||||
use s_sync::wp_linux_drm_syncobj_timeline_v1::Request;
|
||||
match request {
|
||||
Request::Destroy => client.destroy(),
|
||||
other => warn!("unhandled drm syncobj timeline request: {other:?}"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct ClientGlobalWrapper<T: Proxy>(Arc<OnceLock<T>>);
|
||||
impl<T: Proxy> std::ops::Deref for ClientGlobalWrapper<T> {
|
||||
|
|
@ -1322,6 +1424,10 @@ global_dispatch_no_events!(
|
|||
s_tablet::zwp_tablet_manager_v2::ZwpTabletManagerV2,
|
||||
c_tablet::zwp_tablet_manager_v2::ZwpTabletManagerV2
|
||||
);
|
||||
global_dispatch_no_events!(
|
||||
s_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
|
||||
c_sync::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1
|
||||
);
|
||||
|
||||
impl<S: X11Selection> GlobalDispatch<WlSeat, Global> for InnerServerState<S> {
|
||||
fn bind(
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ use wayland_protocols::{
|
|||
wp::{
|
||||
fractional_scale::v1::client::wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1,
|
||||
linux_dmabuf::zv1::{client as c_dmabuf, server as s_dmabuf},
|
||||
linux_drm_syncobj::v1::server::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1,
|
||||
pointer_constraints::zv1::{
|
||||
client::{zwp_confined_pointer_v1, zwp_locked_pointer_v1},
|
||||
server::zwp_pointer_constraints_v1::ZwpPointerConstraintsV1,
|
||||
|
|
@ -370,7 +371,8 @@ fn handle_globals<'a, S: X11Selection + 'static>(
|
|||
s_dmabuf::zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1,
|
||||
ZxdgOutputManagerV1,
|
||||
ZwpPointerConstraintsV1,
|
||||
ZwpTabletManagerV2
|
||||
ZwpTabletManagerV2,
|
||||
WpLinuxDrmSyncobjManagerV1
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use std::os::fd::{AsFd, BorrowedFd, OwnedFd};
|
|||
use std::os::unix::net::UnixStream;
|
||||
use std::sync::{Arc, Mutex, OnceLock};
|
||||
use std::time::Instant;
|
||||
use wayland_protocols::wp::linux_drm_syncobj::v1::server::wp_linux_drm_syncobj_manager_v1::WpLinuxDrmSyncobjManagerV1;
|
||||
use wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_device_manager_v1::ZwpPrimarySelectionDeviceManagerV1;
|
||||
use wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_device_v1::ZwpPrimarySelectionDeviceV1;
|
||||
use wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_offer_v1::ZwpPrimarySelectionOfferV1;
|
||||
|
|
@ -476,6 +477,7 @@ impl Server {
|
|||
dh.create_global::<State, ZwpPointerConstraintsV1, _>(1, ());
|
||||
global_noop!(ZwpLinuxDmabufV1);
|
||||
global_noop!(ZwpRelativePointerManagerV1);
|
||||
global_noop!(WpLinuxDrmSyncobjManagerV1);
|
||||
|
||||
struct HandlerData;
|
||||
impl ObjectData<State> for HandlerData {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue