graphics/fbbootlogd: Extract handle_handoff method

This commit is contained in:
bjorn3
2025-03-15 17:18:28 +01:00
parent b9d043f6e2
commit 9290cffa70
2 changed files with 34 additions and 33 deletions
+17 -32
View File
@@ -1,8 +1,7 @@
use std::io;
use graphics_ipc::v1::{Damage, V1GraphicsHandle};
use inputd::{ConsumerHandle, ConsumerHandleEvent};
use orbclient::Event;
use inputd::ConsumerHandle;
fn display_fd_map(display_handle: V1GraphicsHandle) -> io::Result<DisplayMap> {
let display_map = display_handle.map_display()?;
@@ -43,38 +42,24 @@ impl Display {
Ok(Self { input_handle, map })
}
pub fn handle_input_events(&mut self) {
let mut events = [Event::new(); 16];
loop {
match self
.input_handle
.read_events(&mut events)
.expect("fbbootlogd: error while reading events")
{
ConsumerHandleEvent::Events(&[]) => break,
ConsumerHandleEvent::Events(_) => {}
ConsumerHandleEvent::Handoff => {
eprintln!("fbbootlogd: handoff requested");
pub fn handle_handoff(&mut self) {
eprintln!("fbbootlogd: handoff requested");
let new_display_handle = match self.input_handle.open_display() {
Ok(display) => V1GraphicsHandle::from_file(display).unwrap(),
Err(err) => {
println!("fbbootlogd: No display present yet: {err}");
return;
}
};
let new_display_handle = match self.input_handle.open_display() {
Ok(display) => V1GraphicsHandle::from_file(display).unwrap(),
Err(err) => {
println!("fbbootlogd: No display present yet: {err}");
continue;
}
};
match display_fd_map(new_display_handle) {
Ok(ok) => {
self.map = Some(ok);
match display_fd_map(new_display_handle) {
Ok(ok) => {
self.map = Some(ok);
eprintln!("fbbootlogd: handoff finished");
}
Err(err) => {
eprintln!("fbbootlogd: failed to open display: {}", err);
}
}
}
eprintln!("fbbootlogd: handoff finished");
}
Err(err) => {
eprintln!("fbbootlogd: failed to open display: {}", err);
}
}
}
+17 -1
View File
@@ -10,7 +10,9 @@
use std::os::fd::AsRawFd;
use event::EventQueue;
use inputd::ConsumerHandleEvent;
use libredox::errno::EAGAIN;
use orbclient::Event;
use redox_scheme::{RequestKind, SignalBehavior, Socket};
use crate::scheme::FbbootlogScheme;
@@ -88,7 +90,21 @@ fn inner(daemon: redox_daemon::Daemon) -> ! {
}
}
Source::Input => {
scheme.display.handle_input_events();
let mut events = [Event::new(); 16];
loop {
match scheme
.display
.input_handle
.read_events(&mut events)
.expect("fbbootlogd: error while reading events")
{
ConsumerHandleEvent::Events(&[]) => break,
ConsumerHandleEvent::Events(_) => {}
ConsumerHandleEvent::Handoff => {
scheme.display.handle_handoff();
}
}
}
}
}
}