All pastes #826527 Raw Edit

Untitled

public text v1 · immutable
#826527 ·published 2007-12-21 07:05 UTC
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()