container: Add snapshot() implementation

Note that this implementation does not respect GDK windows at all. If
your widget requires respecting them, you should write your own
snapshot implementation and not chain up.
This commit is contained in:
Benjamin Otte 2016-11-13 16:50:24 +01:00
parent 2cd9e5170e
commit ae2477b1bc

View File

@ -325,6 +325,8 @@ static void gtk_container_children_callback (GtkWidget *widget,
static void gtk_container_show_all (GtkWidget *widget);
static gint gtk_container_draw (GtkWidget *widget,
cairo_t *cr);
static void gtk_container_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot);
static void gtk_container_map (GtkWidget *widget);
static void gtk_container_unmap (GtkWidget *widget);
static GtkSizeRequestMode gtk_container_get_request_mode (GtkWidget *widget);
@ -462,6 +464,7 @@ gtk_container_class_init (GtkContainerClass *class)
widget_class->destroy = gtk_container_destroy;
widget_class->compute_expand = gtk_container_compute_expand;
widget_class->show_all = gtk_container_show_all;
widget_class->snapshot = gtk_container_snapshot;
widget_class->draw = gtk_container_draw;
widget_class->map = gtk_container_map;
widget_class->unmap = gtk_container_unmap;
@ -3078,6 +3081,26 @@ gtk_container_draw (GtkWidget *widget,
return FALSE;
}
static void
gtk_container_snapshot_forall (GtkWidget *child,
gpointer snapshot)
{
gtk_container_snapshot_child (GTK_CONTAINER (_gtk_widget_get_parent (child)),
child,
snapshot);
}
static void
gtk_container_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot)
{
GtkContainer *container = GTK_CONTAINER (widget);
gtk_container_forall (container,
gtk_container_snapshot_forall,
snapshot);
}
static void
gtk_container_map_child (GtkWidget *child,
gpointer client_data)