parent
0df41b502d
commit
4249f2465e
|
@ -220,6 +220,7 @@ class _GlobalConfig:
|
|||
PyPI_URL = "https://pypi.org/project/youqu"
|
||||
|
||||
LETMEGO_DEBUG = True
|
||||
DTK_DISPLAY = False
|
||||
|
||||
|
||||
GlobalConfig = _GlobalConfig()
|
||||
|
|
|
@ -14,10 +14,10 @@ import dbus
|
|||
from setting.globalconfig import GlobalConfig
|
||||
from src import logger
|
||||
from src.cmdctl import CmdCtl
|
||||
from src.shortcut import ShortCut
|
||||
from src.custom_exception import ApplicationStartError
|
||||
from src.custom_exception import GetWindowInformation
|
||||
from src.custom_exception import NoSetReferencePoint
|
||||
from src.shortcut import ShortCut
|
||||
from src.wayland_wininfo import WaylandWindowInfo
|
||||
|
||||
|
||||
|
@ -41,8 +41,8 @@ class ButtonCenter:
|
|||
self.pause = pause
|
||||
self.config_path = config_path
|
||||
self.retry = retry
|
||||
if GlobalConfig.IS_WAYLAND:
|
||||
self.wayland_info_obj = WaylandWindowInfo()
|
||||
# if GlobalConfig.IS_WAYLAND:
|
||||
# self.wwininfo = WaylandWindowInfo()
|
||||
|
||||
def window_info(self):
|
||||
"""
|
||||
|
@ -71,9 +71,10 @@ class ButtonCenter:
|
|||
raise ApplicationStartError(f"{self.app_name, exc}") from exc
|
||||
|
||||
elif GlobalConfig.IS_WAYLAND:
|
||||
if hasattr(self.wayland_info_obj.library, "GetAllWindowStatesList"):
|
||||
self.wwininfo = WaylandWindowInfo()
|
||||
if hasattr(self.wwininfo.library, "GetAllWindowStatesList"):
|
||||
for _ in range(self.retry + 1):
|
||||
info = self.wayland_info_obj.window_info().get(self.app_name)
|
||||
info = self.wwininfo.window_info().get(self.app_name)
|
||||
if info is None:
|
||||
sleep(1)
|
||||
else:
|
||||
|
@ -89,7 +90,7 @@ class ButtonCenter:
|
|||
dbus.Interface(proxy_object, "org.kde.KWin").WindowMove()
|
||||
sleep(self.pause)
|
||||
ShortCut.esc()
|
||||
return self.wayland_info_obj._window_info()
|
||||
return self.wwininfo._window_info()
|
||||
return None
|
||||
|
||||
def window_location_and_sizes(self):
|
||||
|
@ -113,7 +114,8 @@ class ButtonCenter:
|
|||
window_height = re.findall(r"Height.*:\s(\d+)", app_window_info)[0]
|
||||
window_x, window_y = result
|
||||
else:
|
||||
if hasattr(self.wayland_info_obj.library, "GetAllWindowStatesList"):
|
||||
self.wwininfo = WaylandWindowInfo()
|
||||
if hasattr(self.wwininfo.library, "GetAllWindowStatesList"):
|
||||
app_window_info = self.window_info()
|
||||
window_x, window_y, window_width, window_height = app_window_info.get("location")
|
||||
else:
|
||||
|
@ -144,7 +146,8 @@ class ButtonCenter:
|
|||
result = re.findall(re_pattern, self.window_info())
|
||||
window_x, window_y = result
|
||||
else:
|
||||
if hasattr(self.wayland_info_obj.library, "GetAllWindowStatesList"):
|
||||
self.wwininfo = WaylandWindowInfo()
|
||||
if hasattr(self.wwininfo.library, "GetAllWindowStatesList"):
|
||||
window_x, window_y, window_width, window_height = app_window_info.get("location")
|
||||
else:
|
||||
window_x, window_y, window_width, window_height = app_window_info.get("wininfo")
|
||||
|
@ -164,7 +167,8 @@ class ButtonCenter:
|
|||
window_width = re.findall(r"Width.*:\s(\d+)", app_window_info)[0]
|
||||
window_height = re.findall(r"Height.*:\s(\d+)", app_window_info)[0]
|
||||
else:
|
||||
if hasattr(self.wayland_info_obj.library, "GetAllWindowStatesList"):
|
||||
self.wwininfo = WaylandWindowInfo()
|
||||
if hasattr(self.wwininfo.library, "GetAllWindowStatesList"):
|
||||
window_x, window_y, window_width, window_height = app_window_info.get("location")
|
||||
else:
|
||||
window_x, window_y, window_width, window_height = app_window_info.get("wininfo")
|
||||
|
@ -584,7 +588,7 @@ class ButtonCenter:
|
|||
).strip()
|
||||
return len([i for i in app_id.split("\n") if i])
|
||||
else:
|
||||
info = self.wayland_info_obj.window_info().get(self.app_name)
|
||||
info = self.wwininfo.window_info().get(self.app_name)
|
||||
if isinstance(info, dict):
|
||||
return 1
|
||||
elif isinstance(info, list):
|
||||
|
@ -605,7 +609,7 @@ class ButtonCenter:
|
|||
return [i for i in app_id.split("\n") if i]
|
||||
raise ApplicationStartError(app_id)
|
||||
else:
|
||||
info = self.wayland_info_obj.window_info().get(self.app_name)
|
||||
info = self.wwininfo.window_info().get(self.app_name)
|
||||
if isinstance(info, dict):
|
||||
return info.get("window_id")
|
||||
elif isinstance(info, list):
|
||||
|
@ -643,7 +647,7 @@ class ButtonCenter:
|
|||
except Exception as exc:
|
||||
raise ApplicationStartError(f"{app_name, exc}") from exc
|
||||
else:
|
||||
info = self.wayland_info_obj.window_info().get(self.app_name)
|
||||
info = self.wwininfo.window_info().get(self.app_name)
|
||||
if isinstance(info, dict):
|
||||
return info.get("window_id")
|
||||
elif isinstance(info, list):
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
import os
|
||||
from time import sleep
|
||||
|
||||
from setting.globalconfig import GlobalConfig
|
||||
|
||||
|
@ -72,15 +73,22 @@ class WaylandWindowInfo:
|
|||
|
||||
def __init__(self):
|
||||
self.library = ctypes.cdll.LoadLibrary(f"/usr/lib/{machine()}-linux-gnu/libdtkwmjack.so")
|
||||
if not GlobalConfig.DTK_DISPLAY:
|
||||
self.init_dtk_display()
|
||||
GlobalConfig.DTK_DISPLAY = True
|
||||
|
||||
def init_dtk_display(self):
|
||||
self.library.InitDtkWmDisplay()
|
||||
|
||||
def destory_dtk_display(self):
|
||||
self.library.DestoryDtkWmDisplay()
|
||||
|
||||
def _window_info(self):
|
||||
"""窗口信息"""
|
||||
self.library.InitDtkWmDisplay()
|
||||
self.library.GetWindowFromPoint.restype = ctypes.c_int
|
||||
wid = self.library.GetWindowFromPoint()
|
||||
self.library.GetWindowState.restype = ctypes.POINTER(WindowStructure)
|
||||
ws = self.library.GetWindowState(wid)
|
||||
self.library.DestoryDtkWmDisplay()
|
||||
window_info = ws.contents.Geometry
|
||||
resourceName = ws.contents.resourceName.decode("utf-8")
|
||||
if not resourceName:
|
||||
|
@ -97,11 +105,18 @@ class WaylandWindowInfo:
|
|||
|
||||
def window_info(self):
|
||||
"""窗口信息"""
|
||||
self.library.InitDtkWmDisplay()
|
||||
self.library.GetAllWindowStatesList.restype = ctypes.POINTER(dtk_array)
|
||||
get_all_window_states_list = self.library.GetAllWindowStatesList()
|
||||
self.library.DestoryDtkWmDisplay()
|
||||
range_index = get_all_window_states_list.contents.size / 544
|
||||
_e = None
|
||||
for _ in range(3):
|
||||
try:
|
||||
get_all_window_states_list = self.library.GetAllWindowStatesList()
|
||||
range_index = get_all_window_states_list.contents.size / 544
|
||||
break
|
||||
except ValueError as e:
|
||||
_e = e
|
||||
sleep(1)
|
||||
else:
|
||||
raise ValueError(_e)
|
||||
res = {}
|
||||
for i in range(int(range_index)):
|
||||
window_info = get_all_window_states_list.contents.data[i]
|
||||
|
@ -133,4 +148,9 @@ class WaylandWindowInfo:
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
WaylandWindowInfo().window_info()
|
||||
wwininfo = WaylandWindowInfo()
|
||||
wwininfo.library.InitDtkWmDisplay()
|
||||
for i in range(100):
|
||||
print(wwininfo.window_info())
|
||||
sleep(1)
|
||||
wwininfo.library.DestoryDtkWmDisplay()
|
||||
|
|
Loading…
Reference in New Issue