summaryrefslogtreecommitdiff
path: root/src/safe_x11/window.rs
diff options
context:
space:
mode:
authorMatias Linares <matiaslina@openmailbox.org>2016-01-27 18:49:01 -0300
committerMatias Linares <matiaslina@openmailbox.org>2016-01-27 18:49:01 -0300
commit6d54483c6f86f42405cf6db9d8fdb19e9397267b (patch)
tree4205f07a8732f60d9c6f6cf8544bd34102ff8221 /src/safe_x11/window.rs
parent5d7d8a19f6364dfb6e6583125ced3103d069f2b3 (diff)
downloaddotwm-6d54483c6f86f42405cf6db9d8fdb19e9397267b.tar.gz
Refactor resize sticky code
Diffstat (limited to 'src/safe_x11/window.rs')
-rw-r--r--src/safe_x11/window.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/safe_x11/window.rs b/src/safe_x11/window.rs
index c889dfc..6d1e54e 100644
--- a/src/safe_x11/window.rs
+++ b/src/safe_x11/window.rs
@@ -252,6 +252,56 @@ impl XWindow {
}
}
+ pub fn resize_sticky_left(&self, boundaries: &[i32]) {
+ let attrs = self.attributes();
+
+ if let Some(v) = boundaries.iter()
+ .skip_while(|&a| *a >= attrs.x + attrs.width)
+ .next() {
+ let diff = attrs.width - (*v - attrs.x);
+ if *v - attrs.x > 0 {
+ let _ = self.resize_to(attrs.width - diff, attrs.height);
+ }
+ }
+ }
+
+ pub fn resize_sticky_right(&self, boundaries: &[i32]) {
+ let attrs = self.attributes();
+ let win_bound = attrs.x + attrs.width;
+
+ if let Some(v) = boundaries.iter()
+ .skip_while(|&a| *a <= win_bound)
+ .next() {
+ let new_width = *v - attrs.x;
+ let _ = self.resize_to(new_width, attrs.height);
+ }
+ }
+
+ pub fn resize_sticky_up(&self, boundaries: &[i32]) {
+ let attrs = self.attributes();
+
+ if let Some(v) = boundaries.iter()
+ .skip_while(|&a| *a >= attrs.y + attrs.height)
+ .next() {
+ let diff = attrs.height - (*v - attrs.y);
+ if *v - attrs.y > 0 {
+ let _ = self.resize_to(attrs.width, attrs.height - diff);
+ }
+ }
+ }
+
+ pub fn resize_sticky_down(&self, boundaries: &[i32]) {
+ let attrs = self.attributes();
+ let win_bound = attrs.y + attrs.height;
+
+ if let Some(v) = boundaries.iter()
+ .skip_while(|&a| *a <= win_bound)
+ .next() {
+ let new_height = *v - attrs.y;
+ let _ = self.resize_to(attrs.width, new_height);
+ }
+ }
+
/// Raise the focus of the window and set a border.
pub fn focus(&self) {
let attrs = self.attributes();