#!/usr/bin/env python

import gtk
from gobject import new

def show_notify(widget, event):
    """displays each incoming property notification event"""
#    print (event, event.type, event.window)
    if event.type != gtk.gdk.PROPERTY_NOTIFY: return
#    print (event.atom, event.time, event.state)
    if event.state == gtk.gdk.PROPERTY_NEW_VALUE:
        msg = w.window.property_get(event.atom, pdelete=event.atom == '_MESSAGE')
        if msg == None:
            return
        if type(msg[2]) == str:
            msg = msg[2].split('\0')
        else:
            msg = msg[2]
        if msg != None:
            print {event.atom: msg}
    else:
        print "%s deleted" % event.atom

# open a window
w = new(gtk.Window, title="Property listener")
w.set_default_size(300, 300)
w.show_all()

# subscribe to property change events
w.window.set_events(w.window.get_events() | gtk.gdk.PROPERTY_CHANGE_MASK)

w.connect('property-notify-event', show_notify)

# publish ourselves
root = gtk.gdk.get_default_root_window()
root.property_change("_PROPERTY_LISTENER", "WINDOW", 32, gtk.gdk.PROP_MODE_REPLACE, [w.window.xid])

# wait for and process events
gtk.main()


