Public feed #599110

Something

public text v1 · immutable
Raw Edit
·published 2007-07-02 00:23 UTC
rendered paste body
#!/usr/bin/env python
# Author(s): crdlb
import ConfigParser, compizconfig
from os import system, environ, path, popen, mkdir
from subprocess import Popen
from commands import getoutput

# Defining functions

def create_config_file():
        default_config = open(config_file, 'w')
        default_config.write('# Config file for fusion-icon\n')
        default_config.write('\n')
        default_config.write('[window_manager]\n')
        default_config.write('active_wm = compiz\n')
        default_config.write('\n')
        default_config.write('[compiz_options]\n')
        default_config.write('fast_filter = \n')
        default_config.write('indirect_rendering = \n')
        default_config.write('loose_binding = \n')
        default_config.close()

def installed(app):
        global app_is_installed
        return app in app_is_installed

def default_decorator():
        if installed('kde-window-decorator') and kde and not gnome:
                decorator = 'kde-window-decorator --replace'
        elif installed('gtk-window-decorator') and gnome and not kde:
                decorator = 'gtk-window-decorator --replace'
        elif  installed('emerald'):
                decorator = 'emerald --replace'
        elif installed('gtk-window-decorator'):
                decorator = 'gtk-window-decorator --replace'
        elif installed('kde-window-decorator'):
                decorator = 'kde-window-decorator --replace'
        else:
                decorator = ''
        print '* choosing ', decorator, ' as default decorator'
        return decorator

def fallback_wm():
        if installed('kwin') and kde and not gnome:
                configuration.set('window_manager', 'active_wm', 'kwin')
        elif installed('metacity') and gnome and not kde:
                configuration.set('window_manager', 'active_wm', 'metacity')
        else:
                configuration.set('window_manager', 'active_wm', '')

def env_intel():
        if not getoutput('xvinfo 2>/dev/null|grep Intel') == '':
                print '* intel found, exporting: INTEL_BATCH=1'
                return 'INTEL_BATCH=1 '

def is_always_indirect():
        if int(getoutput('glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c')) < 3:
                if int(getoutput('LIBGL_ALWAYS_INDIRECT=1 glxinfo 2>/dev/null | grep GLX_EXT_texture_from_pixmap -c')) == 3:
                        return True

def env_indirect():
        if is_always_indirect():
                print '* No GLX_EXT_texture_from_pixmap present with direct rendering context'
                print '... present with indirect rendering, exporting: LIBGL_ALWAYS_INDIRECT=1'
                return 'LIBGL_ALWAYS_INDIRECT=1 '
        else: return "" 

def env_fglrx():
        if path.exists('/usr/lib/fglrx/libGL.so.1.2.xlibmesa'):
                print '* fglrx found, exporting: LD_PRELOAD=/usr/lib/fglrx/libGL.so.1.2.xlibmesa'
                return 'LD_PRELOAD=/usr/lib/fglrx/libGL.so.1.2.xlibmesa '
        else: return ""

def env_nvidia():
        if not getoutput('xdpyinfo 2>/dev/null|grep NV-GLX') == '':
                print '* nvidia found, exporting: __GL_YIELD=nothing '
                return '__GL_YIELD=nothing '
        else: return ""

def get_env():
        return env_intel() + env_indirect() + env_fglrx() + env_nvidia()

def start_wm(active_wm):
        if active_wm == compiz:
                start_compiz()
        else:
                run_wm = active_wm + ' --replace'
                Popen(run_wm, shell=True)

def start_compiz():
        # Get Env Variables                                                                                          
        env_variables = get_env()
        # Compiz Options
        fast_filter = configuration.get('compiz_options', 'fast_filter')
        indirect_rendering = configuration.get('compiz_options', 'indirect_rendering')
        loose_binding = configuration.get('compiz_options', 'loose_binding')
        # Start Compiz WM
        system('killall gtk-window-decorator kde-window-decorator emerald')
        if not decoplugin.Enabled:
                context.ProcessEvents()
                decoplugin.Enabled = True
                decoplugin.Update()
                context.Write()
        #sleep(2)
        run_compiz = env_variables + compiz + ' --replace --sm-disable --ignore-desktop-hints ccp ' + fast_filter + ' ' + indirect_rendering + ' ' + loose_binding
        print run_compiz
        Popen(run_compiz, shell=True)

def pre_start_wm():
        active_wm = configuration.get('window_manager', 'active_wm')
        #make sure not to start compiz if not installed.
        if compiz != '':
                start_wm(active_wm)
        else:
                fallback_wm()
                start_wm(active_wm)

def set_decorator(decorator):
        if initialized or first_set:
                context.ProcessEvents()
                decosetting.Value = decorator
                print '* setting decorator to', decosetting.Value
                decoplugin.Update()
                context.Write()

def get_decorator():
        if decosetting.Value != '':
                decorator = decosetting.Value
        else:
                decorator = default_decorator()
        return decorator

def etm_menu_activate(widget):
        Popen(['emerald-theme-manager'])

def wm_activate(widget):
        if initialized:
                print '* reloading window manager...'
                pre_start_wm()

def compiz_menu_activate(widget):
        # Set compiz wm
        configuration.set('window_manager', 'active_wm', compiz)
        configuration.write(open(config_file, 'w'))
        if initialized and compiz_wm.active:
                print '* switching to Compiz...'
                pre_start_wm()

def kwin_menu_activate(widget):
        # Set kwin wm
        configuration.set('window_manager', 'active_wm', 'kwin')
        configuration.write(open(config_file, 'w'))
        if initialized and kwin_wm.active:
                print '* switching to Kwin...'
                pre_start_wm()

def metacity_menu_activate(widget):
        # Set metacity wm
        configuration.set('window_manager', 'active_wm', 'metacity')
        configuration.write(open(config_file, 'w'))
        if initialized and metacity_wm.active:
                print '* switching to Metacity...'
                pre_start_wm()

def xfwm4_menu_activate(widget):
        # Set Xfwm4 wm
        configuration.set('window_manager', 'active_wm', 'xfwm4')
        configuration.write(open(config_file, 'w'))
        if initialized and metacity_wm.active:
                print '* switching to Xfwm4...'
                pre_start_wm()

initialized = False
first_set = False
always_indirect = is_always_indirect()

#Open CompizConfig context
context = compizconfig.Context()
decoplugin = context.Plugins['decoration']
decosetting = compizconfig.Setting(decoplugin, 'command', 0)

# Get installed applications
app_is_installed = []
apps = ('compiz.real', 'compiz' , 'ccsm' , 'gtk-window-decorator', 'kde-window-decorator', 'emerald' , 'metacity' , 'kwin', 'xfwm4')
for application in apps:
        if system('which ' + application) == 0:
                app_is_installed.append(application)

compiz = ''
if installed('compiz.real'): compiz = 'compiz.real'
elif installed('compiz'): compiz = 'compiz'

# Check whether GNOME or KDE running
kde = gnome = False
if system('pgrep gnome-session') == 0: gnome = True
if system('pgrep dcop') == 0: kde = True

print 'gnome is', gnome, ', kde is', kde



active_decorator = get_decorator()
first_set = True
set_decorator(active_decorator)
first_set = False

# Variables
home = environ.get('HOME')
config_folder = environ.get('XDG_CONFIG_HOME', path.join(home, '.config'))
config_file = path.join(config_folder, 'fusion-icon')
pixmap_dir = '/usr/share/pixmaps'

# Configuration file setup
if not path.exists(config_folder):
        mkdir(config_folder)
        create_config_file()
elif not path.exists(config_file):
        create_config_file()

# Retrieve configuration from ~/.config/fusion-icon
configuration = ConfigParser.ConfigParser()
configuration.read(config_file)
active_wm = configuration.get('window_manager', 'active_wm')
fast_filter = configuration.get('compiz_options', 'fast_filter')
indirect_rendering = configuration.get('compiz_options', 'indirect_rendering')
loose_binding = configuration.get('compiz_options', 'loose_binding')