Skip to main content

fractal/utils/
sourceview.rs

1//! Collection of methods for interacting with `GtkSourceView`.
2
3use gtk::glib;
4use sourceview::prelude::*;
5
6/// Setup the style scheme for the given buffer.
7pub(crate) fn setup_style_scheme(buffer: &sourceview::Buffer) {
8    let manager = adw::StyleManager::default();
9
10    buffer.set_style_scheme(style_scheme().as_ref());
11
12    manager.connect_dark_notify(glib::clone!(
13        #[weak]
14        buffer,
15        move |_| {
16            buffer.set_style_scheme(style_scheme().as_ref());
17        }
18    ));
19}
20
21/// Get the style scheme for the current appearance.
22pub(crate) fn style_scheme() -> Option<sourceview::StyleScheme> {
23    let manager = adw::StyleManager::default();
24    let scheme_name = if manager.is_dark() {
25        "Adwaita-dark"
26    } else {
27        "Adwaita"
28    };
29
30    sourceview::StyleSchemeManager::default().scheme(scheme_name)
31}