aboutsummaryrefslogtreecommitdiff
path: root/src/dbus
diff options
context:
space:
mode:
authornnyyxxxx <nnyyxxxx@protonmail.com>2025-03-06 17:24:44 -0500
committerIvan Molodetskikh <yalterz@gmail.com>2025-03-22 23:14:51 -0700
commit7210045b2a058c4be7bef6fd2059f337bf53b1ec (patch)
treeac80aff269a65c16b49e95fb164aef91c3547af8 /src/dbus
parented20822ce947198e4106698d7afffd0a832a7b3c (diff)
downloadniri-7210045b2a058c4be7bef6fd2059f337bf53b1ec.tar.gz
niri-7210045b2a058c4be7bef6fd2059f337bf53b1ec.tar.bz2
niri-7210045b2a058c4be7bef6fd2059f337bf53b1ec.zip
feat: support color picker functionality
chore: format code refactor: improve quality feat: implement gnomes PickColor method refactor: minor code extraction misc: fix reviews fixes
Diffstat (limited to 'src/dbus')
-rw-r--r--src/dbus/gnome_shell_screenshot.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/dbus/gnome_shell_screenshot.rs b/src/dbus/gnome_shell_screenshot.rs
index 742f72b2..dd762498 100644
--- a/src/dbus/gnome_shell_screenshot.rs
+++ b/src/dbus/gnome_shell_screenshot.rs
@@ -1,7 +1,10 @@
+use std::collections::HashMap;
use std::path::PathBuf;
+use niri_ipc::PickedColor;
use zbus::fdo::{self, RequestNameFlags};
use zbus::interface;
+use zbus::zvariant::OwnedValue;
use super::Start;
@@ -12,6 +15,7 @@ pub struct Screenshot {
pub enum ScreenshotToNiri {
TakeScreenshot { include_cursor: bool },
+ PickColor(async_channel::Sender<Option<PickedColor>>),
}
pub enum NiriToScreenshot {
@@ -47,6 +51,34 @@ impl Screenshot {
Ok((true, filename))
}
+
+ async fn pick_color(&self) -> fdo::Result<HashMap<String, OwnedValue>> {
+ let (tx, rx) = async_channel::bounded(1);
+ if let Err(err) = self.to_niri.send(ScreenshotToNiri::PickColor(tx)) {
+ warn!("error sending pick color message to niri: {err:?}");
+ return Err(fdo::Error::Failed("internal error".to_owned()));
+ }
+
+ let color = match rx.recv().await {
+ Ok(Some(color)) => color,
+ Ok(None) => {
+ return Err(fdo::Error::Failed("no color picked".to_owned()));
+ }
+ Err(err) => {
+ warn!("error receiving message from niri: {err:?}");
+ return Err(fdo::Error::Failed("internal error".to_owned()));
+ }
+ };
+
+ let mut result = HashMap::new();
+ let rgb_slice: &[f64] = &color.rgb;
+ result.insert(
+ "color".to_string(),
+ zbus::zvariant::Value::from(rgb_slice).try_into().unwrap(),
+ );
+
+ Ok(result)
+ }
}
impl Screenshot {