summaryrefslogtreecommitdiffstats
path: root/FusionIcon/interface_gtk/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'FusionIcon/interface_gtk/main.py')
-rw-r--r--FusionIcon/interface_gtk/main.py214
1 files changed, 214 insertions, 0 deletions
diff --git a/FusionIcon/interface_gtk/main.py b/FusionIcon/interface_gtk/main.py
new file mode 100644
index 0000000..6cf1f5a
--- /dev/null
+++ b/FusionIcon/interface_gtk/main.py
@@ -0,0 +1,214 @@
+# 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 <http://www.gnu.org/licenses/>.
+#
+# Based on compiz-icon, Copyright 2007 Felix Bellanger <keeguon@gmail.com>
+#
+# Author(s): crdlb
+# Copyright 2007 Christopher Williams <christopherw@verizon.net>
+
+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()
+