diff --git a/FusionIcon/interface_gtk/main.py b/FusionIcon/interface_gtk/main.py index 0ac30be..00be427 100644 --- a/FusionIcon/interface_gtk/main.py +++ b/FusionIcon/interface_gtk/main.py @@ -22,15 +22,90 @@ 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) @@ -43,6 +118,7 @@ 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) @@ -55,10 +131,26 @@ class WindowManagerItem(gtk.RadioMenuItem): 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: @@ -70,10 +162,20 @@ class CompizOptionItem(gtk.CheckMenuItem): 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) @@ -87,98 +189,25 @@ class CompizDecoratorItem(gtk.RadioMenuItem): time.sleep(0.5) decorators.active = self.decorator -def show_menu(widget, button, time, menu): - menu.show_all() - menu.popup(None, None, gtk.status_icon_position_menu, button, time, icon) - -def reload_activate(widget): - wms.restart() - -def quit_activate(widget): - gtk.main_quit() - -menu = gtk.Menu() - -#CCSM -item = ApplicationItem('ccsm') -item.set_image(gtk.image_new_from_stock('gtk-preferences', gtk.ICON_SIZE_MENU)) -menu.append(item) - -#Emerald Theme Manager -item = ApplicationItem('emerald theme manager') -if 'emerald theme manager' in apps: - item.set_image(gtk.image_new_from_icon_name('emerald-theme-manager-icon', gtk.ICON_SIZE_MENU)) -menu.append(item) - -item = gtk.SeparatorMenuItem() -menu.append(item) - -#Reload -item = gtk.ImageMenuItem('Reload Window Manager') -item.connect('activate', reload_activate) -item.set_image(gtk.image_new_from_stock('gtk-refresh', gtk.ICON_SIZE_MENU)) -if not wms: - item.set_sensitive(False) -menu.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 = gtk.Menu() -first = True -for wm in wms.ordered_list: - if first: - first_item = WindowManagerItem(wm) - submenu.append(first_item) - first = False - else: - sitem = WindowManagerItem(wm, first_item) - submenu.append(sitem) -item.set_submenu(submenu) -if not wms: - item.set_sensitive(False) -menu.append(item) - -#Compiz Options -item = gtk.ImageMenuItem('Compiz Options') -item.set_image(gtk.image_new_from_stock('gtk-properties', gtk.ICON_SIZE_MENU)) -submenu = gtk.Menu() -for option in options: - sitem = CompizOptionItem(option) - submenu.append(sitem) -item.set_submenu(submenu) -if not options: - item.set_sensitive(False) -menu.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 = gtk.Menu() -first = True -for decorator in decorators: - if first: - first_item = CompizDecoratorItem(decorator) - submenu.append(first_item) - first = False - else: - sitem = CompizDecoratorItem(decorator, first_item) - submenu.append(sitem) -item.set_submenu(submenu) -if not decorators: - item.set_sensitive(False) -menu.append(item) - -item = gtk.SeparatorMenuItem() -menu.append(item) - -item = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT) -item.connect('activate', quit_activate) -menu.append(item) +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') -icon.connect('popup-menu', show_menu, menu) +menu = TrayMenu() +icon.connect('popup-menu', menu.show_menu) # active wm (possibly) starts here init() diff --git a/FusionIcon/interface_qt4/main.py b/FusionIcon/interface_qt4/main.py index 36207dc..e454971 100644 --- a/FusionIcon/interface_qt4/main.py +++ b/FusionIcon/interface_qt4/main.py @@ -66,7 +66,8 @@ class Build(QtGui.QApplication): self.Tray.menu.addAction(apps['ccsm'].label, lambda: run(['ccsm'])) if 'emerald theme manager' in apps: self.Tray.menu.addAction(apps['emerald theme manager'].label, lambda: run(apps['emerald theme manager'].command)) - self.Tray.menu.addSeparator() + if 'ccsm' in apps or 'emerald theme manager' in apps: + self.Tray.menu.addSeparator() self.Tray.menu.addAction("Reload Window Manager", self.reload_wm) self.Tray.menu.addAction("Select Window Manager").setMenu(self.Tray.managerMenu) self.Tray.menu.addAction("Compiz Options").setMenu(self.Tray.optionsMenu) |