diff --git a/src/backend/kms/socket.rs b/src/backend/kms/socket.rs index 377a9c6d..f8de7b63 100644 --- a/src/backend/kms/socket.rs +++ b/src/backend/kms/socket.rs @@ -14,12 +14,11 @@ use smithay::{ dmabuf::{DmabufFeedbackBuilder, DmabufGlobal}, socket::ListeningSocketSource, }, - xwayland::XWaylandClientData, }; use std::sync::Arc; use tracing::{info, warn}; -use crate::state::{ClientState, State}; +use crate::state::{advertised_node_for_client, ClientState, State}; #[derive(Debug)] pub struct Socket { @@ -48,17 +47,7 @@ impl State { ); // initialize globals - let filter = move |client: &Client| { - if let Some(normal_client) = client.get_data::() { - let dev_id = normal_client.advertised_drm_node.unwrap(); - return dev_id == render_node; - } - if let Some(xwayland_client) = client.get_data::() { - let dev_id = xwayland_client.user_data().get::().unwrap(); - return *dev_id == render_node; - } - false - }; + let filter = move |client: &Client| advertised_node_for_client(client) == Some(render_node); let feedback = DmabufFeedbackBuilder::new(render_node.dev_id(), formats.clone()) .build() diff --git a/src/state.rs b/src/state.rs index 5a0a30c9..42ab4c11 100644 --- a/src/state.rs +++ b/src/state.rs @@ -140,9 +140,8 @@ impl ClientData for ClientState { } } -pub fn advertised_node_for_surface(w: &WlSurface, dh: &DisplayHandle) -> Option { +pub fn advertised_node_for_client(client: &Client) -> Option { // Lets check the global drm-node the client got either through default-feedback or wl_drm - let client = dh.get_client(w.id()).ok()?; if let Some(normal_client) = client.get_data::() { return normal_client.advertised_drm_node.clone(); } @@ -153,6 +152,11 @@ pub fn advertised_node_for_surface(w: &WlSurface, dh: &DisplayHandle) -> Option< None } +pub fn advertised_node_for_surface(w: &WlSurface, dh: &DisplayHandle) -> Option { + let client = dh.get_client(w.id()).ok()?; + advertised_node_for_client(&client) +} + #[derive(Debug)] pub struct State { pub backend: BackendData,