diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-13 03:34:10 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-13 03:34:10 +0000 |
commit | 6a8e496233a6f6d632bdc7551a5fbda3543c27bb (patch) | |
tree | 28479fd17cf5a19838108ab4a17b6f3fb1e5cd88 /FusionIcon/environment.py | |
download | fusion-icon-6a8e496233a6f6d632bdc7551a5fbda3543c27bb.tar.gz fusion-icon-6a8e496233a6f6d632bdc7551a5fbda3543c27bb.zip |
Added KDE3 version of fusion-icon for Compiz
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/fusion-icon@1102634 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'FusionIcon/environment.py')
-rw-r--r-- | FusionIcon/environment.py | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/FusionIcon/environment.py b/FusionIcon/environment.py new file mode 100644 index 0000000..9423098 --- /dev/null +++ b/FusionIcon/environment.py @@ -0,0 +1,146 @@ +# This file is part of Fusion-icon. + +# Fusion-icon 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. +# +# Fusion-icon 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, see <http://www.gnu.org/licenses/>. +# +# Author(s): crdlb, nesl247 +# +# Copyright 2007 Christopher Williams <christopherw@verizon.net> + +import os +from execute import run + +tfp = 'GLX_EXT_texture_from_pixmap' +GDSID = 'GNOME_DESKTOP_SESSION_ID' + +class Environment: + + '''Detects properties of the enviroment, and provides a set() method that uses this information to export environment variables needed to start compiz.''' + + + def __init__(self): + + '''desktop: current desktop enviroment used to choose interface, fallback wm, and default decorator + +failsafe: boolean, True if in a failsafe session, currently only supports gnome failsafe mode. + +glxinfo: output of glxinfo command + +indirect_glxinfo: output of glxinfo with LIBGL_ALWAYS_INDIRECT + +xvinfo: output of xvinfo + +glx_vendor: 'client glx vendor:' usually one of SGI (for mesa-based drivers), NVIDIA Corporation, or ATI. + +tfp: 'direct' if texture_from_pixmap is present with direct rendering (implying presence with indirect as well), 'indirect' if only present with indirect context, False if not present at all + +Xgl: True in Xgl''' + + # Check gnome- and kde-specific vars, then try generic 'DESKTOP_SESSION' + if GDSID in os.environ: + self.desktop = 'gnome' + + elif 'KDE_FULL_SESSION' in os.environ: + self.desktop = 'kde' + + else: + self.desktop = os.environ.get('DESKTOP_SESSION', 'unknown') + + self.failsafe = False + if self.desktop == 'gnome' and GDSID in os.environ and os.environ[GDSID] == 'failsafe': + self.failsafe = True + + if self.failsafe: + failsafe_str = 'failsafe ' + else: + failsafe_str = '' + + print ' * Detected Session: %s%s' %(failsafe_str, self.desktop) + + + ## Save the output of glxinfo and xvinfo for later use: + + # don't try to run glxinfo unless it's installed + if run(['which', 'glxinfo'], 'call', quiet=True) == 0: + self.glxinfo = run('glxinfo', 'output') + else: + raise SystemExit, ' * Error: glxinfo not installed!' + + # make a temp environment + indirect_environ = os.environ.copy() + indirect_environ['LIBGL_ALWAYS_INDIRECT'] = '1' + self.indirect_glxinfo = run('glxinfo', 'output', env=indirect_environ) + + if run(['which', 'xvinfo'], 'call', quiet=True) == 0: + self.xvinfo = run('xvinfo', 'output') + else: + raise SystemExit, ' * Error: xvinfo not installed!' + + line = [l for l in self.glxinfo.splitlines() if 'client glx vendor string:' in l] + if line: + self.glx_vendor = ' '.join(line[0].split()[4:]) + else: + self.glx_vendor = '' + + ## Texture From Pixmap / Indirect + self.tfp = False + if self.glxinfo.count(tfp) < 3: + if self.indirect_glxinfo.count(tfp) == 3: + self.tfp = 'indirect' + else: + self.tfp = 'direct' + + ## Xgl + if 'Xgl' in self.xvinfo: + self.Xgl = True + + else: + self.Xgl = False + + def set(self): + + '''Trigger all environment checks''' + + # Check for Intel and export INTEL_BATCH + if 'Intel' in self.glxinfo: + print ' * Intel detected, exporting: INTEL_BATCH=1' + os.environ['INTEL_BATCH'] = '1' + + # Check TFP and export LIBGL_ALWAYS_INDIRECT if needed + if self.tfp != 'direct': + print ' * No %s with direct rendering context' %tfp + if self.tfp == 'indirect': + print ' ... present with indirect rendering, exporting: LIBGL_ALWAYS_INDIRECT=1' + os.environ['LIBGL_ALWAYS_INDIRECT'] = '1' + else: + print ' ... nor with indirect rendering, this isn\'t going to work!' + + # If using Xgl with a proprietary driver, exports LD_PRELOAD=<mesa libGL> + if self.Xgl and self.glx_vendor != 'SGI': + print ' * Non-mesa driver on Xgl detected' + from data import mesa_libgl_locations + location = [l for l in mesa_libgl_locations if os.path.exists(l)] + if location: + print ' ... exporting: LD_PRELOAD=%s' %location[0] + os.environ['LD_PRELOAD'] = location[0] + else: + # kindly let the user know... but don't abort (maybe it will work :> ) + print ' ... no mesa libGL found for preloading, this may not work!' + + # Check for nvidia on Xorg + if not self.Xgl and self.glx_vendor == 'NVIDIA Corporation': + print ' * NVIDIA on Xorg detected, exporting: __GL_YIELD=NOTHING' + os.environ['__GL_YIELD'] = 'NOTHING' + +env = Environment() + |