Skip to content

Commit

Permalink
feat(ipc): support for injecting additional stylesheets
Browse files Browse the repository at this point in the history
  • Loading branch information
JakeStanger committed Jun 29, 2023
1 parent ded50cc commit c6319b7
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/ipc/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,11 @@ pub enum Command {
/// Variable key.
key: Box<str>,
},

/// Load an additional CSS stylesheet.
/// The sheet is automatically hot-reloaded.
LoadCss {
/// The path to the sheet.
path: PathBuf,
},
}
11 changes: 10 additions & 1 deletion src/ipc/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use super::Ipc;
use crate::bridge_channel::BridgeChannel;
use crate::ipc::{Command, Response};
use crate::ironvar::get_variable_manager;
use crate::style::load_css;
use crate::{read_lock, send_async, try_send, write_lock};
use color_eyre::{Report, Result};
use glib::Continue;
Expand Down Expand Up @@ -106,7 +107,7 @@ impl Ipc {
Command::Inspect => {
gtk::Window::set_interactive_debugging(true);
Response::Ok
},
}
Command::Set { key, value } => {
let variable_manager = get_variable_manager();
let mut variable_manager = write_lock!(variable_manager);
Expand All @@ -123,6 +124,14 @@ impl Ipc {
None => Response::error("Variable not found"),
}
}
Command::LoadCss { path } => {
if path.exists() {
load_css(path);
Response::Ok
} else {
Response::error("File not found")
}
}
Command::Ping => Response::Ok,
}
}
Expand Down
7 changes: 6 additions & 1 deletion src/style.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::send;
use color_eyre::{Help, Report};
use glib::Continue;
use gtk::ffi::GTK_STYLE_PROVIDER_PRIORITY_USER;
use gtk::prelude::CssProviderExt;
use gtk::{gdk, gio, CssProvider, StyleContext};
use notify::event::{DataChange, ModifyKind};
Expand Down Expand Up @@ -29,7 +30,11 @@ pub fn load_css(style_path: PathBuf) {
};

let screen = gdk::Screen::default().expect("Failed to get default GTK screen");
StyleContext::add_provider_for_screen(&screen, &provider, 800);
StyleContext::add_provider_for_screen(
&screen,
&provider,
GTK_STYLE_PROVIDER_PRIORITY_USER as u32,
);

let (tx, rx) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);

Expand Down

0 comments on commit c6319b7

Please sign in to comment.