#!/usr/bin/python3

import dbus
import dbus.service
import gi
import setproctitle
from gi.repository import GLib
from dbus.mainloop.glib import DBusGMainLoop

class AppmenuService(dbus.service.Object):
    def __init__(self):
        bus_name = dbus.service.BusName('com.canonical.AppMenu.Registrar', bus = dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, '/com/canonical/AppMenu/Registrar')
        self.window_dict = dict()

    @dbus.service.method('com.canonical.AppMenu.Registrar',
                         in_signature='uo',
                         sender_keyword='sender')
    def RegisterWindow(self, windowId, menuObjectPath, sender):
        self.window_dict[windowId] = (sender, menuObjectPath)

    @dbus.service.method('com.canonical.AppMenu.Registrar',
                         in_signature='u',
                         out_signature='so')
    def GetMenuForWindow(self, windowId):
        if windowId in self.window_dict:
            sender, menuObjectPath = self.window_dict[windowId]
        return [dbus.String(sender), dbus.ObjectPath(menuObjectPath)]

    @dbus.service.method('com.canonical.AppMenu.Registrar')
    def Q(self):
        GLib.MainLoop().quit()

if __name__ == "__main__":
    setproctitle.setproctitle('mate-hud-service')
    DBusGMainLoop(set_as_default=True)
    mate_hud_service = AppmenuService()
    GLib.MainLoop().run()