diff options
| author | nnyyxxxx <nnyyxxxx@protonmail.com> | 2025-03-06 17:24:44 -0500 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-03-22 23:14:51 -0700 |
| commit | 7210045b2a058c4be7bef6fd2059f337bf53b1ec (patch) | |
| tree | ac80aff269a65c16b49e95fb164aef91c3547af8 /src/dbus | |
| parent | ed20822ce947198e4106698d7afffd0a832a7b3c (diff) | |
| download | niri-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.rs | 32 |
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 { |
