Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services/console/lib/pyxres.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/console/lib/pyxres.py')
-rw-r--r--services/console/lib/pyxres.py256
1 files changed, 0 insertions, 256 deletions
diff --git a/services/console/lib/pyxres.py b/services/console/lib/pyxres.py
deleted file mode 100644
index 91c3542..0000000
--- a/services/console/lib/pyxres.py
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2007, Eduardo Silva <edsiper@gmail.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-from ctypes import *
-
-# XText Property
-class _XTextProperty(Structure):
- pass
-
-_XTextProperty._fields_ = [("value", c_char_p),\
- ("encoding", c_ulong),\
- ("format", c_int),\
- ("nitems", c_ulong)]
-
-# XResType Structure
-class _XResTypeStruct(Structure):
- pass
-
-_XResTypeStruct._fields_ = [("resource_type", c_ulong),\
- ("count", c_uint)]
-
-_ATOMNAMES = ["PIXMAP",\
- "WINDOW",\
- "GC",\
- "FONT",\
- "GLYPHSET",\
- "PICTURE",\
- "COLORMAP ENTRY",\
- "PASSIVE GRAB",\
- "CURSOR",\
- "_NET_CLIENT_LIST",\
- "_NET_WM_PID",\
- "_NET_WM_NAME",\
- "UTF8_STRING",\
- "WM_NAME", # FIXME!
- "CARDINAL" # FIXME!
- ]
-
-_ATOM_PIXMAP = 0
-_ATOM_WINDOW = 1
-_ATOM_GC = 2
-_ATOM_FONT = 3
-_ATOM_GLYPHSET = 4
-_ATOM_PICTURE = 5
-_ATOM_COLORMAP_ENTRY = 6
-_ATOM_PASSIVE_GRAB = 7
-_ATOM_CURSOR = 8
-_ATOM_NET_CLIENT_LIST = 9
-_ATOM_NET_WM_PID = 10
-_ATOM_NET_WM_NAME = 11
-_ATOM_UTF8_STRING = 12
-_ATOM_WM_NAME = 13
-_ATOM_CARDINAL = 14
-
-# XText Property
-class _XTextProperty(Structure):
- pass
-
-_XTextProperty._fields_ = [("value", c_char_p),\
- ("encoding", c_ulong),\
- ("format", c_int),\
- ("nitems", c_ulong)]
-
-class XRes(object):
- _XRESLIB = "libXRes.so"
- _XMULIB = "libXmu.so.6"
-
- def __init__(self):
- self._lib = CDLL(self._XRESLIB)
- self._lib_xmu = CDLL(self._XMULIB)
-
- def _set_atoms(self, display):
- self.atoms = []
- for atom in _ATOMNAMES:
- atom_value = self._lib.XInternAtom(display, atom, True)
- self.atoms.append(atom_value)
-
- def open_display(self, display=None):
- display = self._lib.XOpenDisplay(display)
- self._set_atoms(display)
- return display
-
- # Return an array with XRestTypes:
- #
- # XResType.resource_type (Atom_type)
- # XResTyoe.count
- def get_resources(self, display, resource_base):
- n_types = c_long()
- types = pointer(_XResTypeStruct())
- self._lib.XResQueryClientResources(display, resource_base, \
- byref(n_types), byref(types))
-
- pytypes = []
- for t in types[:n_types.value]:
- pytypes.append(t)
-
- return pytypes
-
- def get_windows(self, display):
- self._windows = []
- root = self._lib.XDefaultRootWindow(display)
- self._lookat(display, root)
- return self._windows
-
- def _lookat(self, display, win_root):
- wp = self._get_window_properties (display, win_root)
-
- if wp:
- self._windows.append(wp)
-
- w = None
- dummy = self._Window()
- children = self._Window()
- nchildren = c_uint()
-
- r = self._lib.XQueryTree(display, win_root, byref(dummy), \
- byref(dummy), byref(children), byref(nchildren))
-
- for client in children[:nchildren.value]:
- cli = self._lib_xmu.XmuClientWindow (display, client)
- if client is not None:
- wp = self._get_window_properties (display, cli)
- if wp:
- self._windows.append(wp)
-
- def _get_window_properties(self, display, w):
- cliargv = c_char_p()
- cliargc = c_long()
- machtp = pointer(_XTextProperty())
- nametp = _XTextProperty()
- w_name = None
-
- if not self._lib.XGetWMClientMachine (display, w, byref(machtp)):
- machtp.value = None
- machtp.encoding = None
-
- if not self._lib.XGetCommand(display, w, byref(cliargv), byref(cliargc)):
- return
-
- if self._lib.XGetWMName(display, w, byref(nametp)):
- w_name = nametp.value
-
- bytes = c_ulong()
- self._lib.XResQueryClientPixmapBytes(display, w, byref(bytes))
- w_pixmaps = bytes.value
-
- type = self._Atom()
- format = c_int()
- n_items = c_ulong()
- bytes_after = c_int()
- w_pid = pointer(c_long())
- wname = c_char_p()
-
- self._lib.XGetWindowProperty(display, w,\
- self.atoms[_ATOM_NET_WM_PID],
- 0, 2L,\
- False, self.atoms[_ATOM_CARDINAL],\
- byref(type), byref(format), \
- byref(n_items), byref(bytes_after), \
- byref(w_pid))
-
-
- # Calc aditional X resources by window
- res = self.get_resources(display, w)
-
- n_windows = 0
- n_gcs = 0
- n_pictures = 0
- n_glyphsets = 0
- n_fonts = 0
- n_colormaps = 0
- n_passive_grabs = 0
- n_cursors = 0
- n_other = 0
-
- for r in res:
- if r.resource_type == self.atoms[_ATOM_WINDOW]:
- n_windows += r.count
- elif r.resource_type == self.atoms[_ATOM_GC]:
- n_gcs += r.count
- elif r.resource_type == self.atoms[_ATOM_PICTURE]:
- n_pictures += r.count
- elif r.resource_type == self.atoms[_ATOM_GLYPHSET]:
- n_glyphsets += r.count
- elif r.resource_type == self.atoms[_ATOM_FONT]:
- n_fonts += r.count
- elif r.resource_type == self.atoms[_ATOM_COLORMAP_ENTRY]:
- n_colormaps += r.count
- elif r.resource_type == self.atoms[_ATOM_PASSIVE_GRAB]:
- n_passive_grabs += r.count
- elif r.resource_type == self.atoms[_ATOM_CURSOR]:
- n_cursors += r.count
- else:
- n_other += r.count
-
- other_bytes = n_windows * 24
- other_bytes += n_gcs * 24
- other_bytes += n_pictures * 24
- other_bytes += n_glyphsets * 24
- other_bytes += n_fonts * 1024
- other_bytes += n_colormaps * 24
- other_bytes += n_passive_grabs * 24
- other_bytes += n_cursors * 24
- other_bytes += n_other * 24
-
- window = Window(w, w_pid.contents.value, w_pixmaps, \
- n_windows, n_gcs, n_fonts, n_glyphsets, n_pictures,\
- n_colormaps, n_passive_grabs, n_cursors, n_other,\
- other_bytes, w_name)
-
- return window
-
- # Data types
- def _Window(self):
- return pointer(c_ulong())
-
- def _Atom(self, data=0):
- return pointer(c_ulong(data))
-
-class Window(object):
- def __init__(self, resource_base, pid, pixmap_bytes=0,\
- n_windows=0, n_gcs=0, n_fonts=0, n_glyphsets=0, n_pictures=0,\
- n_colormaps=0, n_passive_grabs=0, n_cursors=0, n_other=0,\
- other_bytes=0, wm_name=None):
-
- self.resource_base = resource_base
- self.pid = pid
- self.pixmap_bytes = pixmap_bytes
-
- self.n_windows = n_windows
- self.n_gcs = n_gcs
- self.n_fonts = n_fonts
- self.n_glyphsets = n_glyphsets
- self.n_pictures = n_pictures
- self.n_colormaps = n_colormaps
- self.n_passive_grabs = n_passive_grabs
- self.n_cursors = n_cursors
- self.n_other = n_other
-
- self.other_bytes = other_bytes
- self.wm_name = wm_name