parent
64c70be855
commit
ed1cef792b
3 changed files with 111 additions and 1 deletions
|
|
@ -8,6 +8,7 @@ use wayland_protocols::{
|
||||||
wp::{
|
wp::{
|
||||||
fractional_scale::v1::client::wp_fractional_scale_v1::WpFractionalScaleV1,
|
fractional_scale::v1::client::wp_fractional_scale_v1::WpFractionalScaleV1,
|
||||||
linux_dmabuf::zv1::{client as c_dmabuf, server as s_dmabuf},
|
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::{
|
pointer_constraints::zv1::{
|
||||||
client::zwp_confined_pointer_v1::ZwpConfinedPointerV1 as ConfinedPointerClient,
|
client::zwp_confined_pointer_v1::ZwpConfinedPointerV1 as ConfinedPointerClient,
|
||||||
client::zwp_locked_pointer_v1::ZwpLockedPointerV1 as LockedPointerClient,
|
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)]
|
#[derive(Clone)]
|
||||||
pub(crate) struct ClientGlobalWrapper<T: Proxy>(Arc<OnceLock<T>>);
|
pub(crate) struct ClientGlobalWrapper<T: Proxy>(Arc<OnceLock<T>>);
|
||||||
impl<T: Proxy> std::ops::Deref for ClientGlobalWrapper<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,
|
s_tablet::zwp_tablet_manager_v2::ZwpTabletManagerV2,
|
||||||
c_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> {
|
impl<S: X11Selection> GlobalDispatch<WlSeat, Global> for InnerServerState<S> {
|
||||||
fn bind(
|
fn bind(
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ use wayland_protocols::{
|
||||||
wp::{
|
wp::{
|
||||||
fractional_scale::v1::client::wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1,
|
fractional_scale::v1::client::wp_fractional_scale_manager_v1::WpFractionalScaleManagerV1,
|
||||||
linux_dmabuf::zv1::{client as c_dmabuf, server as s_dmabuf},
|
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::{
|
pointer_constraints::zv1::{
|
||||||
client::{zwp_confined_pointer_v1, zwp_locked_pointer_v1},
|
client::{zwp_confined_pointer_v1, zwp_locked_pointer_v1},
|
||||||
server::zwp_pointer_constraints_v1::ZwpPointerConstraintsV1,
|
server::zwp_pointer_constraints_v1::ZwpPointerConstraintsV1,
|
||||||
|
|
@ -370,7 +371,8 @@ fn handle_globals<'a, S: X11Selection + 'static>(
|
||||||
s_dmabuf::zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1,
|
s_dmabuf::zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1,
|
||||||
ZxdgOutputManagerV1,
|
ZxdgOutputManagerV1,
|
||||||
ZwpPointerConstraintsV1,
|
ZwpPointerConstraintsV1,
|
||||||
ZwpTabletManagerV2
|
ZwpTabletManagerV2,
|
||||||
|
WpLinuxDrmSyncobjManagerV1
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ use std::os::fd::{AsFd, BorrowedFd, OwnedFd};
|
||||||
use std::os::unix::net::UnixStream;
|
use std::os::unix::net::UnixStream;
|
||||||
use std::sync::{Arc, Mutex, OnceLock};
|
use std::sync::{Arc, Mutex, OnceLock};
|
||||||
use std::time::Instant;
|
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_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_device_v1::ZwpPrimarySelectionDeviceV1;
|
||||||
use wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_offer_v1::ZwpPrimarySelectionOfferV1;
|
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, ());
|
dh.create_global::<State, ZwpPointerConstraintsV1, _>(1, ());
|
||||||
global_noop!(ZwpLinuxDmabufV1);
|
global_noop!(ZwpLinuxDmabufV1);
|
||||||
global_noop!(ZwpRelativePointerManagerV1);
|
global_noop!(ZwpRelativePointerManagerV1);
|
||||||
|
global_noop!(WpLinuxDrmSyncobjManagerV1);
|
||||||
|
|
||||||
struct HandlerData;
|
struct HandlerData;
|
||||||
impl ObjectData<State> for HandlerData {
|
impl ObjectData<State> for HandlerData {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue