aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--niri-config/src/lib.rs15
-rw-r--r--src/dbus/mutter_service_channel.rs1
-rw-r--r--src/handlers/mod.rs1
-rw-r--r--src/niri.rs10
4 files changed, 26 insertions, 1 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 11da976e..62c91b34 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -53,6 +53,8 @@ pub struct Config {
]
pub screenshot_path: Option<String>,
#[knuffel(child, default)]
+ pub clipboard: Clipboard,
+ #[knuffel(child, default)]
pub hotkey_overlay: HotkeyOverlay,
#[knuffel(child, default)]
pub animations: Animations,
@@ -785,6 +787,12 @@ pub struct HotkeyOverlay {
pub skip_at_startup: bool,
}
+#[derive(knuffel::Decode, Debug, Default, Clone, Copy, PartialEq, Eq)]
+pub struct Clipboard {
+ #[knuffel(child)]
+ pub disable_primary: bool,
+}
+
#[derive(knuffel::Decode, Debug, Clone, PartialEq)]
pub struct Animations {
#[knuffel(child)]
@@ -3432,6 +3440,10 @@ mod tests {
screenshot-path "~/Screenshots/screenshot.png"
+ clipboard {
+ disable-primary
+ }
+
hotkey-overlay {
skip-at-startup
}
@@ -3686,6 +3698,9 @@ mod tests {
hide_after_inactive_ms: Some(3000),
},
screenshot_path: Some(String::from("~/Screenshots/screenshot.png")),
+ clipboard: Clipboard {
+ disable_primary: true,
+ },
hotkey_overlay: HotkeyOverlay {
skip_at_startup: true,
},
diff --git a/src/dbus/mutter_service_channel.rs b/src/dbus/mutter_service_channel.rs
index d2be1c5f..6480aa1c 100644
--- a/src/dbus/mutter_service_channel.rs
+++ b/src/dbus/mutter_service_channel.rs
@@ -28,6 +28,7 @@ impl ServiceChannel {
compositor_state: Default::default(),
// Would be nice to thread config here but for now it's fine.
can_view_decoration_globals: false,
+ primary_selection_disabled: false,
restricted: false,
// FIXME: maybe you can get the PID from D-Bus somehow?
credentials_unknown: true,
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 8c1374d3..983c7067 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -475,6 +475,7 @@ impl SecurityContextHandler for State {
let data = Arc::new(ClientState {
compositor_state: Default::default(),
can_view_decoration_globals: config.prefer_no_csd,
+ primary_selection_disabled: config.clipboard.disable_primary,
restricted: true,
credentials_unknown: false,
});
diff --git a/src/niri.rs b/src/niri.rs
index dbbc9ff2..fdc915a7 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -1810,7 +1810,13 @@ impl Niri {
let idle_notifier_state = IdleNotifierState::new(&display_handle, event_loop.clone());
let idle_inhibit_manager_state = IdleInhibitManagerState::new::<State>(&display_handle);
let data_device_state = DataDeviceState::new::<State>(&display_handle);
- let primary_selection_state = PrimarySelectionState::new::<State>(&display_handle);
+ let primary_selection_state =
+ PrimarySelectionState::new_with_filter::<State, _>(&display_handle, |client| {
+ !client
+ .get_data::<ClientState>()
+ .unwrap()
+ .primary_selection_disabled
+ });
let data_control_state = DataControlState::new::<State, _>(
&display_handle,
Some(&primary_selection_state),
@@ -1930,6 +1936,7 @@ impl Niri {
let data = Arc::new(ClientState {
compositor_state: Default::default(),
can_view_decoration_globals: config.prefer_no_csd,
+ primary_selection_disabled: config.clipboard.disable_primary,
restricted: false,
credentials_unknown: false,
});
@@ -5167,6 +5174,7 @@ impl Niri {
pub struct ClientState {
pub compositor_state: CompositorClientState,
pub can_view_decoration_globals: bool,
+ pub primary_selection_disabled: bool,
/// Whether this client is denied from the restricted protocols such as security-context.
pub restricted: bool,
/// We cannot retrieve this client's socket credentials.