All pastes #591257 Raw Edit

Stuff

public text v1 · immutable
#591257 ·published 2007-06-27 02:19 UTC
rendered paste body
#!/usr/bin/env python
# Author(s): Keeguon, crdlb
import ConfigParser
import gobject
import pygtk
pygtk.require('2.0')
import gtk
#import compizconfig
from commands import getoutput
from os import mkdir, system, popen, path, environ
from subprocess import Popen
from time import sleep

# Defining functions
def installed(app):
	global app_is_installed
	return app in app_is_installed

def default_decorator():
	global decorator
	if installed('kde-window-decorator') and kde == True and gnome == False:
		decorator = 'kde-window-decorator'
	elif installed('gtk-window-decorator') and gnome == True and kde == False:
		decorator = 'gtk-window-decorator'
	elif  installed('emerald'):
		decorator = 'emerald'
	elif installed('gtk-window-decorator'):
		decorator = 'gtk-window-decorator'	
	elif installed('kde-window-decorator'):
		decorator = 'kde-window-decorator'
	else:
		decorator = ""

def fallback_wm():
	if installed('kwin') and kde == True and gnome == False:
		configuration.set('window_manager', 'active_wm', 'kwin')
	if installed('metacity') and gnome == True and kde == False:
		configuration.set('window_manager', 'active_wm', 'metacity')

def create_config_file():
	default_decorator()
	default_config = open(config_file, 'w')
	default_config.write('# Config file for compiz-fusion-icon (generated with python)\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.write('\n')
	default_config.write('[decorator]\n')
	default_config.write('active_decorator = ' + decorator + '\n')
	default_config.close()

def start_wm(active_wm):
	if active_wm == compiz:
		start_compiz()
	else:
		print active_wm
		system("killall %s gtk-window-decorator kde-window-decorator emerald metacity kwin" % (compiz))
		sleep(2)
		Popen([active_wm, ' --replace'], shell=True)
		print "started", active_wm
def start_decorator(active_decorator):	
	Popen(['killall' , 'gtk-window-decorator' , 'kde-window-decorator' , 'emerald'])
	sleep(2)
	Popen([active_decorator, ' --replace'], shell=True)
	print "started", active_decorator
	
def start_compiz():
	# Get Env Variables
	env_variables = getoutput('compiz-manager -ir 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
	Popen(['killall' , compiz, 'gtk-window-decorator' , 'kde-window-decorator' , 'emerald' , 'metacity' , 'kwin'])
	sleep(2)
	run_compiz = env_variables + ' ' + compiz + ' --replace --sm-disable ' + fast_filter + ' ' + indirect_rendering + ' ' + loose_binding + ' ccp'
	print run_compiz
	Popen(run_compiz, shell=True)
	print "started", active_wm
	start_decorator(active_decorator)
	
	
# Compiz-Manager Menu Functions
def popup_menu(widget, button, time, data = None):
	if button == 3:
		if data:
			data.show_all()
			data.popup(None, None, None, 3, time)
	pass

def configure_menu_activate(widget):
	gobject.spawn_async(['ccsm'], flags=gobject.SPAWN_SEARCH_PATH)

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

def pre_start_wm(active_wm):
	print "psw-compiz is", compiz
	print "pwd-activewm is", active_wm
	if compiz != "":
		start_wm(active_wm)
	else:
		fallback_wm()
		start_wm(active_wm)

def wm_activate(widget):
	pre_start_wm(active_wm)

def decorator_activate(widget):
	pre_start_decorator(active_decorator)
	
def compiz_menu_activate(widget):
	# Set compiz wm
	configuration.set('window_manager', 'active_wm', compiz)
	configuration.write(open(config_file, 'w'))
	pre_start_wm(compiz)
	
def kwin_menu_activate(widget):
	# Set kwin wm
	configuration.set('window_manager', 'active_wm', 'kwin')
	configuration.write(open(config_file, 'w'))
	pre_start_wm('kwin')

def metacity_menu_activate(widget):
	# Set metacity wm
	configuration.set('window_manager', 'active_wm', 'metacity')
	configuration.write(open(config_file, 'w'))
	pre_start_wm('metacity')

def option_ff_activate(widget):
	# Set/Unset ff option
	if option_ff.get_active() == True:
		configuration.set('compiz_options', 'fast_filter', '--fast-filter')
		configuration.write(open(config_file, 'w'))
	else:
		configuration.set('compiz_options', 'fast_filter', '')
		configuration.write(open(config_file, 'w'))
	if active_wm == compiz:
		start_compiz()
		
def option_ir_activate(widget):
	# Set/Unset ir option
	if option_ir.get_active() == True:
		configuration.set('compiz_options', 'indirect_rendering', '--indirect-rendering')
		configuration.write(open(config_file, 'w'))
	else:
		configuration.set('compiz_options', 'indirect_rendering', '')
		configuration.write(open(config_file, 'w'))
	if active_wm == compiz:
		start_compiz()
		
def option_lb_activate(widget):
	# Set/Unset lb option
	if option_lb.get_active() == True:
		configuration.set('compiz_options', 'loose_binding', '--loose-binding')
		configuration.write(open(config_file, 'w'))
	else:
		configuration.set('compiz_options', 'loose_binding', '')
		configuration.write(open(config_file, 'w'))
	if active_wm == compiz:
		start_compiz()

def pre_start_decorator():
	# Get decorator
	active_decorator = configuration.get('decorator', 'active_decorator')
	# Run decorator
	start_decorator(active_decorator)

def emerald_menu_activate(widget):
	# Set emerald decorator
	configuration.set('decorator', 'active_decorator', 'emerald')
	configuration.write(open(config_file, 'w'))
	pre_start_decorator()

def kwd_menu_activate(widget):
	# Set kwd decorator
	configuration.set('decorator', 'active_decorator', 'kde-window-decorator')
	configuration.write(open(config_file, 'w'))
	pre_start_decorator()
	
def gwd_menu_activate(widget):
	# Set gwd decorator
	configuration.set('decorator', 'active_decorator', 'gtk-window-decorator')
	configuration.write(open(config_file, 'w'))
	pre_start_decorator()

def quit_menu_activate(widget):
	gtk.main_quit()

# Check whether GNOME or KDE running
kde = gnome = False
if system('pgrep gnome-session') != 0:
	gnome = True
if system('pgrep dcop') != 0:
	kde = True
	
# Get installed application
app_is_installed = []
apps = ('compiz.real', 'compiz' , 'ccsm' , 'gtk-window-decorator', 'kde-window-decorator', 'emerald' , 'metacity' , 'kwin') 
for application in apps:
	if system("which " + application) == 0:
		app_is_installed.append(application)

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

# Variables
user = getoutput("whoami")
_home = '/home/' + user + '/'
config_folder = environ.get('XDG_CONFIG_HOME', path.join(_home, '.config'))  
config_file = config_folder + '/compiz-fusion-icon.conf'
pixmap_dir = '/usr/share/pixmaps/compiz-icon/'

# Home directory related stuffs
if path.exists(config_folder) == False:
	# Create home directory
	mkdir(config_folder)
	# Create and Write the default config_file
	create_config_file()
if path.exists(config_folder) == True and path.exists(config_file) == False:
	# Create and Write the default config_file
	create_config_file()

# Retrieve configuration from compiz-fusion-icon.conf
configuration = ConfigParser.ConfigParser()
configuration.read(config_file)
# WM
active_wm = configuration.get('window_manager', 'active_wm')
# Decorator
active_decorator = configuration.get('decorator', 'active_decorator')
# 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')

# Window Manager
wm_menu = gtk.Menu()
if compiz != "":
	compiz_wm = gtk.RadioMenuItem(label=" Compiz")
	compiz_wm.connect("activate", compiz_menu_activate)
	if active_wm == compiz:
		compiz_wm.set_active(True)
	wm_menu.append(compiz_wm)
if installed('kwin'):
	kwin_wm = gtk.RadioMenuItem(label=" Kwin")
	kwin_wm.set_group(compiz_wm)
	kwin_wm.connect("activate", kwin_menu_activate)
	if active_wm == 'kwin':
		kwin_wm.set_active(True)
	wm_menu.append(kwin_wm)
if installed('metacity'):
	metacity_wm = gtk.RadioMenuItem(label=" Metacity")
	metacity_wm.set_group(compiz_wm)
	metacity_wm.connect("activate", metacity_menu_activate)
	if active_wm == 'metacity':
		metacity_wm.set_active(True)
	wm_menu.append(metacity_wm)


# Compiz Options
options_menu = gtk.Menu()
option_ff = gtk.CheckMenuItem(label=" Fast Filter")
option_ff.connect("activate", option_ff_activate)
if fast_filter == '--fast-filter':
	option_ff.set_active(True)
options_menu.append(option_ff)
option_ir = gtk.CheckMenuItem(label=" Indirect Rendering")
option_ir.connect("activate", option_ir_activate)
if indirect_rendering == '--indirect-rendering':
	option_ir.set_active(True)
options_menu.append(option_ir)
option_lb = gtk.CheckMenuItem(label=" Loose Binding")
option_lb.connect("activate", option_lb_activate)
if loose_binding == '--loose-binding':
	option_lb.set_active(True)
options_menu.append(option_lb)

# Window Decorator
decorator_menu = gtk.Menu()
if installed('emerald'):
	emerald_decorator = gtk.RadioMenuItem(label=" Emerald")
	emerald_decorator.connect("activate", emerald_menu_activate)
	if active_decorator == 'emerald':
		emerald_decorator.set_active(True)
	decorator_menu.append(emerald_decorator)
if installed('kde-window-decorator'):
	kwd_decorator = gtk.RadioMenuItem(label=" KDE Window Decorator")
	kwd_decorator.set_group(emerald_decorator)
	kwd_decorator.connect("activate", kwd_menu_activate)
	if active_decorator == 'kde-window-decorator':
		kwd_decorator.set_active(True)
	decorator_menu.append(kwd_decorator)
if installed('gtk-window-decorator'):
	gwd_decorator = gtk.RadioMenuItem(label=" GTK Window Decorator")
	gwd_decorator.set_group(emerald_decorator)
	gwd_decorator.connect("activate", gwd_menu_activate)
	if active_decorator == 'gtk-window-decorator':
		gwd_decorator.set_active(True)
	decorator_menu.append(gwd_decorator)

# Compiz-Manager Tray Menu		
menu = gtk.Menu()
item = gtk.ImageMenuItem(stock_id=gtk.STOCK_PREFERENCES)
item.connect("activate", configure_menu_activate)
menu.append(item)
item = gtk.ImageMenuItem('Emerald Theme Manager')
if installed('emerald'):
	item.set_sensitive(True)
else:
	item.set_sensitive(False)
item.connect("activate", etm_menu_activate)
img_etm = gtk.Image()
img_etm.set_from_icon_name("emerald-theme-manager-icon", gtk.ICON_SIZE_MENU)
item.set_image(img_etm)
menu.append(item)
item = gtk.SeparatorMenuItem()
menu.append(item)
# Window Manager Options
item = gtk.ImageMenuItem("Reload Window Manager")
item.connect("activate", wm_activate)
img_refresh = gtk.Image()
img_refresh.set_from_stock("gtk-refresh", gtk.ICON_SIZE_MENU)
item.set_image(img_refresh)
menu.append(item)
item = gtk.ImageMenuItem("Select Window Manager")
gtk.MenuItem.set_submenu(item, wm_menu)
img_wm = gtk.Image()
img_wm.set_from_file(pixmap_dir + 'wm-select.png')
item.set_image(img_wm)
menu.append(item)
item = gtk.ImageMenuItem("Compiz Options")
gtk.MenuItem.set_submenu(item, options_menu)
img_options = gtk.Image()
img_options.set_from_stock("gtk-properties", gtk.ICON_SIZE_MENU)
item.set_image(img_options)
menu.append(item)
item = gtk.SeparatorMenuItem()
menu.append(item)
# Window Decorator Options
item = gtk.ImageMenuItem("Reload Window Decorator")
item.connect("activate", decorator_activate)
img_refresh = gtk.Image()
img_refresh.set_from_stock("gtk-refresh", gtk.ICON_SIZE_MENU)
item.set_image(img_refresh)
menu.append(item)
item = gtk.ImageMenuItem("Select Window Decorator")
gtk.MenuItem.set_submenu(item, decorator_menu)
img_wd = gtk.Image()
img_wd.set_from_file(pixmap_dir + 'wd-select.png')
item.set_image(img_wd)
menu.append(item)
item = gtk.SeparatorMenuItem()
menu.append(item)
item = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT)
item.connect("activate", quit_menu_activate)
menu.append(item)
menu.show_all()

# Compiz-Manager Tray Icon
pixbuf = gtk.gdk.pixbuf_new_from_file(pixmap_dir + 'tray-icon.svg')
tray = gtk.StatusIcon()
tray.set_from_pixbuf(pixbuf)
tray.set_tooltip("Compiz Fusion Icon")
tray.connect("popup-menu", popup_menu, menu)

# Compiz-Manager Main
gtk.main()