|
@@ -3,6 +3,8 @@ use std::io::BufReader;
|
|
|
use std::process::{Command, Stdio};
|
|
|
use std::thread;
|
|
|
|
|
|
+use xcb::render::Color;
|
|
|
+
|
|
|
use ui::context::Context;
|
|
|
use ui::color;
|
|
|
use widgets::{Message, MessageSender, Update, Widget, WidgetParams};
|
|
@@ -26,20 +28,31 @@ impl Desktop {
|
|
|
pub struct Bspwm {
|
|
|
context: Context,
|
|
|
tx: MessageSender,
|
|
|
+ urgent_color: Color,
|
|
|
+ selected_color: Color,
|
|
|
desktops: Vec<Desktop>
|
|
|
}
|
|
|
|
|
|
pub fn bspwm(params: WidgetParams) -> Box<Widget> {
|
|
|
+ let urgent_color = params.config.lookup("urgent_color")
|
|
|
+ .and_then(|v| v.as_str())
|
|
|
+ .and_then(|s| color::from_str(s))
|
|
|
+ .unwrap_or(color::RED);
|
|
|
+ let selected_color = params.config.lookup("selected_color")
|
|
|
+ .and_then(|v| v.as_str())
|
|
|
+ .and_then(|s| color::from_str(s))
|
|
|
+ .unwrap_or(color::LIGHT_GREEN);
|
|
|
let widget = Bspwm {
|
|
|
context: params.context,
|
|
|
tx: params.tx,
|
|
|
- desktops: vec![]
|
|
|
+ desktops: vec![],
|
|
|
+ urgent_color: urgent_color,
|
|
|
+ selected_color: selected_color
|
|
|
};
|
|
|
Box::new(widget)
|
|
|
}
|
|
|
|
|
|
impl Bspwm {
|
|
|
-
|
|
|
fn parse_bspwm(&mut self, line: &str) {
|
|
|
let (kind, line) = line.split_at(1);
|
|
|
if kind != "W" { return };
|
|
@@ -90,10 +103,10 @@ impl Widget for Bspwm {
|
|
|
fn render(&mut self, x: u16, _w: u16) {
|
|
|
for desktop in self.desktops.iter() {
|
|
|
let color = if desktop.selected {
|
|
|
- color::LIGHT_GREEN
|
|
|
+ self.selected_color
|
|
|
}
|
|
|
else if desktop.urgent {
|
|
|
- color::RED
|
|
|
+ self.urgent_color
|
|
|
}
|
|
|
else {
|
|
|
self.context.default_bg_color
|