1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//! Collection of methods for interacting with `GtkSourceView`.

use gtk::glib;
use sourceview::prelude::*;

/// Setup the style scheme for the given buffer.
pub fn setup_style_scheme(buffer: &sourceview::Buffer) {
    let manager = adw::StyleManager::default();

    buffer.set_style_scheme(style_scheme().as_ref());

    manager.connect_dark_notify(glib::clone!(
        #[weak]
        buffer,
        move |_| {
            buffer.set_style_scheme(style_scheme().as_ref());
        }
    ));
}

/// Get the style scheme for the current appearance.
pub fn style_scheme() -> Option<sourceview::StyleScheme> {
    let manager = adw::StyleManager::default();
    let scheme_name = if manager.is_dark() {
        "Adwaita-dark"
    } else {
        "Adwaita"
    };

    sourceview::StyleSchemeManager::default().scheme(scheme_name)
}