server: impl Deref(Mut) for ServerState to Inner coercion
This commit is contained in:
parent
fe28bcb880
commit
cbabd591a3
4 changed files with 121 additions and 240 deletions
|
|
@ -88,7 +88,8 @@ impl Event for SurfaceEvents {
|
|||
SurfaceEvents::Popup(event) => Self::popup_event(event, target, state),
|
||||
SurfaceEvents::FractionalScale(event) => match event {
|
||||
wp_fractional_scale_v1::Event::PreferredScale { scale } => {
|
||||
let entity = state.inner.world.entity(target).unwrap();
|
||||
let state = state.deref_mut();
|
||||
let entity = state.world.entity(target).unwrap();
|
||||
let factor = scale as f64 / 120.0;
|
||||
debug!(
|
||||
"{} scale factor: {}",
|
||||
|
|
@ -100,14 +101,14 @@ impl Event for SurfaceEvents {
|
|||
|
||||
if let Some(OnOutput(output)) = entity.get::<&OnOutput>().as_deref().copied() {
|
||||
if update_output_scale(
|
||||
state.inner.world.query_one(output).unwrap(),
|
||||
state.world.query_one(output).unwrap(),
|
||||
OutputScaleFactor::Fractional(factor),
|
||||
) {
|
||||
state.inner.updated_outputs.push(output);
|
||||
state.updated_outputs.push(output);
|
||||
}
|
||||
}
|
||||
if entity.has::<WindowData>() {
|
||||
update_surface_viewport(state.inner.world.query_one(target).unwrap());
|
||||
update_surface_viewport(state.world.query_one(target).unwrap());
|
||||
}
|
||||
}
|
||||
_ => unreachable!(),
|
||||
|
|
@ -416,18 +417,13 @@ pub(super) fn update_surface_viewport(
|
|||
impl Event for client::wl_buffer::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
// The only event from a buffer would be the release.
|
||||
state
|
||||
.inner
|
||||
.world
|
||||
.get::<&WlBuffer>(target)
|
||||
.unwrap()
|
||||
.release();
|
||||
state.world.get::<&WlBuffer>(target).unwrap().release();
|
||||
}
|
||||
}
|
||||
|
||||
impl Event for client::wl_seat::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state.inner.world.get::<&WlSeat>(target).unwrap();
|
||||
let server = state.world.get::<&WlSeat>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
Capabilities { |capabilities| convert_wenum(capabilities) },
|
||||
|
|
@ -457,12 +453,13 @@ impl Event for client::wl_pointer::Event {
|
|||
surface_x,
|
||||
surface_y,
|
||||
} => {
|
||||
let connection = &mut state.connection;
|
||||
let state = &mut state.inner;
|
||||
let mut cmd = CommandBuffer::new();
|
||||
let pending_enter = state.inner.world.remove_one::<PendingEnter>(target).ok();
|
||||
let server = state.inner.world.get::<&WlPointer>(target).unwrap();
|
||||
let pending_enter = state.world.remove_one::<PendingEnter>(target).ok();
|
||||
let server = state.world.get::<&WlPointer>(target).unwrap();
|
||||
let mut query = surface.data().copied().and_then(|e| {
|
||||
state
|
||||
.inner
|
||||
.world
|
||||
.query_one::<(&WlSurface, &SurfaceRole, &SurfaceScaleFactor, &x::Window)>(e)
|
||||
.ok()
|
||||
|
|
@ -479,9 +476,9 @@ impl Event for client::wl_pointer::Event {
|
|||
let mut do_enter = || {
|
||||
debug!("pointer entering {} ({serial} {})", surface.id(), scale.0);
|
||||
server.enter(serial, surface, surface_x * scale.0, surface_y * scale.0);
|
||||
state.connection.raise_to_top(*window);
|
||||
connection.raise_to_top(*window);
|
||||
if !surface_is_popup {
|
||||
state.inner.last_hovered = Some(*window);
|
||||
state.last_hovered = Some(*window);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -510,22 +507,21 @@ impl Event for client::wl_pointer::Event {
|
|||
}
|
||||
drop(query);
|
||||
drop(server);
|
||||
cmd.run_on(&mut state.inner.world);
|
||||
cmd.run_on(&mut state.world);
|
||||
}
|
||||
client::wl_pointer::Event::Leave { serial, surface } => {
|
||||
let _ = state.inner.world.remove_one::<PendingEnter>(target);
|
||||
let _ = state.world.remove_one::<PendingEnter>(target);
|
||||
if !surface.is_alive() {
|
||||
return;
|
||||
}
|
||||
debug!("leaving surface ({serial})");
|
||||
let _ = state.inner.world.remove_one::<PendingEnter>(target);
|
||||
let _ = state.world.remove_one::<PendingEnter>(target);
|
||||
if let Some(surface) = surface
|
||||
.data()
|
||||
.copied()
|
||||
.and_then(|key| state.inner.world.get::<&WlSurface>(key).ok())
|
||||
.and_then(|key| state.world.get::<&WlSurface>(key).ok())
|
||||
{
|
||||
state
|
||||
.inner
|
||||
.world
|
||||
.get::<&WlPointer>(target)
|
||||
.unwrap()
|
||||
|
|
@ -539,7 +535,7 @@ impl Event for client::wl_pointer::Event {
|
|||
surface_x,
|
||||
surface_y,
|
||||
} => {
|
||||
let pending_enter = state.inner.world.get::<&PendingEnter>(target).ok();
|
||||
let pending_enter = state.world.get::<&PendingEnter>(target).ok();
|
||||
match pending_enter.as_deref() {
|
||||
Some(p) => {
|
||||
let PendingEnter(client::wl_pointer::Event::Enter {
|
||||
|
|
@ -554,7 +550,7 @@ impl Event for client::wl_pointer::Event {
|
|||
if surface
|
||||
.data()
|
||||
.copied()
|
||||
.is_some_and(|key| state.inner.world.contains(key))
|
||||
.is_some_and(|key| state.world.contains(key))
|
||||
{
|
||||
trace!("resending enter ({serial}) before motion");
|
||||
let enter_event = client::wl_pointer::Event::Enter {
|
||||
|
|
@ -574,7 +570,6 @@ impl Event for client::wl_pointer::Event {
|
|||
None => {
|
||||
drop(pending_enter);
|
||||
let (server, scale) = state
|
||||
.inner
|
||||
.world
|
||||
.query_one_mut::<(&WlPointer, &SurfaceScaleFactor)>(target)
|
||||
.unwrap();
|
||||
|
|
@ -589,7 +584,7 @@ impl Event for client::wl_pointer::Event {
|
|||
}
|
||||
}
|
||||
_ => {
|
||||
let server = state.inner.world.get::<&WlPointer>(target).unwrap();
|
||||
let server = state.world.get::<&WlPointer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
Frame,
|
||||
|
|
@ -632,7 +627,7 @@ impl Event for client::wl_pointer::Event {
|
|||
|
||||
impl Event for client::wl_keyboard::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let data = state.world.entity(target).unwrap();
|
||||
let keyboard = data.get::<&WlKeyboard>().unwrap();
|
||||
match self {
|
||||
|
|
@ -723,7 +718,7 @@ impl Event for client::wl_keyboard::Event {
|
|||
|
||||
impl Event for client::wl_touch::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
match self {
|
||||
Self::Down {
|
||||
serial,
|
||||
|
|
@ -1039,7 +1034,7 @@ impl OutputEvent {
|
|||
y,
|
||||
state,
|
||||
);
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
|
||||
let (output, dimensions, xdg) = state
|
||||
.world
|
||||
|
|
@ -1081,7 +1076,7 @@ impl OutputEvent {
|
|||
height,
|
||||
refresh,
|
||||
} => {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let (output, dimensions) = state
|
||||
.world
|
||||
.query_one_mut::<(&WlOutput, &mut OutputDimensions)>(target)
|
||||
|
|
@ -1098,7 +1093,7 @@ impl OutputEvent {
|
|||
output.mode(convert_wenum(flags), width, height, refresh);
|
||||
}
|
||||
Event::Scale { factor } => {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
debug!(
|
||||
"{} scale: {factor}",
|
||||
state.world.get::<&WlOutput>(target).unwrap().id()
|
||||
|
|
@ -1114,7 +1109,7 @@ impl OutputEvent {
|
|||
}
|
||||
}
|
||||
Event::Name { name } => {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
state
|
||||
.world
|
||||
.get::<&WlOutput>(target)
|
||||
|
|
@ -1123,7 +1118,7 @@ impl OutputEvent {
|
|||
state.world.insert(target, (OutputName(name),)).unwrap();
|
||||
}
|
||||
_ => simple_event_shunt! {
|
||||
state.inner.world.get::<&WlOutput>(target).unwrap(),
|
||||
state.world.get::<&WlOutput>(target).unwrap(),
|
||||
event: client::wl_output::Event => [
|
||||
Description { description },
|
||||
Done
|
||||
|
|
@ -1142,7 +1137,7 @@ impl OutputEvent {
|
|||
match event {
|
||||
Event::LogicalPosition { x, y } => {
|
||||
update_output_offset(target, OutputDimensionsSource::Xdg, x, y, state);
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
state
|
||||
.world
|
||||
.get::<&XdgOutputServer>(target)
|
||||
|
|
@ -1153,7 +1148,7 @@ impl OutputEvent {
|
|||
);
|
||||
}
|
||||
Event::LogicalSize { .. } => {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let (xdg, dimensions) = state
|
||||
.world
|
||||
.query_one_mut::<(&XdgOutputServer, &OutputDimensions)>(target)
|
||||
|
|
@ -1165,7 +1160,7 @@ impl OutputEvent {
|
|||
}
|
||||
}
|
||||
_ => simple_event_shunt! {
|
||||
state.inner.world.get::<&XdgOutputServer>(target).unwrap(),
|
||||
state.world.get::<&XdgOutputServer>(target).unwrap(),
|
||||
event: zxdg_output_v1::Event => [
|
||||
Done,
|
||||
Name { name },
|
||||
|
|
@ -1178,7 +1173,7 @@ impl OutputEvent {
|
|||
|
||||
impl Event for wl_drm::client::wl_drm::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state.inner.world.get::<&WlDrmServer>(target).unwrap();
|
||||
let server = state.world.get::<&WlDrmServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
Device { name },
|
||||
|
|
@ -1193,7 +1188,6 @@ impl Event for wl_drm::client::wl_drm::Event {
|
|||
impl Event for c_dmabuf::zwp_linux_dmabuf_feedback_v1::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state
|
||||
.inner
|
||||
.world
|
||||
.get::<&s_dmabuf::zwp_linux_dmabuf_feedback_v1::ZwpLinuxDmabufFeedbackV1>(target)
|
||||
.unwrap();
|
||||
|
|
@ -1213,11 +1207,7 @@ impl Event for c_dmabuf::zwp_linux_dmabuf_feedback_v1::Event {
|
|||
|
||||
impl Event for zwp_relative_pointer_v1::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state
|
||||
.inner
|
||||
.world
|
||||
.get::<&RelativePointerServer>(target)
|
||||
.unwrap();
|
||||
let server = state.world.get::<&RelativePointerServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
RelativeMotion {
|
||||
|
|
@ -1235,11 +1225,7 @@ impl Event for zwp_relative_pointer_v1::Event {
|
|||
|
||||
impl Event for zwp_locked_pointer_v1::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state
|
||||
.inner
|
||||
.world
|
||||
.get::<&LockedPointerServer>(target)
|
||||
.unwrap();
|
||||
let server = state.world.get::<&LockedPointerServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
Locked,
|
||||
|
|
@ -1251,11 +1237,7 @@ impl Event for zwp_locked_pointer_v1::Event {
|
|||
|
||||
impl Event for zwp_confined_pointer_v1::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let server = state
|
||||
.inner
|
||||
.world
|
||||
.get::<&ConfinedPointerServer>(target)
|
||||
.unwrap();
|
||||
let server = state.world.get::<&ConfinedPointerServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
server, self => [
|
||||
Confined,
|
||||
|
|
@ -1267,7 +1249,7 @@ impl Event for zwp_confined_pointer_v1::Event {
|
|||
|
||||
impl Event for zwp_tablet_seat_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let seat = state.world.get::<&TabletSeatServer>(target).unwrap();
|
||||
match self {
|
||||
Self::TabletAdded { id } => {
|
||||
|
|
@ -1295,7 +1277,7 @@ impl Event for zwp_tablet_seat_v2::Event {
|
|||
|
||||
impl Event for zwp_tablet_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let tab = state.inner.world.get::<&TabletServer>(target).unwrap();
|
||||
let tab = state.world.get::<&TabletServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
tab, self => [
|
||||
Name { name },
|
||||
|
|
@ -1310,7 +1292,7 @@ impl Event for zwp_tablet_v2::Event {
|
|||
|
||||
impl Event for zwp_tablet_pad_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let pad = state.world.get::<&TabletPadServer>(target).unwrap();
|
||||
let s_surf;
|
||||
match self {
|
||||
|
|
@ -1364,7 +1346,7 @@ impl Event for zwp_tablet_pad_v2::Event {
|
|||
|
||||
impl Event for zwp_tablet_tool_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
match self {
|
||||
Self::ProximityIn {
|
||||
serial,
|
||||
|
|
@ -1465,7 +1447,7 @@ where
|
|||
|
||||
impl Event for zwp_tablet_pad_group_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let group = state.world.get::<&TabletPadGroupServer>(target).unwrap();
|
||||
match self {
|
||||
Self::Buttons { buttons } => group.buttons(buttons),
|
||||
|
|
@ -1494,7 +1476,7 @@ impl Event for zwp_tablet_pad_group_v2::Event {
|
|||
|
||||
impl Event for zwp_tablet_pad_ring_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let ring = state.world.get::<&TabletPadRingServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
ring, self => [
|
||||
|
|
@ -1509,7 +1491,7 @@ impl Event for zwp_tablet_pad_ring_v2::Event {
|
|||
|
||||
impl Event for zwp_tablet_pad_strip_v2::Event {
|
||||
fn handle<C: XConnection>(self, target: Entity, state: &mut ServerState<C>) {
|
||||
let state = state.inner_mut();
|
||||
let state = state.deref_mut();
|
||||
let strip = state.world.get::<&TabletPadStripServer>(target).unwrap();
|
||||
simple_event_shunt! {
|
||||
strip, self => [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue