Log errors in log even when a response-sender is listening, add error message when a monitor doesn't exist

This commit is contained in:
elkowar 2021-08-14 11:28:15 +02:00
parent 7647fcd2c4
commit 279785f420
No known key found for this signature in database
GPG key ID: E321AD71B1D1F27F
2 changed files with 27 additions and 18 deletions

View file

@ -1,9 +1,5 @@
use crate::{ use crate::{
config, config, daemon_response::DaemonResponseSender, display_backend, error_handling_ctx, eww_state, script_var_handler::*,
daemon_response::DaemonResponseSender,
display_backend, error_handling_ctx,
eww_state::{self},
script_var_handler::*,
EwwPaths, EwwPaths,
}; };
use anyhow::*; use anyhow::*;
@ -237,8 +233,8 @@ impl App {
root_widget.get_style_context().add_class(&window_name.to_string()); root_widget.get_style_context().add_class(&window_name.to_string());
let monitor_geometry = let monitor_geometry = get_monitor_geometry(monitor.or(window_def.monitor_number))?;
get_monitor_geometry(monitor.or(window_def.monitor_number).unwrap_or_else(get_default_monitor_index));
let eww_window = initialize_window(monitor_geometry, root_widget, window_def)?; let eww_window = initialize_window(monitor_geometry, root_widget, window_def)?;
self.open_windows.insert(window_name.clone(), eww_window); self.open_windows.insert(window_name.clone(), eww_window);
@ -254,7 +250,7 @@ impl App {
if let Err(err) = open_result { if let Err(err) = open_result {
self.failed_windows.insert(window_name.to_string()); self.failed_windows.insert(window_name.to_string());
Err(err) Err(err).with_context(|| format!("failed to open window `{}`", window_name))
} else { } else {
Ok(()) Ok(())
} }
@ -373,22 +369,26 @@ fn on_screen_changed(window: &gtk::Window, _old_screen: Option<&gdk::Screen>) {
window.set_visual(visual.as_ref()); window.set_visual(visual.as_ref());
} }
fn get_default_monitor_index() -> i32 { /// Get the monitor geometry of a given monitor number, or the default if none is given
fn get_monitor_geometry(n: Option<i32>) -> Result<gdk::Rectangle> {
#[allow(deprecated)] #[allow(deprecated)]
gdk::Display::get_default().expect("could not get default display").get_default_screen().get_primary_monitor() let display = gdk::Display::get_default().expect("could not get default display");
} let monitor = match n {
Some(n) => display.get_monitor(n).with_context(|| format!("Failed to get monitor with index {}", n))?,
/// Get the monitor geometry of a given monitor number None => display.get_primary_monitor().context("Failed to get primary monitor from GTK")?,
fn get_monitor_geometry(n: i32) -> gdk::Rectangle { };
#[allow(deprecated)] Ok(monitor.get_geometry())
gdk::Display::get_default().expect("could not get default display").get_default_screen().get_monitor_geometry(n)
} }
/// In case of an Err, send the error message to a sender. /// In case of an Err, send the error message to a sender.
fn respond_with_error<T>(sender: DaemonResponseSender, result: Result<T>) -> Result<()> { fn respond_with_error<T>(sender: DaemonResponseSender, result: Result<T>) -> Result<()> {
match result { match result {
Ok(_) => sender.send_success(String::new()), Ok(_) => sender.send_success(String::new()),
Err(e) => sender.send_failure(error_handling_ctx::format_error(&e)), Err(e) => {
let formatted = error_handling_ctx::format_error(&e);
println!("{}", formatted);
sender.send_failure(formatted)
},
} }
.context("sending response from main thread") .context("sending response from main thread")
} }

View file

@ -49,10 +49,19 @@ pub fn anyhow_err_to_diagnostic(err: &anyhow::Error) -> Diagnostic<usize> {
} else if let Some(err) = err.downcast_ref::<EvalError>() { } else if let Some(err) = err.downcast_ref::<EvalError>() {
err.to_diagnostic() err.to_diagnostic()
} else { } else {
gen_diagnostic!(err) gen_diagnostic!(format!("{:?}", err))
} }
} }
// pub fn print_diagnostic(diagnostic: codespan_reporting::diagnostic::Diagnostic<usize>) {
// match stringify_diagnostic(diagnostic.clone()) {
// Ok(diag) => {
// eprintln!("{}", diag);
//}
// Err(_) => {
// log::error!("{:?}", diagnostic);
//}
pub fn stringify_diagnostic(mut diagnostic: codespan_reporting::diagnostic::Diagnostic<usize>) -> anyhow::Result<String> { pub fn stringify_diagnostic(mut diagnostic: codespan_reporting::diagnostic::Diagnostic<usize>) -> anyhow::Result<String> {
diagnostic.labels.drain_filter(|label| Span(label.range.start, label.range.end, label.file_id).is_dummy()); diagnostic.labels.drain_filter(|label| Span(label.range.start, label.range.end, label.file_id).is_dummy());