Public feed
#599110
#!/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')