# This file is part of Fusion-icon. # Fusion-icon is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Fusion-icon is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Based on compiz-icon, Copyright 2007 Felix Bellanger # # Author(s): crdlb # Copyright 2007 Christopher Williams import os import gtk if gtk.pygtk_version < (2,10,0): # raise an ImportError here to trigger the Except statement in interface.py raise ImportError('PyGtk 2.10.0 or later required') import time from FusionIcon.start import wms, apps, options, decorators, init class TrayMenu(gtk.Menu): def __init__(self): gtk.Menu.__init__(self) #CCSM if 'ccsm' in apps: item = ApplicationItem('ccsm') item.set_image(gtk.image_new_from_stock('gtk-preferences', gtk.ICON_SIZE_MENU)) self.append(item) #Emerald Theme Manager if 'emerald theme manager' in apps: item = ApplicationItem('emerald theme manager') item.set_image(gtk.image_new_from_icon_name('emerald-theme-manager-icon', gtk.ICON_SIZE_MENU)) self.append(item) if 'ccsm' in apps or 'emerald theme manager' in apps: item = gtk.SeparatorMenuItem() self.append(item) #Reload item = gtk.ImageMenuItem('Reload Window Manager') item.connect('activate', self.reload_activate) item.set_image(gtk.image_new_from_stock('gtk-refresh', gtk.ICON_SIZE_MENU)) if not wms: item.set_sensitive(False) self.append(item) #Window Manager item = gtk.ImageMenuItem('Select Window Manager') item.set_image(gtk.image_new_from_stock('gtk-index', gtk.ICON_SIZE_MENU)) submenu = WindowManagerMenu() item.set_submenu(submenu) if not wms: item.set_sensitive(False) self.append(item) #Compiz Options item = gtk.ImageMenuItem('Compiz Options') item.set_image(gtk.image_new_from_stock('gtk-properties', gtk.ICON_SIZE_MENU)) submenu = CompizOptionMenu() item.set_submenu(submenu) if not options: item.set_sensitive(False) self.append(item) #Window Decorator item = gtk.ImageMenuItem('Select Window Decorator') item.set_image(gtk.image_new_from_stock('gtk-select-color', gtk.ICON_SIZE_MENU)) submenu = CompizDecoratorMenu() item.set_submenu(submenu) if not decorators: item.set_sensitive(False) self.append(item) item = gtk.SeparatorMenuItem() self.append(item) item = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT) item.connect('activate', self.quit_activate) self.append(item) def show_menu(self, widget, button, time): self.show_all() self.popup(None, None, gtk.status_icon_position_menu, button, time, icon) def reload_activate(self, widget): wms.restart() def quit_activate(self, widget): gtk.main_quit() class ApplicationItem(gtk.ImageMenuItem): def __init__(self, app): gtk.ImageMenuItem.__init__(self, apps[app].label) self.app = app if app not in apps: self.set_sensitive(False) self.connect('activate', self.activate) def activate(self, widget): apps[self.app].launch() class WindowManagerItem(gtk.RadioMenuItem): def __init__(self, wm, first_item=None): gtk.RadioMenuItem.__init__(self, label=' %s' %wms[wm].label) self.wm = wm if first_item: self.set_group(first_item) if wms.active == wm: self.set_active(True) self.connect('activate', self.activate) def activate(self, widget): if widget.get_active(): wms.active = self.wm wms.start() class WindowManagerMenu(gtk.Menu): def __init__(self): gtk.Menu.__init__(self) first = True for wm in wms.ordered_list: if first: first_item = WindowManagerItem(wm) self.append(first_item) first = False else: item = WindowManagerItem(wm, first_item) self.append(item) class CompizOptionItem(gtk.CheckMenuItem): def __init__(self, option): gtk.CheckMenuItem.__init__(self, label=' %s' %options[option].label) self.option = option self.set_active(options[option].enabled) if not options[option].sensitive: self.set_sensitive(False) self.connect('activate', self.activate) def activate(self, widget): options[self.option].enabled = widget.get_active() if wms.active == 'compiz': wms.start() class CompizOptionMenu(gtk.Menu): def __init__(self): gtk.Menu.__init__(self) for option in options: item = CompizOptionItem(option) self.append(item) class CompizDecoratorItem(gtk.RadioMenuItem): def __init__(self, decorator, first_item=None): gtk.RadioMenuItem.__init__(self, label=' %s' %decorators[decorator].label) self.decorator = decorator if first_item: self.set_group(first_item) if decorators.active == decorator: self.set_active(True) self.connect('activate', self.activate) def activate(self, widget): if widget.get_active(): decorators[self.decorator].kill_others() time.sleep(0.5) decorators.active = self.decorator class CompizDecoratorMenu(gtk.Menu): def __init__(self): gtk.Menu.__init__(self) first = True for decorator in decorators: if first: first_item = CompizDecoratorItem(decorator) self.append(first_item) first = False else: item = CompizDecoratorItem(decorator, first_item) self.append(item) icon = gtk.status_icon_new_from_icon_name('fusion-icon') icon.set_tooltip('Compiz Fusion Icon') menu = TrayMenu() icon.connect('popup-menu', menu.show_menu) # active wm (possibly) starts here init() gtk.main()