From 433ced3033148370c26d6012f67a484c88eeae0e Mon Sep 17 00:00:00 2001 From: Kalmat Date: Mon, 11 Sep 2023 20:56:03 +0200 Subject: [PATCH] Added getDisplays(), getRoots(), getScreenFromWindow(), getRootFromWindow(), getScreenFromRoot() functions. Added control for closed display connections, including defaultDisplay and related. Optimized performance in many functions and methods. Fixed and added WM_NAME as fallback for apps not setting _NET_WM_NAME property. --- AUTHORS.txt | 2 + dist/EWMHlib-0.0.1-py3-none-any.whl | Bin 45176 -> 48653 bytes src/ewmhlib/__init__.py | 16 +- src/ewmhlib/_ewmhlib.py | 191 +++++++++++++++--------- src/ewmhlib/_main.py | 11 +- src/ewmhlib/{Props.py => _props.py} | 4 + src/ewmhlib/{Structs.py => _structs.py} | 5 +- tests/test_ewmhlib.py | 5 +- 8 files changed, 152 insertions(+), 82 deletions(-) rename src/ewmhlib/{Props.py => _props.py} (98%) rename src/ewmhlib/{Structs.py => _structs.py} (97%) diff --git a/AUTHORS.txt b/AUTHORS.txt index 15499ed..4b1968d 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,3 +1,5 @@ EWMHlib authors, contributors and maintainers: Kalmat https://github.com/Kalmat +Mestrelion https://github.com/MestreLion +ReaperMantis https://github.com/ReaperMantis diff --git a/dist/EWMHlib-0.0.1-py3-none-any.whl b/dist/EWMHlib-0.0.1-py3-none-any.whl index 3c6a6e4155eb0d3f90a588a4f31926a375f0a3a5..5f1aa4feb2722c66eaf735c579dd533c7ccf3470 100644 GIT binary patch delta 43078 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�LlrFFKU`o#C2DN#aAgK-uY1G*3Z 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
  • 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 OK})ZENY?%r;{O5DBX|)2 delta 39463 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 diff --git a/src/ewmhlib/__init__.py b/src/ewmhlib/__init__.py index bf2ab5f..fe9794d 100644 --- a/src/ewmhlib/__init__.py +++ b/src/ewmhlib/__init__.py @@ -1,10 +1,15 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +import sys + __all__ = [ - "version", "displaysCount", "getDisplaysNames", "getDisplaysInfo", "getDisplayFromRoot", "getDisplayFromWindow", + "version", "displaysCount", "getDisplays", "getDisplaysInfo", "getRoots", + "defaultDisplay", "defaultScreen", "defaultRoot", "defaultEwmhRoot", + "getDisplayFromRoot", "getScreenFromRoot", + "getDisplayFromWindow", "getScreenFromWindow", "getRootFromWindow", "getProperty", "getPropertyValue", "changeProperty", "sendMessage", - "defaultDisplay", "defaultScreen", "defaultRoot", "defaultRootWindow", "RootWindow", "EwmhWindow", + "EwmhRoot", "EwmhWindow", "Props", "Structs" ] @@ -16,8 +21,11 @@ def version(numberOnly: bool = True): return ("" if numberOnly else "EWMHlib-")+__version__ -from ._main import (displaysCount, getDisplaysNames, getDisplaysInfo, getDisplayFromRoot, getDisplayFromWindow, +from ._main import (displaysCount, getDisplays, getDisplaysInfo, getRoots, + defaultDisplay, defaultScreen, defaultRoot, defaultEwmhRoot, + getDisplayFromRoot, getScreenFromRoot, + getDisplayFromWindow, getScreenFromWindow, getRootFromWindow, getProperty, getPropertyValue, changeProperty, sendMessage, - defaultDisplay, defaultScreen, defaultRoot, RootWindow, defaultRootWindow, EwmhWindow, + EwmhRoot, EwmhWindow, Props, Structs ) diff --git a/src/ewmhlib/_ewmhlib.py b/src/ewmhlib/_ewmhlib.py index 2ca21c9..69b907e 100644 --- a/src/ewmhlib/_ewmhlib.py +++ b/src/ewmhlib/_ewmhlib.py @@ -24,49 +24,68 @@ import Xlib.xobject from Xlib.xobject.drawable import Window as XWindow -from ewmhlib.Props import Root, DesktopLayout, Window, WindowType, State, StateAction, MoveResize, DataFormat, Mode, HintAction -from ewmhlib.Structs import DisplaysInfo, ScreensInfo, WmHints, Aspect, WmNormalHints, _XWindowAttributes +from ._props import Root, DesktopLayout, Window, WindowType, State, StateAction, MoveResize, DataFormat, Mode, HintAction +from ._structs import DisplaysInfo, ScreensInfo, WmHints, Aspect, WmNormalHints, _XWindowAttributes -defaultDisplay = Xlib.display.Display() -defaultScreen = defaultDisplay.screen() -defaultRoot = defaultScreen.root +class _Defaults: + def __init__(self): + self._display: Xlib.display.Display = Xlib.display.Display() + self._screen: Struct = self._display.screen() + self._root: XWindow = self._screen.root -def _getDisplaysCount() -> int: - count = 0 - files: List[str] = os.listdir("/tmp/.X11-unix") - for d in files: - if d.startswith("X"): - name: str = ":" + d[1:] - try: - display: Xlib.display.Display = Xlib.display.Display(name) - display.close() - count += 1 - except: - pass - return count - - -displaysCount = _getDisplaysCount() - - -def getDisplaysNames() -> List[str]: - displays: List[str] = [] - if displaysCount > 1: + def _checkDisplay(self): + try: + # Check if display connection has not been closed elsewhere + _ = self._display.get_display_name() + except: + self._display = Xlib.display.Display() + self._screen = self._display.screen() + self._root = self._screen.root + + def getDefaultDisplay(self) -> Xlib.display.Display: + self._checkDisplay() + return self._display + + def getDefaultScreen(self) -> Struct: + self._checkDisplay() + return self._screen + + def getDefaultRoot(self) -> XWindow: + self._checkDisplay() + return self._root +_myDefaults: _Defaults = _Defaults() +defaultDisplay: Callable[[], Xlib.display.Display] = _myDefaults.getDefaultDisplay +defaultScreen: Callable[[], Struct] = _myDefaults.getDefaultScreen +defaultRoot: Callable[[], XWindow] = _myDefaults.getDefaultRoot + + +def getDisplays() -> List[Xlib.display.Display]: + global _displays + for display in _displays: + try: + # Check if display connection has not been closed elsewhere + display.get_display_name() + except: + _displays = [] + break + if not _displays and os.environ['XDG_SESSION_TYPE'].lower() != "wayland": + # Wayland adds a "fake" display (Typically ":1") that freezes when trying to get a connection. Using default + # Thanks to SamuMazzi - https://github.com/SamuMazzi for pointing out this issue files: List[str] = os.listdir("/tmp/.X11-unix") for d in files: if d.startswith("X"): name: str = ":" + d[1:] try: - display: Xlib.display.Display = Xlib.display.Display(name) - display.close() - displays.append(name) + _displays.append(Xlib.display.Display(name)) except: pass - else: - displays.append(defaultDisplay.get_display_name()) - return displays + if not _displays: + _displays = [defaultDisplay()] + return _displays +_displays: List[Xlib.display.Display] = [] +displaysCount: int = len(getDisplays()) def getDisplaysInfo() -> dict[str, DisplaysInfo]: @@ -75,10 +94,11 @@ def getDisplaysInfo() -> dict[str, DisplaysInfo]: Returned dictionary has the following structure: - "name": display name (use Xlib.display.Display(name) to get a connection) + "display": display connection to access all display features and protocols + "name": display name "is_default": ''True'' if it's the default display, ''False'' otherwise "screens": List of sub-dict containing all screens owned by the display - "scrSeq": number of the screen (as per display.screen(M)) + "scrSeq": number of the screen (as per display.screen(scrSeq)) "screen": Struct containing all screen info "root": root window (Xlib Window) which belongs to the screen "is_default": ''True'' if it's the default screen/root, ''False'' otherwise @@ -86,15 +106,15 @@ def getDisplaysInfo() -> dict[str, DisplaysInfo]: :return: dict with all displays, screens and roots info """ dspInfo: dict[str, DisplaysInfo] = {} - for name in getDisplaysNames(): - display = Xlib.display.Display(name) + for display in getDisplays(): + name = display.get_display_name() screens: List[ScreensInfo] = [] for s in range(display.screen_count()): try: screen: Struct = display.screen(s) screenInfo: ScreensInfo = { "screen_number": str(s), - "is_default": (screen.root.id == defaultRoot.id), + "is_default": (screen.root.id == defaultRoot().id), "screen": screen, "root": screen.root } @@ -102,11 +122,11 @@ def getDisplaysInfo() -> dict[str, DisplaysInfo]: except: pass displayInfo: DisplaysInfo = { + "display": display, "name": name, - "is_default": (display.get_display_name() == defaultDisplay.get_display_name()), + "is_default": (name == defaultDisplay().get_display_name()), "screens": screens } - display.close() dspInfo[name] = displayInfo return dspInfo @@ -122,9 +142,8 @@ def getDisplayFromWindow(winId: int) -> Tuple[Xlib.display.Display, Struct, XWin # if res and hasattr(attr, "root"): # return getDisplayFromRoot(attr.root) # else: - if displaysCount > 1 or defaultDisplay.screen_count() > 1: - for name in getDisplaysNames(): - display = Xlib.display.Display(name) + if displaysCount > 1 or defaultDisplay().screen_count() > 1: + for display in getDisplays(): atom: int = display.get_atom(Root.CLIENT_LIST) for s in range(display.screen_count()): try: @@ -135,8 +154,9 @@ def getDisplayFromWindow(winId: int) -> Tuple[Xlib.display.Display, Struct, XWin return display, scr, r except: pass - display.close() - return defaultDisplay, defaultScreen, defaultRoot + return defaultDisplay(), defaultScreen(), defaultRoot() +getScreenFromWindow = getDisplayFromWindow +getRootFromWindow = getDisplayFromWindow def getDisplayFromRoot(rootId: Optional[int]) -> Tuple[Xlib.display.Display, Struct, XWindow]: @@ -147,9 +167,8 @@ def getDisplayFromRoot(rootId: Optional[int]) -> Tuple[Xlib.display.Display, Str :param rootId: id of the target root :return: tuple containing display connection, screen struct and root window """ - if rootId and rootId != defaultRoot.id and (displaysCount > 1 or defaultDisplay.screen_count() > 1): - for name in getDisplaysNames(): - display = Xlib.display.Display(name) + if rootId and rootId != defaultRoot().id and (displaysCount > 1 or defaultDisplay().screen_count() > 1): + for display in getDisplays(): for s in range(display.screen_count()): try: scr: Struct = display.screen(s) @@ -158,13 +177,32 @@ def getDisplayFromRoot(rootId: Optional[int]) -> Tuple[Xlib.display.Display, Str return display, scr, r except: pass - display.close() - return defaultDisplay, defaultScreen, defaultRoot + return defaultDisplay(), defaultScreen(), defaultRoot() +getScreenFromRoot = getDisplayFromRoot + + +def _getRoots() -> List[XWindow]: + roots: List[XWindow] = [] + for display in getDisplays(): + for i in range(display.screen_count()): + try: + screen = display.screen(i) + roots.append(screen.root) + except: + pass + if not roots: + roots.append(defaultRoot()) + return roots + + +def getRoots() -> List[XWindow]: + return _roots +_roots: List[XWindow] = _getRoots() def getProperty(window: XWindow, prop: Union[str, int], prop_type: int = Xlib.X.AnyPropertyType, - display: Xlib.display.Display = defaultDisplay) -> Optional[Xlib.protocol.request.GetProperty]: + display: Xlib.display.Display = defaultDisplay()) -> Optional[Xlib.protocol.request.GetProperty]: """ Get given window/root property @@ -183,7 +221,7 @@ def getProperty(window: XWindow, prop: Union[str, int], def changeProperty(window: XWindow, prop: Union[str, int], data: Union[List[int], str], prop_type: int = Xlib.Xatom.ATOM, propMode: int = Xlib.X.PropModeReplace, - display: Xlib.display.Display = defaultDisplay): + display: Xlib.display.Display = defaultDisplay()): """ Change given window/root property @@ -210,7 +248,7 @@ def changeProperty(window: XWindow, prop: Union[str, int], data: Union[List[int] def sendMessage(winId: int, prop: Union[str, int], data: Union[List[int], str], - display: Xlib.display.Display = defaultDisplay, root: XWindow = defaultRoot): + display: Xlib.display.Display = defaultDisplay(), root: XWindow = defaultRoot()): """ Send Client Message to given window/root @@ -238,7 +276,7 @@ def sendMessage(winId: int, prop: Union[str, int], data: Union[List[int], str], def getPropertyValue(prop: Optional[Xlib.protocol.request.GetProperty], text: bool = False, - display: Xlib.display.Display = defaultDisplay) -> Optional[Union[List[int], List[str]]]: + display: Xlib.display.Display = defaultDisplay()) -> Optional[Union[List[int], List[str]]]: """ Extract data from retrieved window/root property @@ -266,11 +304,11 @@ def getPropertyValue(prop: Optional[Xlib.protocol.request.GetProperty], text: bo return None -class RootWindow: +class EwmhRoot: """ Base class to access root features. - To get a RootWindow object it's necessary to pass the target root id. This can be achieved in several ways: + To get a EwmhRoot object it's necessary to pass the target root id. This can be achieved in several ways: - You already have a root, so pass root.id param @@ -292,7 +330,7 @@ class RootWindow: - id: root window id - WM_PROTOCOLS messages (PING/SYNC) are accessible using wmProtocols subclass (RootWindow.wmProtocols.Ping/Sync) + WM_PROTOCOLS messages (PING/SYNC) are accessible using wmProtocols subclass (EwmhRoot.wmProtocols.Ping/Sync) """ def __init__(self, root: Optional[Union[XWindow, int]] = None): @@ -601,7 +639,7 @@ def getDesktopLayout(self) -> Optional[List[int]]: def setDesktopLayout(self, orientation: Union[int, DesktopLayout], columns: int, rows: int, starting_corner: Union[int, DesktopLayout]): """ - Values (as per RootWindow.DesktopLayout): + Values (as per EwmhRoot.DesktopLayout): _NET_WM_ORIENTATION_HORZ 0 _NET_WM_ORIENTATION_VERT 1 @@ -887,7 +925,7 @@ def requestFrameExtents(self, winId: int): class _WmProtocols: # Is all this necessary/interesting? - # Besides, should they be included within RootWindow class or outside? + # Besides, should they be included within EwmhRoot class or outside? def __init__(self, display: Xlib.display.Display, root: XWindow): self._display = display @@ -968,7 +1006,7 @@ def sync(self, winId: int, lowValue: int, highValue: int): self._display, self._root) -defaultRootWindow = RootWindow() +defaultEwmhRoot = EwmhRoot() class EwmhWindow: @@ -991,7 +1029,7 @@ class EwmhWindow: - root: root X Window object - - rootWindow: object to access RootWindow methods + - EwmhRoot: object to access EwmhRoot methods - xWindow: X Window object associated to current window @@ -1013,7 +1051,7 @@ def __init__(self, window: Union[int, XWindow]): self.xWindow = self.display.create_resource_object('window', self.id) else: raise ValueError - self.rootWindow: RootWindow = defaultRootWindow if self.root.id == defaultRoot.id else RootWindow(self.root) + self.ewmhRoot: EwmhRoot = defaultEwmhRoot if self.root.id == defaultRoot().id else EwmhRoot(self.root) self.extensions = _Extensions(self.id, self.display, self.root) self._currDesktop = os.environ['XDG_CURRENT_DESKTOP'].lower() @@ -1049,7 +1087,7 @@ def changeProperty(self, prop: Union[str, int], data: Union[List[int], str], :param prop: Property/atom of the event in int or str format :param data: Data related to the event. It can be a string or a list of up to 5 integers :param prop_type: Property type (e.g. X.AnyPropertyType or Xatom.STRING) - :param propMode: whether to Replace/Append/Prepend (Mode.*) the property in relation to the rest of + :param propMode: whether to Replace/Append/Prepend (Mode.*) the property in respect to the rest of existing properties """ changeProperty(self.xWindow, prop, data, prop_type, propMode, self.display) @@ -1064,7 +1102,17 @@ def getName(self) -> Optional[str]: :return: name of the window as str or None (nothing obtained) """ - return self.xWindow.get_wm_name() + # Xlib's get_wm_name() returns empty strings in some cases + # Thanks to cedricscheepers - https://github.com/cedricscheepers for pointing out this issue + ret: Optional[Xlib.protocol.request.GetProperty] = self.getProperty(Window.NAME) + res: Optional[Union[List[int], List[str]]] = getPropertyValue(ret, display=self.display) + if not res or (res and not res[0]): + # Thanks to ReaperMantis - https://github.com/ReaperMantis for finding this additional solution! + ret = self.getProperty(Window.LEGACY_NAME) + res = getPropertyValue(ret, display=self.display) + if res: + return str(res[0]) + return None def setName(self, name: str): """ @@ -1072,7 +1120,7 @@ def setName(self, name: str): :param name: new name as string """ - self.xWindow.set_wm_name(name) + self.changeProperty(Window.NAME, name) def getVisibleName(self) -> Optional[str]: """ @@ -1178,8 +1226,8 @@ def setDesktop(self, newDesktop: int, userAction: bool = True): :param newDesktop: target desktop index (as per getNumberOfDesktops()) :param userAction: source indication (user or pager/manager action). Defaults to True """ - numDesktops: Optional[int] = self.rootWindow.getNumberOfDesktops() - currDesktop: Optional[int] = self.rootWindow.getCurrentDesktop() + numDesktops: Optional[int] = self.ewmhRoot.getNumberOfDesktops() + currDesktop: Optional[int] = self.ewmhRoot.getCurrentDesktop() if numDesktops is not None and 0 <= newDesktop <= numDesktops and currDesktop is not None and newDesktop != currDesktop: self.sendMessage(Window.DESKTOP, [newDesktop, Xlib.X.CurrentTime, 2 if userAction else 1]) @@ -2572,7 +2620,7 @@ def _getWindowParent(win: XWindow, rootId: int) -> int: return win.id -def _getWindowGeom(win: XWindow, rootId: int = defaultRoot.id) -> Tuple[int, int, int, int]: +def _getWindowGeom(win: XWindow, rootId: int = defaultRoot().id) -> Tuple[int, int, int, int]: # https://stackoverflow.com/questions/12775136/get-window-position-and-size-in-python-with-xlib - mgalgs geom = win.get_geometry() x = geom.x @@ -2602,7 +2650,7 @@ def _xlibGetAllWindows(parent: Optional[XWindow] = None, title: str = "", klass: :return: List of windows objects (X-Window) """ - parentWin: XWindow = parent or defaultRoot + parentWin: XWindow = parent or defaultRoot() allWindows: List[XWindow] = [] def findit(hwnd: XWindow) -> None: @@ -2613,6 +2661,7 @@ def findit(hwnd: XWindow) -> None: children = [] for child in children: try: + # This returns empty name in some cases... must use getProperty!!!! ret: Optional[str] = child.get_wm_name() except: ret = None @@ -2636,7 +2685,7 @@ def findit(hwnd: XWindow) -> None: def _createSimpleWindow(parent: XWindow, x: int, y: int, width: int, height: int, override: bool = False, - inputOnly: bool = False, display: Xlib.display.Display = defaultDisplay) -> EwmhWindow: + inputOnly: bool = False, display: Xlib.display.Display = defaultDisplay()) -> EwmhWindow: if inputOnly: mask = Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask | Xlib.X.KeyPressMask | Xlib.X.KeyReleaseMask else: @@ -2710,7 +2759,7 @@ def _createTransient(display: Xlib.display.Display, parent: XWindow, transient_f # transientWindow.setWmWindowType(WindowType.DESKTOP) # MODAL doesn't behave as expected (it doesn't block main window) transientWindow.changeWmState(StateAction.ADD, State.MODAL, State.BELOW) - # x, y, w, h = _getWindowGeom(transientWindow.xWindow, defaultRoot) + # x, y, w, h = _getWindowGeom(transientWindow.xWindow, defaultRoot()) # normal_hints = transient_for.get_wm_normal_hints() # normal_hints.flags = 808 # normal_hints.min_width = normal_hints.max_width = w + gaps[2] @@ -2795,7 +2844,7 @@ def _XGetAttributes(winId: int, dpyName: str = "") -> Tuple[bool, _XWindowAttrib if xlib: try: if not dpyName: - dpyName = defaultDisplay.get_display_name() + dpyName = defaultDisplay().get_display_name() dpy: int = xlib.XOpenDisplay(dpyName.encode()) xlib.XGetWindowAttributes(dpy, winId, byref(attr)) xlib.XCloseDisplay(dpy) diff --git a/src/ewmhlib/_main.py b/src/ewmhlib/_main.py index 0533c10..683e03a 100644 --- a/src/ewmhlib/_main.py +++ b/src/ewmhlib/_main.py @@ -1,9 +1,12 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from ._ewmhlib import (displaysCount, getDisplaysNames, getDisplaysInfo, getDisplayFromRoot, getDisplayFromWindow, +from ._ewmhlib import (displaysCount, getDisplays, getDisplaysInfo, getRoots, + defaultDisplay, defaultScreen, defaultRoot, defaultEwmhRoot, + getDisplayFromRoot, getScreenFromRoot, + getDisplayFromWindow, getScreenFromWindow, getRootFromWindow, getProperty, getPropertyValue, changeProperty, sendMessage, - defaultDisplay, defaultScreen, defaultRoot, RootWindow, defaultRootWindow, EwmhWindow + EwmhRoot, EwmhWindow ) -import ewmhlib.Props as Props -import ewmhlib.Structs as Structs +from . import _props as Props +from . import _structs as Structs diff --git a/src/ewmhlib/Props.py b/src/ewmhlib/_props.py similarity index 98% rename from src/ewmhlib/Props.py rename to src/ewmhlib/_props.py index 1efca2c..9ef146f 100644 --- a/src/ewmhlib/Props.py +++ b/src/ewmhlib/_props.py @@ -1,3 +1,6 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + from enum import IntEnum import Xlib.X @@ -40,6 +43,7 @@ class DesktopLayout(IntEnum): class Window: NAME = "_NET_WM_NAME" + LEGACY_NAME = "WM_NAME" VISIBLE_NAME = "_NET_WM_VISIBLE_NAME" ICON_NAME = "_NET_WM_ICON_NAME" VISIBLE_ICON_NAME = "_NET_WM_VISIBLE_ICON_NAME" diff --git a/src/ewmhlib/Structs.py b/src/ewmhlib/_structs.py similarity index 97% rename from src/ewmhlib/Structs.py rename to src/ewmhlib/_structs.py index 357e769..7ce4feb 100644 --- a/src/ewmhlib/Structs.py +++ b/src/ewmhlib/_structs.py @@ -1,6 +1,8 @@ -from typing import List +#!/usr/bin/python +# -*- coding: utf-8 -*-#from typing import List from typing_extensions import TypedDict +from typing import List from ctypes import Structure, c_int32, c_ulong, c_uint32 import Xlib.xobject @@ -31,6 +33,7 @@ class DisplaysInfo(TypedDict): - is_default: ''True'' if the display is the default display - screens: list of ScreensInfo structs belonging to display """ + display: Xlib.display.Display name: str is_default: bool screens: List[ScreensInfo] diff --git a/tests/test_ewmhlib.py b/tests/test_ewmhlib.py index 463eedf..ffbe9e3 100644 --- a/tests/test_ewmhlib.py +++ b/tests/test_ewmhlib.py @@ -2,15 +2,16 @@ import Xlib.protocol import Xlib.X +import sys -from ewmhlib import Props, getDisplaysInfo, RootWindow, EwmhWindow +from ewmhlib import Props, getDisplaysInfo, EwmhRoot, EwmhWindow def main(): print("ALL DISPLAYS") print(getDisplaysInfo()) - root = RootWindow() + root = EwmhRoot() print("DESKTOP LAYOUT") print(root.getDesktopLayout())