Clear screen and reset cursor on power command.

This commit is contained in:
Antoine POPINEAU 2024-04-24 14:45:47 +02:00
parent 71cf19e233
commit 7c1ddad35c
No known key found for this signature in database
GPG Key ID: E8379674E92D25D2
2 changed files with 25 additions and 4 deletions

View File

@ -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<dyn Error>> {
}
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) {

View File

@ -60,7 +60,12 @@ pub async fn power(greeter: &mut Greeter, option: PowerOption) {
}
}
pub async fn run(greeter: &Arc<RwLock<Greeter>>, mut command: Command) {
pub enum PowerPostAction {
Noop,
ClearScreen,
}
pub async fn run(greeter: &Arc<RwLock<Greeter>>, 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<RwLock<Greeter>>, 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
}
}