diff --git a/src/ifs/head_management.rs b/src/ifs/head_management.rs index 24370bce..5757da6b 100644 --- a/src/ifs/head_management.rs +++ b/src/ifs/head_management.rs @@ -124,6 +124,7 @@ enum HeadOp { SetTransform(Transform), SetScale(Scale), SetMode(usize), + SetNonDesktopOverride(Option), } #[derive(Copy, Clone, Debug, Eq, PartialEq, Default)] diff --git a/src/ifs/head_management/head_management_macros.rs b/src/ifs/head_management/head_management_macros.rs index 4c1cb23c..9bef0657 100644 --- a/src/ifs/head_management/head_management_macros.rs +++ b/src/ifs/head_management/head_management_macros.rs @@ -403,4 +403,5 @@ declare_extensions! { tearing_state_v1: TearingStateV1, format_info_v1: FormatInfoV1, drm_color_space_info_v1: DrmColorSpaceInfoV1, + non_desktop_override_v1: NonDesktopOverrideV1, } diff --git a/src/ifs/head_management/jay_head_ext.rs b/src/ifs/head_management/jay_head_ext.rs index 40378563..f354121c 100644 --- a/src/ifs/head_management/jay_head_ext.rs +++ b/src/ifs/head_management/jay_head_ext.rs @@ -10,6 +10,7 @@ pub(super) mod jay_head_ext_format_info_v1; pub(super) mod jay_head_ext_mode_info_v1; pub(super) mod jay_head_ext_mode_setter_v1; pub(super) mod jay_head_ext_non_desktop_info_v1; +pub(super) mod jay_head_ext_non_desktop_override_v1; pub(super) mod jay_head_ext_physical_display_info_v1; pub(super) mod jay_head_ext_tearing_state_v1; pub(super) mod jay_head_ext_vrr_state_v1; diff --git a/src/ifs/head_management/jay_head_ext/jay_head_ext_non_desktop_override_v1.rs b/src/ifs/head_management/jay_head_ext/jay_head_ext_non_desktop_override_v1.rs new file mode 100644 index 00000000..9649294a --- /dev/null +++ b/src/ifs/head_management/jay_head_ext/jay_head_ext_non_desktop_override_v1.rs @@ -0,0 +1,52 @@ +use { + crate::{ + ifs::head_management::HeadOp, + wire::{ + jay_head_ext_non_desktop_override_v1::{ + DisableOverride, JayHeadExtNonDesktopOverrideV1RequestHandler, OverrideDesktop, + OverrideNonDesktop, + }, + jay_head_manager_ext_non_desktop_override_v1::JayHeadManagerExtNonDesktopOverrideV1RequestHandler, + }, + }, + std::rc::Rc, +}; + +impl_non_desktop_override_v1! { + version = 1, +} + +impl JayHeadManagerExtNonDesktopOverrideV1RequestHandler for MgrName { + type Error = ErrorName; + + mgr_common_req!(); +} + +impl JayHeadExtNonDesktopOverrideV1RequestHandler for HeadName { + type Error = ErrorName; + + head_common_req!(); + + fn disable_override(&self, _req: DisableOverride, _slf: &Rc) -> Result<(), Self::Error> { + self.common.push_op(HeadOp::SetNonDesktopOverride(None))?; + Ok(()) + } + + fn override_desktop(&self, _req: OverrideDesktop, _slf: &Rc) -> Result<(), Self::Error> { + self.common + .push_op(HeadOp::SetNonDesktopOverride(Some(false)))?; + Ok(()) + } + + fn override_non_desktop( + &self, + _req: OverrideNonDesktop, + _slf: &Rc, + ) -> Result<(), Self::Error> { + self.common + .push_op(HeadOp::SetNonDesktopOverride(Some(true)))?; + Ok(()) + } +} + +error!(); diff --git a/src/ifs/head_management/jay_head_manager_session_v1.rs b/src/ifs/head_management/jay_head_manager_session_v1.rs index b9f24195..932fab91 100644 --- a/src/ifs/head_management/jay_head_manager_session_v1.rs +++ b/src/ifs/head_management/jay_head_manager_session_v1.rs @@ -265,6 +265,7 @@ impl JayHeadManagerSessionV1 { let mut new = old; new.enabled = desired.connector_enabled; new.mode = desired.mode; + new.non_desktop_override = desired.override_non_desktop; if old == new { continue; } @@ -422,6 +423,13 @@ impl JayHeadManagerSessionV1RequestHandler for JayHeadManagerSessionV1 { to_send |= MODE_INFO; to_send |= COMPOSITOR_SPACE_INFO_SIZE; } + HeadOp::SetNonDesktopOverride(m) => { + state.override_non_desktop = m; + state.update_in_compositor_space(snapshot.wl_output); + to_send |= COMPOSITOR_SPACE_INFO_FULL; + to_send |= CORE_INFO; + to_send |= NON_DESKTOP_INFO; + } } } if to_send.contains(CORE_INFO) diff --git a/wire/jay_head_ext_non_desktop_override_v1.txt b/wire/jay_head_ext_non_desktop_override_v1.txt new file mode 100644 index 00000000..077cce30 --- /dev/null +++ b/wire/jay_head_ext_non_desktop_override_v1.txt @@ -0,0 +1,15 @@ +request destroy (destructor) { + +} + +request disable_override { + +} + +request override_desktop { + +} + +request override_non_desktop { + +} diff --git a/wire/jay_head_manager_ext_non_desktop_override_v1.txt b/wire/jay_head_manager_ext_non_desktop_override_v1.txt new file mode 100644 index 00000000..4ffa7dd4 --- /dev/null +++ b/wire/jay_head_manager_ext_non_desktop_override_v1.txt @@ -0,0 +1,7 @@ +request destroy (destructor) { + +} + +event head { + head: id(jay_head_ext_non_desktop_override_v1) (new), +}