rendered paste body#!/usr/bin/env python
import gtk
import dbus, dbus.service
from dbus.mainloop.glib import DBusGMainLoop
import optparse
interface = 'org.compiz_fusion.deskmenu'
service = 'org.compiz_fusion.deskmenu'
class DeskMenu(gtk.Menu):
def __init__(self):
gtk.Menu.__init__(self)
item = gtk.ImageMenuItem('Foo')
item.connect('activate', self.reload_activate)
item.props.image = gtk.image_new_from_stock('gtk-refresh', gtk.ICON_SIZE_MENU)
self.append(item)
item = gtk.ImageMenuItem('Bar')
item.connect('activate', self.reload_activate)
item.props.image = gtk.image_new_from_stock('gtk-stop', gtk.ICON_SIZE_MENU)
self.append(item)
item = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT)
item.connect('activate', self.quit_activate)
self.append(item)
def quit_activate(self, widget):
gtk.main_quit()
def show_menu(self):
self.show_all()
self.popup(None, None, None, 0, 0)
def reload_activate(self, widget):
pass
class DeskMenuObject(dbus.service.Object):
@dbus.service.method(interface, in_signature='', out_signature='')
def show(self):
menu.show_menu()
parser = optparse.OptionParser()
parser.add_option('--launched-by-dbus', action='store_true', dest='dbus_launch', help='internal use')
options, args = parser.parse_args()
DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
if options.dbus_launch:
# make menu
name = dbus.service.BusName(service, session_bus)
menu = DeskMenu()
deskmenu = DeskMenuObject(session_bus, '/org/compiz_fusion/deskmenu/menu')
gtk.main()
else:
# show it
obj = session_bus.get_object(interface, '/org/compiz_fusion/deskmenu/menu')
deskmenu = dbus.Interface(obj, interface)
deskmenu.show()