1
0
Fork 0
forked from wry/wry

globals: interfere singleton-ness from the Singleton enum

This commit is contained in:
Julian Orth 2026-03-05 15:25:28 +01:00
parent 1e55d89cc9
commit 1ef1b5a607
68 changed files with 34 additions and 264 deletions

View file

@ -299,12 +299,17 @@ fn write_request_handler<W: Write>(
Ok(())
}
fn write_file<W: Write>(f: &mut W, file: &DirEntry) -> Result<()> {
fn write_file<W: Write>(
f: &mut W,
file: &DirEntry,
interface_names: &mut Vec<String>,
) -> Result<()> {
let file_name = file.file_name();
let file_name = std::str::from_utf8(file_name.as_bytes())?;
println!("cargo:rerun-if-changed=wire/{}", file_name);
let obj_name = file_name.split(".").next().unwrap();
let camel_obj_name = to_camel(obj_name);
interface_names.push(camel_obj_name.clone());
writeln!(f)?;
writeln!(f, "id!({}Id);", camel_obj_name)?;
writeln!(f)?;
@ -355,9 +360,21 @@ pub fn main() -> Result<()> {
files.push(file?);
}
files.sort_by_key(|f| f.file_name());
let mut interface_names = vec![];
for file in files {
write_file(&mut f, &file)
write_file(&mut f, &file, &mut interface_names)
.with_context(|| format!("While processing {}", file.path().display()))?;
}
writeln!(f)?;
writeln!(f, "#[doc(hidden)]")?;
writeln!(f, "#[expect(dead_code)]")?;
writeln!(f, "pub mod interface_singletons {{")?;
for interface in &interface_names {
writeln!(
f,
" pub const {interface}: Option<crate::globals::Singleton> = None;"
)?;
}
writeln!(f, "}}")?;
Ok(())
}

View file

@ -135,10 +135,10 @@ pub trait GlobalBase {
version: Version,
) -> Result<(), GlobalsError>;
fn interface(&self) -> Interface;
fn singleton(&self) -> Option<Singleton>;
}
pub trait Global: GlobalBase {
fn singleton(&self) -> bool;
fn version(&self) -> u32;
fn required_caps(&self) -> ClientCaps {
ClientCaps::none()
@ -168,6 +168,15 @@ macro_rules! singletons {
globals.singletons[Singleton::$name] = name;
)*
}
#[expect(non_upper_case_globals)]
pub mod interface_singletons {
pub use crate::wire::interface_singletons::*;
$(
pub const $name: Option<crate::globals::Singleton> = Some(crate::globals::Singleton::$name);
)*
}
};
}
@ -328,7 +337,7 @@ impl Globals {
macro_rules! emit {
($singleton:expr) => {
for global in globals.values() {
if global.singleton() == $singleton {
if global.singleton().is_some() == $singleton {
if global.exposed(&registry.client.state)
&& caps.contains(global.required_caps())
&& (xwayland || !global.xwayland_only())

View file

@ -283,10 +283,6 @@ global_base!(
);
impl Global for WpColorManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -79,10 +79,6 @@ global_base!(
);
impl Global for ExtForeignToplevelImageCaptureSourceManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -134,10 +134,6 @@ global_base!(
);
impl Global for ExtForeignToplevelListV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -140,10 +140,6 @@ global_base!(
);
impl Global for ExtIdleNotifierV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -142,10 +142,6 @@ global_base!(
);
impl Global for ExtImageCopyCaptureManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -76,10 +76,6 @@ global_base!(
);
impl Global for ExtOutputImageCaptureSourceManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -91,10 +91,6 @@ global_base!(
);
impl Global for ExtSessionLockManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -62,10 +62,6 @@ global_base!(
simple_add_global!(JayHeadManagerV1Global);
impl Global for JayHeadManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -102,10 +102,6 @@ global_base!(
);
impl Global for ExtDataControlManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -102,10 +102,6 @@ global_base!(
);
impl Global for ZwlrDataControlManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -95,10 +95,6 @@ global_base!(
);
impl Global for WlDataDeviceManagerGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
4
}

View file

@ -90,10 +90,6 @@ global_base!(
);
impl Global for ZwpPrimarySelectionDeviceManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -75,10 +75,6 @@ impl JayCompositorGlobal {
global_base!(JayCompositorGlobal, JayCompositor, JayCompositorError);
impl Global for JayCompositorGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
25
}

View file

@ -53,10 +53,6 @@ global_base!(
);
impl Global for JayDamageTrackingGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -54,10 +54,6 @@ global_base!(
);
impl Global for JayPopupExtManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -50,10 +50,6 @@ impl JayTrayV1Global {
global_base!(JayTrayV1Global, JayTrayV1, JayTrayManagerV1Error);
impl Global for JayTrayV1Global {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
1
}

View file

@ -53,10 +53,6 @@ global_base!(
);
impl Global for OrgKdeKwinServerDecorationManagerGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -79,10 +79,6 @@ impl WlCompositorRequestHandler for WlCompositor {
global_base!(WlCompositorGlobal, WlCompositor, WlCompositorError);
impl Global for WlCompositorGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
7
}

View file

@ -56,10 +56,6 @@ impl WlDrmGlobal {
global_base!(WlDrmGlobal, WlDrm, WlDrmError);
impl Global for WlDrmGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -42,10 +42,6 @@ global_base!(WlFixesGlobal, WlFixes, WlFixesError);
simple_add_global!(WlFixesGlobal);
impl Global for WlFixesGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -423,10 +423,6 @@ global_base!(WlOutputGlobal, WlOutput, WlOutputError);
const OUTPUT_VERSION: u32 = 4;
impl Global for WlOutputGlobal {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
OUTPUT_VERSION
}

View file

@ -38,10 +38,6 @@ impl RemovedOutputGlobal {
global_base!(RemovedOutputGlobal, WlOutput, RemovedOutputError);
impl Global for RemovedOutputGlobal {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
OUTPUT_VERSION
}

View file

@ -1599,10 +1599,6 @@ impl CursorUserOwner for WlSeatGlobal {
global_base!(WlSeatGlobal, WlSeat, WlSeatError);
impl Global for WlSeatGlobal {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
10
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for ExtTransientSeatManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for ZwpTabletManagerV2Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for ZwpInputMethodManagerV2Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for ZwpTextInputManagerV3Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -45,10 +45,6 @@ impl WpPointerWarpV1Global {
global_base!(WpPointerWarpV1Global, WpPointerWarpV1, WpPointerWarpV1Error);
impl Global for WpPointerWarpV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -313,10 +313,6 @@ global_base!(
);
impl Global for ZwpPointerConstraintsV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -56,10 +56,6 @@ global_base!(
);
impl Global for ZwpPointerGesturesV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
3
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for ZwpRelativePointerManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -53,10 +53,6 @@ global_base!(
);
impl Global for ZwpVirtualKeyboardManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -85,10 +85,6 @@ impl WlShmRequestHandler for WlShm {
global_base!(WlShmGlobal, WlShm, WlShmError);
impl Global for WlShmGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -70,10 +70,6 @@ impl WlSubcompositorRequestHandler for WlSubcompositor {
global_base!(WlSubcompositorGlobal, WlSubcompositor, WlSubcompositorError);
impl Global for WlSubcompositorGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -79,10 +79,6 @@ impl XwaylandShellV1RequestHandler for XwaylandShellV1 {
global_base!(XwaylandShellV1Global, XwaylandShellV1, XwaylandShellV1Error);
impl Global for XwaylandShellV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -253,10 +253,6 @@ global_base!(
);
impl Global for ZwlrOutputManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
4
}

View file

@ -211,10 +211,6 @@ global_base!(
);
impl Global for ExtWorkspaceManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -75,10 +75,6 @@ global_base!(
);
impl Global for WpAlphaModifierV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -126,10 +126,6 @@ global_base!(
);
impl Global for WpColorRepresentationManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -57,10 +57,6 @@ global_base!(
);
impl Global for WpCommitTimingManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -47,10 +47,6 @@ global_base!(
simple_add_global!(WpContentTypeManagerV1Global);
impl Global for WpContentTypeManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -47,10 +47,6 @@ global_base!(
simple_add_global!(WpCursorShapeManagerV1Global);
impl Global for WpCursorShapeManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -77,10 +77,6 @@ global_base!(
simple_add_global!(WpDrmLeaseDeviceV1Global);
impl Global for WpDrmLeaseDeviceV1Global {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
1
}

View file

@ -50,10 +50,6 @@ global_base!(
simple_add_global!(RemovedWpDrmLeaseDeviceV1Global);
impl Global for RemovedWpDrmLeaseDeviceV1Global {
fn singleton(&self) -> bool {
false
}
fn version(&self) -> u32 {
1
}

View file

@ -48,10 +48,6 @@ impl WpFifoManagerV1Global {
global_base!(WpFifoManagerV1Global, WpFifoManagerV1, WpFifoManagerV1Error);
impl Global for WpFifoManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -52,10 +52,6 @@ global_base!(
);
impl Global for WpFractionalScaleManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -59,10 +59,6 @@ global_base!(
);
impl Global for WpLinuxDrmSyncobjManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -44,10 +44,6 @@ impl WpPresentationGlobal {
global_base!(WpPresentationGlobal, WpPresentation, WpPresentationError);
impl Global for WpPresentationGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -45,10 +45,6 @@ global_base!(
);
impl Global for WpSecurityContextManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -45,10 +45,6 @@ global_base!(
);
impl Global for WpSinglePixelBufferManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -45,10 +45,6 @@ global_base!(
);
impl Global for WpTearingControlManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -41,10 +41,6 @@ impl WpViewporterGlobal {
global_base!(WpViewporterGlobal, WpViewporter, WpViewporterError);
impl Global for WpViewporterGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -44,10 +44,6 @@ global_base!(XdgActivationV1Global, XdgActivationV1, XdgActivationV1Error);
simple_add_global!(XdgActivationV1Global);
impl Global for XdgActivationV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -47,10 +47,6 @@ global_base!(
simple_add_global!(XdgToplevelDragManagerV1Global);
impl Global for XdgToplevelDragManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -46,10 +46,6 @@ global_base!(
);
impl Global for XdgToplevelTagManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -107,10 +107,6 @@ impl XdgWmBaseRequestHandler for XdgWmBase {
global_base!(XdgWmBaseGlobal, XdgWmBase, XdgWmBaseError);
impl Global for XdgWmBaseGlobal {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
7
}

View file

@ -43,10 +43,6 @@ impl XdgWmDialogV1Global {
global_base!(XdgWmDialogV1Global, XdgWmDialogV1, XdgWmDialogV1Error);
impl Global for XdgWmDialogV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -126,10 +126,6 @@ global_base!(
);
impl Global for ZwlrForeignToplevelManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
3
}

View file

@ -47,10 +47,6 @@ global_base!(
simple_add_global!(ZwlrGammaControlManagerV1Global);
impl Global for ZwlrGammaControlManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -102,10 +102,6 @@ global_base!(
);
impl Global for ZwlrLayerShellV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
5
}

View file

@ -51,10 +51,6 @@ global_base!(
simple_add_global!(ZwlrScreencopyManagerV1Global);
impl Global for ZwlrScreencopyManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
3
}

View file

@ -48,10 +48,6 @@ global_base!(
);
impl Global for ZwpIdleInhibitManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
1
}

View file

@ -65,10 +65,6 @@ global_base!(
);
impl Global for ZwpLinuxDmabufV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
5
}

View file

@ -45,10 +45,6 @@ global_base!(
);
impl Global for ZxdgDecorationManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
2
}

View file

@ -77,10 +77,6 @@ global_base!(
);
impl Global for ZxdgOutputManagerV1Global {
fn singleton(&self) -> bool {
true
}
fn version(&self) -> u32 {
3
}

View file

@ -87,6 +87,10 @@ macro_rules! global_base {
fn interface(&self) -> crate::object::Interface {
crate::wire::$ifname
}
fn singleton(&self) -> Option<crate::globals::Singleton> {
crate::globals::interface_singletons::$ifname
}
}
impl From<$ename> for crate::globals::GlobalError {