Skip to content

Frame clock consumers

Jonas Ådahl requested to merge jadahl/gtk:wip/frame-clock-consumers into master

This changes the frame clock users to "consume" events instead of actively freezing the clock. What it means is that each surface, when updates are not frozen, notifies the frame clock that it wants to consume ticks. When a frame clock has one or more consumers, it is active. If all consumers are removed (e.g. all surfaces using it have their updates frozen), then the frame clock is frozen.

This is currently somewhat lazily done. The frame clock itself is controlled internally via "freezing" and "thawing", but the API used by the rest of Gdk uses inc_consumer() and dec_consumer(). On construction, the frameclock freezes itself, as there are no consumers at construction.

This MR also reverts the toplevel-drives-children change, so that the toplevel can be frozen, but popups still be rendered.

While at it, it also adds back the testpopupat. Let me know if it should be split out.

Merge request reports