aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-02-14 08:47:26 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-02-14 09:03:20 +0300
commit7816f20e6a3ddc4057aa1ab35742dc7f67453bc2 (patch)
tree3803a6ff8fe12d937f7cfbc32e5adaaf5627ad6f /src
parent0d3610416cb030e81251c4accf84353acf2059f0 (diff)
downloadniri-7816f20e6a3ddc4057aa1ab35742dc7f67453bc2.tar.gz
niri-7816f20e6a3ddc4057aa1ab35742dc7f67453bc2.tar.bz2
niri-7816f20e6a3ddc4057aa1ab35742dc7f67453bc2.zip
Implement ext-data-control
Diffstat (limited to 'src')
-rw-r--r--src/handlers/mod.rs25
-rw-r--r--src/niri.rs8
2 files changed, 26 insertions, 7 deletions
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 98cb87ea..334ab762 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -47,6 +47,9 @@ use smithay::wayland::selection::data_device::{
set_data_device_focus, ClientDndGrabHandler, DataDeviceHandler, DataDeviceState,
ServerDndGrabHandler,
};
+use smithay::wayland::selection::ext_data_control::{
+ DataControlHandler as ExtDataControlHandler, DataControlState as ExtDataControlState,
+};
use smithay::wayland::selection::primary_selection::{
set_primary_focus, PrimarySelectionHandler, PrimarySelectionState,
};
@@ -63,13 +66,13 @@ use smithay::wayland::xdg_activation::{
};
use smithay::{
delegate_cursor_shape, delegate_data_control, delegate_data_device, delegate_dmabuf,
- delegate_drm_lease, delegate_fractional_scale, delegate_idle_inhibit, delegate_idle_notify,
- delegate_input_method_manager, delegate_keyboard_shortcuts_inhibit, delegate_output,
- delegate_pointer_constraints, delegate_pointer_gestures, delegate_presentation,
- delegate_primary_selection, delegate_relative_pointer, delegate_seat,
- delegate_security_context, delegate_session_lock, delegate_single_pixel_buffer,
- delegate_tablet_manager, delegate_text_input_manager, delegate_viewporter,
- delegate_virtual_keyboard_manager, delegate_xdg_activation,
+ delegate_drm_lease, delegate_ext_data_control, delegate_fractional_scale,
+ delegate_idle_inhibit, delegate_idle_notify, delegate_input_method_manager,
+ delegate_keyboard_shortcuts_inhibit, delegate_output, delegate_pointer_constraints,
+ delegate_pointer_gestures, delegate_presentation, delegate_primary_selection,
+ delegate_relative_pointer, delegate_seat, delegate_security_context, delegate_session_lock,
+ delegate_single_pixel_buffer, delegate_tablet_manager, delegate_text_input_manager,
+ delegate_viewporter, delegate_virtual_keyboard_manager, delegate_xdg_activation,
};
pub use crate::handlers::xdg_shell::KdeDecorationsModeState;
@@ -396,6 +399,14 @@ impl WlrDataControlHandler for State {
delegate_data_control!(State);
+impl ExtDataControlHandler for State {
+ fn data_control_state(&self) -> &ExtDataControlState {
+ &self.niri.ext_data_control_state
+ }
+}
+
+delegate_ext_data_control!(State);
+
impl OutputHandler for State {
fn output_bound(&mut self, output: Output, wl_output: WlOutput) {
foreign_toplevel::on_output_bound(self, &output, &wl_output);
diff --git a/src/niri.rs b/src/niri.rs
index a1a400de..d0df938e 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -88,6 +88,7 @@ use smithay::wayland::presentation::PresentationState;
use smithay::wayland::relative_pointer::RelativePointerManagerState;
use smithay::wayland::security_context::SecurityContextState;
use smithay::wayland::selection::data_device::{set_data_device_selection, DataDeviceState};
+use smithay::wayland::selection::ext_data_control::DataControlState as ExtDataControlState;
use smithay::wayland::selection::primary_selection::PrimarySelectionState;
use smithay::wayland::selection::wlr_data_control::DataControlState as WlrDataControlState;
use smithay::wayland::session_lock::{LockSurface, SessionLockManagerState, SessionLocker};
@@ -272,6 +273,7 @@ pub struct Niri {
pub data_device_state: DataDeviceState,
pub primary_selection_state: PrimarySelectionState,
pub wlr_data_control_state: WlrDataControlState,
+ pub ext_data_control_state: ExtDataControlState,
pub popups: PopupManager,
pub popup_grab: Option<PopupGrabState>,
pub presentation_state: PresentationState,
@@ -1887,6 +1889,11 @@ impl Niri {
Some(&primary_selection_state),
client_is_unrestricted,
);
+ let ext_data_control_state = ExtDataControlState::new::<State, _>(
+ &display_handle,
+ Some(&primary_selection_state),
+ client_is_unrestricted,
+ );
let presentation_state =
PresentationState::new::<State>(&display_handle, Monotonic::ID as u32);
let security_context_state =
@@ -2101,6 +2108,7 @@ impl Niri {
data_device_state,
primary_selection_state,
wlr_data_control_state,
+ ext_data_control_state,
popups: PopupManager::default(),
popup_grab: None,
suppressed_keys: HashSet::new(),