diff --git a/src/state.rs b/src/state.rs index eb081db2..2e900845 100644 --- a/src/state.rs +++ b/src/state.rs @@ -88,8 +88,10 @@ use smithay::{ seat::WaylandFocus, security_context::{SecurityContext, SecurityContextState}, selection::{ - data_device::DataDeviceState, primary_selection::PrimarySelectionState, - wlr_data_control::DataControlState, + data_device::DataDeviceState, + ext_data_control::DataControlState as ExtDataControlState, + primary_selection::PrimarySelectionState, + wlr_data_control::DataControlState as WlrDataControlState, }, session_lock::SessionLockManagerState, shell::{ @@ -234,7 +236,8 @@ pub struct Common { pub output_power_state: OutputPowerState, pub presentation_state: PresentationState, pub primary_selection_state: PrimarySelectionState, - pub data_control_state: DataControlState, + pub ext_data_control_state: ExtDataControlState, + pub wlr_data_control_state: WlrDataControlState, pub image_capture_source_state: ImageCaptureSourceState, pub screencopy_state: ScreencopyState, pub seat_state: SeatState, @@ -651,7 +654,12 @@ impl State { let idle_inhibit_manager_state = IdleInhibitManagerState::new::(dh); let idle_inhibiting_surfaces = HashSet::new(); - let data_control_state = DataControlState::new::( + let ext_data_control_state = ExtDataControlState::new::( + dh, + Some(&primary_selection_state), + client_not_sandboxed, + ); + let wlr_data_control_state = WlrDataControlState::new::( dh, Some(&primary_selection_state), client_not_sandboxed, @@ -737,7 +745,8 @@ impl State { overlap_notify_state, presentation_state, primary_selection_state, - data_control_state, + ext_data_control_state, + wlr_data_control_state, viewporter_state, wl_drm_state, kde_decoration_state, diff --git a/src/wayland/handlers/data_control/ext.rs b/src/wayland/handlers/data_control/ext.rs new file mode 100644 index 00000000..e7ab8529 --- /dev/null +++ b/src/wayland/handlers/data_control/ext.rs @@ -0,0 +1,13 @@ +use crate::state::State; +use smithay::{ + delegate_ext_data_control, + wayland::selection::ext_data_control::{DataControlHandler, DataControlState}, +}; + +impl DataControlHandler for State { + fn data_control_state(&mut self) -> &mut DataControlState { + &mut self.common.ext_data_control_state + } +} + +delegate_ext_data_control!(State); diff --git a/src/wayland/handlers/data_control/mod.rs b/src/wayland/handlers/data_control/mod.rs new file mode 100644 index 00000000..e72efaf3 --- /dev/null +++ b/src/wayland/handlers/data_control/mod.rs @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-only + +mod ext; +mod wlr; diff --git a/src/wayland/handlers/data_control.rs b/src/wayland/handlers/data_control/wlr.rs similarity index 87% rename from src/wayland/handlers/data_control.rs rename to src/wayland/handlers/data_control/wlr.rs index c17d9279..d02c722e 100644 --- a/src/wayland/handlers/data_control.rs +++ b/src/wayland/handlers/data_control/wlr.rs @@ -8,7 +8,7 @@ use smithay::{ impl DataControlHandler for State { fn data_control_state(&mut self) -> &mut DataControlState { - &mut self.common.data_control_state + &mut self.common.wlr_data_control_state } }