Routing scroll events in a Gtk.Overlay



Hi all,

I'm working on a Gtk project (3.10, Python 2 for the prototype, if that matters) using a Gtk.Overlay [1]. The main child of the overlay is a WebKit.WebView. The overlaid widget is a Gtk.EventBox that contains a number of children, grand-children, etc. Right now, scroll events outside of the EventBox go to the WebView, as desired, but scroll events inside the EventBox go to one of it's children. Instead, I would like all of these scroll events to go to the WebView as well, so scrolling doesn't break when the EventBox moves under the pointer.

The only way I've gotten this to work is to recursively attach a scroll-event handler to all the descendants of the EventBox that stops the event and instead creates a scroll event on the WebView. This works, but it's inelegant. I'm hoping there's a way to do this more simply, whether through the EventBox or the Overlay itself.

One idea that sort of worked was to set EventBox.set_above_child(True). This ensured that the EventBox got all the scroll events over any of its descendants, so it was easy to pass them on to the WebView. But it also captured all other events, which I want to go through to the children. Is there some way to tell the EventBox to only capture scroll events? Or is there another way to do this?

Thanks,
Robert

[1] Well, actually the Overlay is a custom class inheriting from Gtk.Overlay and implementing Gtk.Scrollable by passing through the adjustments of the WebView. This is to allow the whole thing to sit in a Gtk.ScrolledWindow that moves both the WebView and the overlaid widget together. I hope that doesn't make a difference, but maybe it does.




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]