#!/usr/bin/env python # Author(s): Keeguon, crdlb import ConfigParser, gobject, pygtk, gtk, compizconfig pygtk.require('2.0') 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.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)) Popen([active_wm, ' --replace'], shell=True) print "started", active_wm 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 system("killall %s gtk-window-decorator kde-window-decorator emerald metacity kwin" % (compiz)) 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) print "started", active_wm # 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 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 and initialized: 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 and initialized: 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 and initialized: start_compiz() def emerald_menu_activate(widget): pass def kwd_menu_activate(widget): pass def gwd_menu_activate(widget): pass def quit_menu_activate(widget): gtk.main_quit() initialized = False # 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 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) active_wm = configuration.get('window_manager', 'active_wm') active_decorator = "gtk-window-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() compiz_wm = gtk.RadioMenuItem(label=" Compiz") compiz_wm.connect("activate", compiz_menu_activate) if active_wm == compiz: compiz_wm.set_active(True) if compiz == "": compiz_wm.set_sensitive(False) wm_menu.append(compiz_wm) 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) if not installed('kwin'): kwin_wm.set_sensitive(False) wm_menu.append(kwin_wm) 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) if not installed('metacity'): metacity_wm.set_sensitive(False) 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() emerald_decorator = gtk.RadioMenuItem(label=" Emerald") emerald_decorator.connect("activate", emerald_menu_activate) if active_decorator == 'emerald': emerald_decorator.set_active(True) if not installed('emerald'): emerald_decorator.set_sensitive(False) decorator_menu.append(emerald_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) if not installed('gtk-window-decorator'): gwd_decorator.set_sensitive(False) decorator_menu.append(gwd_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) if not installed('kde-window-decorator'): kwd_decorator.set_sensitive(False) decorator_menu.append(kwd_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 not installed('emerald'): 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.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) initialized = True # Compiz-Manager Main gtk.main()