|  | @@ -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
 |