diff options
author | Matias Linares <matiaslina@openmailbox.org> | 2015-11-15 19:07:57 -0300 |
---|---|---|
committer | Matias Linares <matiaslina@openmailbox.org> | 2015-11-15 19:07:57 -0300 |
commit | 12af9d3ec0d55c258d10e73e8fe6a99f3c9f05ff (patch) | |
tree | f7a22b899d714902a07da2f3d66cb0c4261bb6d6 | |
parent | 9eb8d5c3e10bda16c9edf5e8f430662a6c404093 (diff) | |
download | dotwm-12af9d3ec0d55c258d10e73e8fe6a99f3c9f05ff.tar.gz |
Move exec and add binding to the main.
The bindings don't need to be handled on the window manager
This would be useful for the client/server feature.
-rw-r--r-- | src/dotwm.rs | 41 | ||||
-rw-r--r-- | src/main.rs | 18 |
2 files changed, 17 insertions, 42 deletions
diff --git a/src/dotwm.rs b/src/dotwm.rs index 952fc8c..e94b17f 100644 --- a/src/dotwm.rs +++ b/src/dotwm.rs @@ -55,47 +55,6 @@ impl DotWM { window_list: vec![], } } - - /// Add a binding to the WM. - /// - /// # Example - /// - /// ``` - /// fn exec(_: &DotWM, _: xlib::XEvent, args: &[String]) -> bool { - /// if let Some(program) = args.first() { - /// let mut prog_args = vec![]; - /// for arg in args[1..].iter() { - /// prog_args.push(arg); - /// } - /// exec_cmd(program, prog_args.deref()).unwrap(); - /// } - /// true - /// } - /// - /// // ... - /// - /// dotwm.add_binding(keysym::XK_Return, xlib::Mod4Mask, exec, - /// &["xterm"]); - /// ``` - /* - pub fn add_binding(&mut self, key: u32, modifiers: u32, func: ExecFn, args: &[&str]) { - grab_key(self.display, key, modifiers, true, GrabModeAsync, GrabModeAsync); - let mut v = vec![]; - for arg in args { - v.push(arg.to_string()); - } - self.bindings.insert((key, modifiers), (func, v)); - } - */ - - /* - pub fn exec_func(&mut self, key: u32, modifiers: u32, ev: xlib::XEvent) { - if let Some(&(func, ref args)) = self.bindings.get(&(key, modifiers)) { - let v = args.clone(); - func(&self, ev, &v); - } - } - */ pub fn add_window(&mut self, w: xlib::Window) { self.unfocus_current_window(); diff --git a/src/main.rs b/src/main.rs index 1374446..02df6fd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,7 +23,9 @@ use x11::keysym; /// Defines a callback to call no certains events. pub type ExecFn = fn(&mut DotWM, XEvent, &[String]) -> bool; -type BindingHash = HashMap<(u32, u32), (ExecFn, Vec<String>)>; + +/// Map for keys => functions +pub type BindingHash = HashMap<(u32, u32), (ExecFn, Vec<String>)>; fn exec_func(wm: &mut DotWM, bindings: &mut BindingHash, key: u32, modifiers: u32, ev: xlib::XEvent) { if let Some(&(func, ref args)) = bindings.get(&(key, modifiers)) { @@ -72,6 +74,20 @@ fn quit_dotwm(_: &mut DotWM, _: xlib::XEvent, _: &[String]) -> bool { process::exit(0); } +/// Add a binding to the WM. +/// +/// # Example +/// +/// ``` +/// fn quit_dotwm(_: &mut DotWM, _: xlib::XEvent, _: &[String]) -> bool { +/// process::exit(0); +/// } +/// +/// // ... +/// +/// add_binding(keysym::XK_Return, xlib::Mod4Mask, exec, +/// &["xterm"]); +/// ``` fn add_binding(wm: &mut DotWM, bindings: &mut BindingHash, key: u32, modifiers: u32, func: ExecFn, args: &[&str]) { grab_key(wm.display, key, modifiers, true, GrabModeAsync, GrabModeAsync); |