Open roipoussiere opened 9 years ago
This is easily fixed by padding the desired title to the required length:
title += "\0" * (20 - len(title))
Maybe setWmName
could be changed to do this automatically:
diff --git a/ewmh/ewmh.py b/ewmh/ewmh.py
index 1302ae6..da149ef 100644
--- a/ewmh/ewmh.py
+++ b/ewmh/ewmh.py
@@ -133,6 +133,7 @@ class EWMH:
:param win: the window object
:param name: desired name"""
+ name += '\0' * (20 - len(name))
self._setProperty('_NET_WM_NAME', name, win)
def setWmVisibleName(self, win, name):
Ok, thanks, there is no error with your fix... But it doesn't rename the window.
I don't really understand why the length title needs to be fixed to 20 chars.
setWmName is not intended to rename windows.
According to pyewmh sources, setWmName() refers to the _NET_WM_NAME
proterty, which is, according to the EWMH specs, should rename a window:
The Client SHOULD set this to the title of the window in UTF-8 encoding. If set, the Window Manager should use this in preference to WM_NAME.
See X11’s documentation, D.5. The ClientMessage event's format:
char data.b[20] (read/write DATA : MAX 20 byte) If the data is smaller than 20 byte, all data other than available data must be 0.
Python’s Xlib implementation accordingly sets ClientMessage to use a fixed data size of 20:
class ClientMessage(rq.Event):
# ...
rq.FixedPropertyData('data', 20)
I would like to rename a window, but I can't. This is an example with getActiveWindow().
Logs: