GtkRevealer is, under the hood, a GtkBin that computes it’s size or opacity (as determined by the configured transition) from a GtkProgressTracker. Also in GTK3 it constructs it’s own GdkWindow, presumably so it can use the window manager (and possibly GPU) for compositing.
And GtkProgressTracker in turn takes a sequence of “frame times” to combine each with it’s stored previous frame time, the duration and a global slowdown, to compute the corresponding point on a linear or cubic curve.
Most elementary and GNOME3 apps have switched from using modal dialogs to GtkInfobars, thereby keeping everything in the same window and reducing interruption to your workflows. Odysseus uses it for permission prompts, in place of JS dialogs, and to ask to become your native browser on first launch if it isn’t already.
This is usually combined with a GtkRevealer and GtkLabel and positioned within a Gtk.Grid, though I add a GtkEntry for JS as well.
This morning I’ll describe GtkInfobar.
The GtkInfoBar is constructed from three GtkBox’s (deprecated in favor of GtkGrid), and connects the “connect” signal of the widgets in the rightmost box (especially GtkButtons) to one of it’s own.
The “message type” is communicated through a CSS class and the accessibility infrastructure.