86 lines
2.7 KiB
Python
Executable File
86 lines
2.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# examples/xres.py -- demonstrate the X-Resource extension
|
|
#
|
|
# Copyright (C) 2021 Aleksei Bavshin <alebastr89@gmail.com>
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public License
|
|
# as published by the Free Software Foundation; either version 2.1
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# See the GNU Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the
|
|
# Free Software Foundation, Inc.,
|
|
# 51 Franklin Street,
|
|
# Fifth Floor,
|
|
# Boston, MA 02110-1301 USA
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Change path so we find Xlib
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
|
|
|
from Xlib.display import Display
|
|
from Xlib.ext import res as XRes
|
|
|
|
|
|
def check_ext(disp, extname, version):
|
|
if disp.query_extension(extname) is None:
|
|
raise AssertionError("Server has {} extension".format(extname))
|
|
|
|
r = disp.res_query_version()
|
|
if (r.server_major, r.server_minor) < version:
|
|
raise AssertionError(
|
|
"Server has requested version {} of {} extension".format(version, extname)
|
|
)
|
|
|
|
|
|
def query_client_id(display, wid):
|
|
specs = [{"client": wid, "mask": XRes.LocalClientPIDMask}]
|
|
r = display.res_query_client_ids(specs)
|
|
for id in r.ids:
|
|
if id.spec.client > 0 and id.spec.mask == XRes.LocalClientPIDMask:
|
|
for value in id.value:
|
|
return value
|
|
return None
|
|
|
|
|
|
def print_client_info(disp, client):
|
|
print("client: {}".format(client))
|
|
|
|
resources = disp.res_query_client_resources(client)
|
|
rc = [r.count for r in resources.types]
|
|
print("\tresouces: {} resources of {} types".format(sum(rc), len(rc)))
|
|
|
|
pb = disp.res_query_client_pixmap_bytes(client)
|
|
print("\tpixmaps: {} bytes {} overflow".format(pb.bytes, pb.bytes_overflow))
|
|
|
|
pid = query_client_id(disp, client)
|
|
print("\tpid: {}".format(pid))
|
|
|
|
rb = disp.res_query_resource_bytes(client, [{"resource": 0, "type": 0}])
|
|
sizes = [s.size.bytes for s in rb.sizes]
|
|
print("\t{} resources consume {} bytes".format(len(sizes), sum(sizes)))
|
|
|
|
|
|
def main():
|
|
display = Display()
|
|
check_ext(display, XRes.extname, (1, 2))
|
|
|
|
clients = display.res_query_clients().clients
|
|
print("{} clients connected to the server".format(len(clients)))
|
|
|
|
for client in clients:
|
|
print_client_info(display, client.resource_base)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|