I am using the excellent PyGI AIO (3.14.0) binaries to develop with Gtk3 and Clutter on Windows. So far it has been working great. However, there seems to be a problem with pointer events not reaching the Clutter.Stage inside a GtkClutter.Embed widget. Here is the code:
import sys
from gi.repository import GtkClutter
GtkClutter.init(sys.argv)
from gi.repository import Clutter, Gdk, Gtk, GObject
def main():
win = Gtk.Window(Gtk.WindowType.TOPLEVEL)
# Works
#win.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
#win.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
#win.connect('motion-notify-event', lambda *args: sys.stdout.write("ME\n"))
embed = GtkClutter.Embed()
embed.set_size_request(800, 600)
# Works
#embed.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
#embed.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
#embed.connect('motion-notify-event', lambda *args: sys.stdout.write("ME\n"))
stage = embed.get_stage()
stage.set_reactive(True)
stage.set_size(800, 600)
stage.set_color(Clutter.Color.new(0, 128, 0, 255))
# Fails
stage.connect('button-press-event', lambda *args: sys.stdout.write("BP\n"))
stage.connect('button-release-event', lambda *args: sys.stdout.write("BR\n"))
stage.connect('motion-event', lambda *args: sys.stdout.write("ME\n"))
# Works (surprisingly...)
stage.connect('key-press-event', lambda *args: sys.stdout.write("KP\n"))
stage.connect('key-release-event', lambda *args: sys.stdout.write("KR\n"))
stage.show_all()
win.add(embed)
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
return 0
if __name__ == '__main__':
sys.exit(main())
Is the above code correct? I am wondering whether this is a Windows specific issue. Can anybody reproduce the problem on another OS?
I got this kind of report long time ago by a map apps developer. I suggest him to switch to gdk backend a.k.a
note: above should be done before other clutter stuff
it should catch events now but still all C examples are working fine without that workaround, so I'm clueless about why it doesn't work at binding level. I think your code also already comform gtk-clutter-test.c as well.