Add support for inline styles and custom wm class per widget

This commit is contained in:
elkowar 2020-10-11 19:24:06 +02:00
parent 0fca322bde
commit 7d24de48b5
2 changed files with 9 additions and 2 deletions

View file

@ -86,8 +86,9 @@ impl App {
window_def.size = size.unwrap_or_else(|| window_def.size);
let window = gtk::Window::new(gtk::WindowType::Popup);
window.set_title("Eww");
window.set_wmclass("noswallow", "noswallow");
window.set_title(&format!("Eww - {}", window_name));
let wm_class_name = format!("eww-{}", window_name);
window.set_wmclass(&wm_class_name, &wm_class_name);
window.set_type_hint(gdk::WindowTypeHint::Dock);
window.set_position(gtk::WindowPosition::Center);
window.set_default_size(window_def.size.0, window_def.size.1);

View file

@ -31,6 +31,7 @@ pub(super) fn widget_to_gtk_widget(bargs: &mut BuilderArgs) -> Result<Option<gtk
/// attributes that apply to all widgets
pub(super) fn resolve_widget_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Widget) {
let css_provider = gtk::CssProvider::new();
resolve_block!(bargs, gtk_widget, {
prop(class: as_string) { gtk_widget.get_style_context().add_class(&class) },
prop(valign: as_string) { gtk_widget.set_valign(parse_align(&valign)?) },
@ -42,6 +43,11 @@ pub(super) fn resolve_widget_attrs(bargs: &mut BuilderArgs, gtk_widget: &gtk::Wi
// TODO how do i call this only after the widget has been mapped? this is actually an issue,....
if visible { gtk_widget.show(); } else { gtk_widget.hide(); }
},
prop(style: as_string) {
gtk_widget.reset_style();
css_provider.load_from_data(format!("* {{ {} }}", style).as_bytes())?;
gtk_widget.get_style_context().add_provider(&css_provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION)
}
});
}