aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarvin Borner2019-05-27 22:36:12 +0200
committerMarvin Borner2019-05-27 22:36:12 +0200
commit89b269e7163ada4029bfd8841977d02642928abd (patch)
tree0103047b6f64ec51f634fbba8fc813fc999ff96b
parent5fe687fe2f15974fde399de7b9d0ee4a86edb0bc (diff)
Added window borders with event listeners
-rw-r--r--freedowm.py38
1 files changed, 30 insertions, 8 deletions
diff --git a/freedowm.py b/freedowm.py
index de8e03c..e2f5f97 100644
--- a/freedowm.py
+++ b/freedowm.py
@@ -1,21 +1,24 @@
#!/usr/bin/env python3.7
-import sys
from os import system
from Xlib import X, XK
from Xlib.display import Display
display = Display()
-num = display.get_display_name()
+root = display.screen().root
+colormap = display.screen().default_colormap
+
+# Listen for window changes
+root.change_attributes(event_mask=X.PropertyChangeMask)
# Keyboard listener
-display.screen().root.grab_key(X.AnyKey, X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync)
+root.grab_key(X.AnyKey, X.Mod4Mask, 1, X.GrabModeAsync, X.GrabModeAsync)
# Button (Mouse) listeners
-display.screen().root.grab_button(X.AnyButton, X.Mod4Mask, 1,
- X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask,
- X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)
+root.grab_button(X.AnyButton, X.Mod4Mask, 1,
+ X.ButtonPressMask | X.ButtonReleaseMask | X.PointerMotionMask,
+ X.GrabModeAsync, X.GrabModeAsync, X.NONE, X.NONE)
start = None
@@ -25,7 +28,23 @@ def is_key(key_name):
def window_focused():
- return event.child != X.NONE
+ return hasattr(event, 'child') and event.child != X.NONE
+
+
+def update_windows():
+ # Only update if the event has relevance (focus/title change)
+ # if event.type != X.PropertyNotify:
+ # return
+
+ for child in event.window.query_tree().children:
+ if child == X.NONE:
+ border_color = colormap.alloc_named_color("#000000").pixel
+ else:
+ border_color = colormap.alloc_named_color("#ffffff").pixel
+
+ child.configure(border_width=1)
+ child.change_attributes(None, border_pixel=border_color)
+ display.sync()
# Check for actions until exit
@@ -66,7 +85,10 @@ while 1:
# Exit window manager (MOD + C)
elif is_key("c"):
- sys.exit()
+ display.close()
elif event.type == X.ButtonRelease:
start = None
+
+ else:
+ update_windows()