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

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>() {
err.to_diagnostic()
} 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> {
diagnostic.labels.drain_filter(|label| Span(label.range.start, label.range.end, label.file_id).is_dummy());