From 7c1ddad35c34dd3c832670880fe1db16827de400 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Wed, 24 Apr 2024 14:45:47 +0200 Subject: [PATCH] Clear screen and reset cursor on power command. --- src/main.rs | 12 +++++++++++- src/power.rs | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4fc5c05..6a0e368 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,6 +20,7 @@ use crossterm::{ }; use event::Event; use greetd_ipc::Request; +use power::PowerPostAction; use tokio::sync::RwLock; use tracing_appender::non_blocking::WorkerGuard; use tui::{backend::CrosstermBackend, Terminal}; @@ -100,12 +101,21 @@ async fn run() -> Result<(), Box> { } Some(Event::PowerCommand(command)) => { - power::run(&greeter, command).await; + if let PowerPostAction::ClearScreen = power::run(&greeter, command).await { + execute!(io::stdout(), LeaveAlternateScreen)?; + terminal.set_cursor(1, 1)?; + terminal.clear()?; + disable_raw_mode()?; + + break; + } } _ => {} } } + + Ok(()) } async fn exit(greeter: &mut Greeter, status: AuthStatus) { diff --git a/src/power.rs b/src/power.rs index 34d457f..5dbc690 100644 --- a/src/power.rs +++ b/src/power.rs @@ -60,7 +60,12 @@ pub async fn power(greeter: &mut Greeter, option: PowerOption) { } } -pub async fn run(greeter: &Arc>, mut command: Command) { +pub enum PowerPostAction { + Noop, + ClearScreen, +} + +pub async fn run(greeter: &Arc>, mut command: Command) -> PowerPostAction { tracing::info!("executing power command: {:?}", command); greeter.write().await.mode = Mode::Processing; @@ -85,6 +90,12 @@ pub async fn run(greeter: &Arc>, mut command: Command) { let mut greeter = greeter.write().await; - greeter.mode = mode; - greeter.message = message; + if message.is_none() { + PowerPostAction::ClearScreen + } else { + greeter.mode = mode; + greeter.message = message; + + PowerPostAction::Noop + } }