cancelled by user case
This commit is contained in:
parent
39d80bddf7
commit
c681ad2648
2 changed files with 11 additions and 4 deletions
|
@ -46,7 +46,7 @@ impl Gui {
|
|||
Ok(ScreenCapture { image })
|
||||
}
|
||||
|
||||
pub fn interactive_select(&self, image: &ScreenCapture) -> Result<Rectangle> {
|
||||
pub fn interactive_select(&self, image: &ScreenCapture) -> Result<Option<Rectangle>> {
|
||||
let id = self.conn.generate_id();
|
||||
let screen = self.get_default_screen();
|
||||
let root_window = screen.root();
|
||||
|
@ -166,6 +166,7 @@ impl Gui {
|
|||
}
|
||||
|
||||
let mut state = State::default();
|
||||
let mut cancelled = false;
|
||||
|
||||
let redraw = |state: &State| {
|
||||
xcb_image::put(&self.conn, id, gc, &image.image, 0, 0);
|
||||
|
@ -185,6 +186,7 @@ impl Gui {
|
|||
xcb::KEY_RELEASE => {
|
||||
let key_evt = unsafe { xcb::cast_event::<xcb::KeyReleaseEvent>(&evt) };
|
||||
if key_evt.detail() == 9 {
|
||||
cancelled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -226,7 +228,7 @@ impl Gui {
|
|||
xproto::ungrab_keyboard(&self.conn, xcb::CURRENT_TIME).request_check()?;
|
||||
xproto::ungrab_pointer(&self.conn, xcb::CURRENT_TIME).request_check()?;
|
||||
|
||||
Ok(state.rect())
|
||||
Ok(if cancelled { None } else { Some(state.rect()) })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ extern crate anyhow;
|
|||
|
||||
mod gui;
|
||||
|
||||
use std::process;
|
||||
use std::path::PathBuf;
|
||||
|
||||
use anyhow::Result;
|
||||
|
@ -29,8 +30,12 @@ fn main() -> Result<()> {
|
|||
capture.save_to(&opt.outfile)?;
|
||||
}
|
||||
Region::Selection => {
|
||||
let rectangle = gui.interactive_select(&capture)?;
|
||||
if let Some(rectangle) = gui.interactive_select(&capture)? {
|
||||
capture.save_cropped_to(&opt.outfile, rectangle)?;
|
||||
} else {
|
||||
info!("Cancelled by user.");
|
||||
process::exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue