#! /usr/bin/python import os import pygtk pygtk.require('2.0') import gtk, gobject import egg.trayicon WGII = gtk.Invisible() def start_compiz(): global WGII WGII.selection_owner_set(atom) os.system("killall gnome-window-decorator") gobject.spawn_async(['gnome-window-decorator'], \ flags=gobject.SPAWN_SEARCH_PATH) gobject.spawn_async(['compiz', '--strict-binding', '--indirect-rendering', '--replace', 'gconf'], \ flags=gobject.SPAWN_SEARCH_PATH) def place_menu(menu): (width, height) = menu.size_request() (menu_xpos, menu_ypos) = tray.window.get_origin() menu_xpos = menu_xpos + tray.allocation.x menu_ypos = menu_ypos + tray.allocation.y if menu_ypos > tray.get_screen().get_height() / 2: menu_ypos -= height + 1 else: menu_ypos += tray.allocation.height + 1 x = menu_xpos; y = menu_ypos; push_in = True; return (x, y, push_in) def configure_menu_activate(widget): gobject.spawn_async(['gset-compiz'], flags=gobject.SPAWN_SEARCH_PATH) def theme_menu_activate(widget): gobject.spawn_async(['gcompizthemer'], flags=gobject.SPAWN_SEARCH_PATH) def compiz_menu_activate(widget): start_compiz() def metacity_menu_activate(widget): global WGII WGII.destroy() WGII = gtk.Invisible() os.system("killall gnome-window-decorator") gobject.spawn_async(['metacity', '--replace', 'gconf'], \ flags=gobject.SPAWN_SEARCH_PATH) def quit_menu_activate(widget): gtk.main_quit() def callback(widget, ev): menu.set_screen(widget.get_screen()) menu.popup(None, None, place_menu, ev.button, ev.time) menu = gtk.Menu() item = gtk.ImageMenuItem(stock_id=gtk.STOCK_PREFERENCES) item.connect("activate", configure_menu_activate) menu.append(item) item = gtk.MenuItem("Themes") item.connect("activate", theme_menu_activate) menu.append(item) item = gtk.SeparatorMenuItem() menu.append(item) item = gtk.MenuItem("Restart compiz") item.connect("activate", compiz_menu_activate) menu.append(item) item = gtk.MenuItem("Switch to metacity") item.connect("activate", metacity_menu_activate) 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() tray = egg.trayicon.TrayIcon("TrayIcon") box = gtk.EventBox() pixbuf = gtk.gdk.pixbuf_new_from_file("/usr/share/compiz/logo24.png") image = gtk.Image() image.set_from_pixbuf(pixbuf) box.add(image) tray.add(box) tray.show_all() atom = gtk.gdk.atom_intern("_COMPIZ_GL_INCLUDE_INFERIORS") box.connect("button-press-event", callback) start_compiz() gtk.main()