assistant: Convert child properties to a child meta object

Turn GtkAssistantPage into a public object holding the
former child properties.
This commit is contained in:
Matthias Clasen
2019-02-07 15:18:49 -05:00
parent edd3f28a1d
commit ce60089f46
4 changed files with 316 additions and 157 deletions

View File

@@ -211,8 +211,11 @@ gtk_adjustment_get_type
<FILE>gtkassistant</FILE>
<TITLE>GtkAssistant</TITLE>
GtkAssistant
GtkAssistantPage
GtkAssistantClass
gtk_assistant_new
gtk_assistant_get_page
gtk_assistant_page_get_child
gtk_assistant_get_current_page
gtk_assistant_set_current_page
gtk_assistant_get_n_pages

View File

@@ -14,6 +14,7 @@ gtk_application_get_type
gtk_application_window_get_type
gtk_aspect_frame_get_type
gtk_assistant_get_type
gtk_assistant_page_get_type
gtk_bin_get_type
gtk_box_get_type
gtk_builder_get_type

View File

@@ -41,6 +41,10 @@
* handling buttons, you can use the #GTK_ASSISTANT_PAGE_CUSTOM page
* type and handle buttons yourself.
*
* GtkAssistant maintains a #GtkAssistantPage object for each added
* child, which holds additional per-child properties. You
* obtain the #GtkAssistantPage for a child with gtk_assistant_get_page().
*
* # GtkAssistant as GtkBuildable
*
* The GtkAssistant implementation of the #GtkBuildable interface
@@ -48,8 +52,9 @@
* “action_area”.
*
* To add pages to an assistant in #GtkBuilder, simply add it as a
* child to the GtkAssistant object, and set its child properties
* as necessary.
* child to the GtkAssistant object. If you need to set per-object
* properties, create a #GtkAssistantPage object explicitly, and
* set the child widget as a property on it.
*
* # CSS nodes
*
@@ -79,10 +84,9 @@
#include "a11y/gtkwindowaccessible.h"
typedef struct _GtkAssistantPage GtkAssistantPage;
struct _GtkAssistantPage
{
GObject instance;
GtkAssistantPageType type;
guint complete : 1;
guint complete_set : 1;
@@ -96,6 +100,11 @@ struct _GtkAssistantPage
GtkWidget *current_title;
};
struct _GtkAssistantPageClass
{
GObjectClass parent_class;
};
struct _GtkAssistantPrivate
{
GtkWidget *cancel;
@@ -137,18 +146,20 @@ static void gtk_assistant_add (GtkContainer *container,
GtkWidget *page);
static void gtk_assistant_remove (GtkContainer *container,
GtkWidget *page);
static void gtk_assistant_set_child_property (GtkContainer *container,
GtkWidget *child,
static void gtk_assistant_page_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gtk_assistant_get_child_property (GtkContainer *container,
GtkWidget *child,
static void gtk_assistant_page_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gtk_assistant_buildable_interface_init (GtkBuildableIface *iface);
static void gtk_assistant_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
const char *type);
static gboolean gtk_assistant_buildable_custom_tag_start (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
@@ -180,17 +191,107 @@ static void assistant_remove_page_cb (GtkContainer *con
GtkWidget *page,
GtkAssistant *assistant);
static int gtk_assistant_add_page (GtkAssistant *assistant,
GtkAssistantPage *page_info,
gint position);
GType _gtk_assistant_accessible_get_type (void);
enum
{
CHILD_PROP_0,
CHILD_PROP_CHILD,
CHILD_PROP_PAGE_TYPE,
CHILD_PROP_PAGE_TITLE,
CHILD_PROP_PAGE_COMPLETE,
CHILD_PROP_HAS_PADDING
};
G_DEFINE_TYPE (GtkAssistantPage, gtk_assistant_page, G_TYPE_OBJECT)
static void
gtk_assistant_page_init (GtkAssistantPage *page)
{
page->type = GTK_ASSISTANT_PAGE_CONTENT;
}
static void
gtk_assistant_page_finalize (GObject *object)
{
GtkAssistantPage *page = GTK_ASSISTANT_PAGE (object);
g_clear_object (&page->page);
g_free (page->title);
G_OBJECT_CLASS (gtk_assistant_page_parent_class)->finalize (object);
}
static void
gtk_assistant_page_class_init (GtkAssistantPageClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->finalize = gtk_assistant_page_finalize;
object_class->get_property = gtk_assistant_page_get_property;
object_class->set_property = gtk_assistant_page_set_property;
/**
* GtkAssistantPage:page-type:
*
* The type of the assistant page.
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_TYPE,
g_param_spec_enum ("page-type",
P_("Page type"),
P_("The type of the assistant page"),
GTK_TYPE_ASSISTANT_PAGE_TYPE,
GTK_ASSISTANT_PAGE_CONTENT,
GTK_PARAM_READWRITE));
/**
* GtkAssistantPage:title:
*
* The title of the page.
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_TITLE,
g_param_spec_string ("title",
P_("Page title"),
P_("The title of the assistant page"),
NULL,
GTK_PARAM_READWRITE));
/**
* GtkAssistantPage:complete:
*
* Setting the "complete" property to %TRUE marks a page as
* complete (i.e.: all the required fields are filled out). GTK+ uses
* this information to control the sensitivity of the navigation buttons.
*/
g_object_class_install_property (object_class,
CHILD_PROP_PAGE_COMPLETE,
g_param_spec_boolean ("complete",
P_("Page complete"),
P_("Whether all required fields on the page have been filled out"),
FALSE,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
CHILD_PROP_HAS_PADDING,
g_param_spec_boolean ("has-padding",
P_("Has padding"),
P_("Whether the assistant adds padding around the page"),
TRUE,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
CHILD_PROP_CHILD,
g_param_spec_object ("child",
P_("Child widget"),
P_("The content the assistant page"),
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
}
enum
{
CANCEL,
@@ -395,8 +496,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
container_class->add = gtk_assistant_add;
container_class->remove = gtk_assistant_remove;
container_class->set_child_property = gtk_assistant_set_child_property;
container_class->get_child_property = gtk_assistant_get_child_property;
window_class->close_request = gtk_assistant_close_request;
@@ -506,51 +605,6 @@ gtk_assistant_class_init (GtkAssistantClass *class)
-1, 1, -1,
GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY));
/**
* GtkAssistant:page-type:
*
* The type of the assistant page.
*/
gtk_container_class_install_child_property (container_class,
CHILD_PROP_PAGE_TYPE,
g_param_spec_enum ("page-type",
P_("Page type"),
P_("The type of the assistant page"),
GTK_TYPE_ASSISTANT_PAGE_TYPE,
GTK_ASSISTANT_PAGE_CONTENT,
GTK_PARAM_READWRITE));
/**
* GtkAssistant:title:
*
* The title of the page.
*/
gtk_container_class_install_child_property (container_class,
CHILD_PROP_PAGE_TITLE,
g_param_spec_string ("title",
P_("Page title"),
P_("The title of the assistant page"),
NULL,
GTK_PARAM_READWRITE));
/**
* GtkAssistant:complete:
*
* Setting the "complete" child property to %TRUE marks a page as
* complete (i.e.: all the required fields are filled out). GTK+ uses
* this information to control the sensitivity of the navigation buttons.
*/
gtk_container_class_install_child_property (container_class,
CHILD_PROP_PAGE_COMPLETE,
g_param_spec_boolean ("complete",
P_("Page complete"),
P_("Whether all required fields on the page have been filled out"),
FALSE,
G_PARAM_READWRITE));
gtk_container_class_install_child_property (container_class, CHILD_PROP_HAS_PADDING,
g_param_spec_boolean ("has-padding", P_("Has padding"), P_("Whether the assistant adds padding around the page"),
TRUE, G_PARAM_READWRITE));
/* Bind class to template
*/
@@ -1019,9 +1073,9 @@ alternative_button_order (GtkAssistant *assistant)
}
static void
on_page_notify (GtkWidget *widget,
GParamSpec *arg,
gpointer data)
on_page_page_notify (GtkWidget *widget,
GParamSpec *arg,
gpointer data)
{
GtkAssistant *assistant = GTK_ASSISTANT (data);
@@ -1032,6 +1086,15 @@ on_page_notify (GtkWidget *widget,
}
}
static void
on_page_notify (GtkAssistantPage *page,
GParamSpec *arg,
gpointer data)
{
if (page->page)
on_page_page_notify (page->page, arg, data);
}
static void
assistant_remove_page_cb (GtkContainer *container,
GtkWidget *page,
@@ -1072,7 +1135,8 @@ assistant_remove_page_cb (GtkContainer *container,
}
}
g_signal_handlers_disconnect_by_func (page_info->page, on_page_notify, assistant);
g_signal_handlers_disconnect_by_func (page_info->page, on_page_page_notify, assistant);
g_signal_handlers_disconnect_by_func (page_info, on_page_notify, assistant);
gtk_size_group_remove_widget (priv->title_size_group, page_info->regular_title);
gtk_size_group_remove_widget (priv->title_size_group, page_info->current_title);
@@ -1083,9 +1147,8 @@ assistant_remove_page_cb (GtkContainer *container,
priv->pages = g_list_remove_link (priv->pages, element);
priv->visited_pages = g_slist_remove_all (priv->visited_pages, page_info);
g_free (page_info->title);
g_object_unref (page_info);
g_slice_free (GtkAssistantPage, page_info);
g_list_free_1 (element);
if (gtk_widget_get_mapped (GTK_WIDGET (assistant)))
@@ -1132,65 +1195,121 @@ gtk_assistant_init (GtkAssistant *assistant)
}
static void
gtk_assistant_set_child_property (GtkContainer *container,
GtkWidget *child,
guint property_id,
const GValue *value,
GParamSpec *pspec)
gtk_assistant_page_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GtkAssistantPage *page = GTK_ASSISTANT_PAGE (object);
GtkWidget *assistant = NULL;
if (page->page)
assistant = gtk_widget_get_ancestor (page->page, GTK_TYPE_ASSISTANT);
switch (property_id)
{
case CHILD_PROP_CHILD:
g_set_object (&page->page, g_value_get_object (value));
break;
case CHILD_PROP_PAGE_TYPE:
gtk_assistant_set_page_type (GTK_ASSISTANT (container), child,
g_value_get_enum (value));
if (page->type != g_value_get_enum (value))
{
page->type = g_value_get_enum (value);
/* backwards compatibility to the era before fixing bug 604289 */
if (page->type == GTK_ASSISTANT_PAGE_SUMMARY && !page->complete_set)
{
page->complete = TRUE;
page->complete_set = FALSE;
}
/* Always set buttons state, a change in a future page
* might change current page buttons
*/
if (assistant)
update_buttons_state (GTK_ASSISTANT (assistant));
g_object_notify (G_OBJECT (page), "page-type");
}
break;
case CHILD_PROP_PAGE_TITLE:
gtk_assistant_set_page_title (GTK_ASSISTANT (container), child,
g_value_get_string (value));
g_free (page->title);
page->title = g_value_dup_string (value);
if (assistant)
{
gtk_label_set_text ((GtkLabel*) page->regular_title, page->title);
gtk_label_set_text ((GtkLabel*) page->current_title, page->title);
update_title_state (GTK_ASSISTANT (assistant));
}
g_object_notify (G_OBJECT (page), "title");
break;
case CHILD_PROP_PAGE_COMPLETE:
gtk_assistant_set_page_complete (GTK_ASSISTANT (container), child,
g_value_get_boolean (value));
if (page->complete != g_value_get_boolean (value))
{
page->complete = g_value_get_boolean (value);
page->complete_set = TRUE;
/* Always set buttons state, a change in a future page
* might change current page buttons
*/
if (assistant)
update_buttons_state (GTK_ASSISTANT (assistant));
g_object_notify (G_OBJECT (page), "complete");
}
break;
case CHILD_PROP_HAS_PADDING:
gtk_assistant_set_page_has_padding (GTK_ASSISTANT (container), child,
g_value_get_boolean (value));
if (page->has_padding != g_value_get_boolean (value))
{
page->has_padding = g_value_get_boolean (value);
g_object_set (page->box, "margin", page->has_padding ? 12 : 0, NULL);
g_object_notify (G_OBJECT (page), "has-padding");
}
break;
default:
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gtk_assistant_get_child_property (GtkContainer *container,
GtkWidget *child,
guint property_id,
GValue *value,
GParamSpec *pspec)
gtk_assistant_page_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GtkAssistant *assistant = GTK_ASSISTANT (container);
GtkAssistantPage *page = GTK_ASSISTANT_PAGE (object);
switch (property_id)
{
case CHILD_PROP_CHILD:
g_value_set_object (value, page->page);
break;
case CHILD_PROP_PAGE_TYPE:
g_value_set_enum (value,
gtk_assistant_get_page_type (assistant, child));
g_value_set_enum (value, page->type);
break;
case CHILD_PROP_PAGE_TITLE:
g_value_set_string (value,
gtk_assistant_get_page_title (assistant, child));
g_value_set_string (value, page->title);
break;
case CHILD_PROP_PAGE_COMPLETE:
g_value_set_boolean (value,
gtk_assistant_get_page_complete (assistant, child));
g_value_set_boolean (value, page->complete);
break;
case CHILD_PROP_HAS_PADDING:
g_value_set_boolean (value,
gtk_assistant_get_page_has_padding (assistant, child));
g_value_set_boolean (value, page->has_padding);
break;
default:
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
@@ -1342,13 +1461,14 @@ gtk_assistant_add (GtkContainer *container,
* For the first invocation (from the builder template invocation),
* let's make sure we add the actual direct container content properly.
*/
if (!gtk_bin_get_child (GTK_BIN (container)))
if (!GTK_ASSISTANT (container)->priv->constructed)
{
gtk_widget_set_parent (page, GTK_WIDGET (container));
_gtk_bin_set_child (GTK_BIN (container), page);
return;
}
g_print ("after template init\n");
gtk_assistant_append_page (GTK_ASSISTANT (container), page);
}
@@ -1639,25 +1759,33 @@ gtk_assistant_insert_page (GtkAssistant *assistant,
GtkWidget *page,
gint position)
{
GtkAssistantPrivate *priv;
GtkAssistantPage *page_info;
gint n_pages;
GtkStyleContext *context;
GtkWidget *box;
GtkWidget *sibling;
g_return_val_if_fail (GTK_IS_ASSISTANT (assistant), 0);
g_return_val_if_fail (GTK_IS_WIDGET (page), 0);
g_return_val_if_fail (gtk_widget_get_parent (page) == NULL, 0);
g_return_val_if_fail (!gtk_widget_is_toplevel (page), 0);
priv = assistant->priv;
page_info = g_slice_new0 (GtkAssistantPage);
page_info->page = page;
page_info->regular_title = gtk_label_new (NULL);
page_info = g_object_new (GTK_TYPE_ASSISTANT_PAGE, NULL);
page_info->page = g_object_ref (page);
page_info->has_padding = TRUE;
page_info->current_title = gtk_label_new (NULL);
return gtk_assistant_add_page (assistant, page_info, position);
}
static int
gtk_assistant_add_page (GtkAssistant *assistant,
GtkAssistantPage *page_info,
gint position)
{
GtkAssistantPrivate *priv = assistant->priv;
gint n_pages;
GtkStyleContext *context;
GtkWidget *box;
GtkWidget *sibling;
page_info->regular_title = gtk_label_new (page_info->title);
page_info->current_title = gtk_label_new (page_info->title);
gtk_label_set_xalign (GTK_LABEL (page_info->regular_title), 0.0);
gtk_label_set_xalign (GTK_LABEL (page_info->current_title), 0.0);
@@ -1671,13 +1799,13 @@ gtk_assistant_insert_page (GtkAssistant *assistant,
gtk_size_group_add_widget (priv->title_size_group, page_info->regular_title);
gtk_size_group_add_widget (priv->title_size_group, page_info->current_title);
g_signal_connect (G_OBJECT (page), "notify::visible",
g_signal_connect (G_OBJECT (page_info->page), "notify::visible",
G_CALLBACK (on_page_page_notify), assistant);
g_signal_connect (G_OBJECT (page_info), "notify::page-title",
G_CALLBACK (on_page_notify), assistant);
g_signal_connect (G_OBJECT (page), "child-notify::page-title",
G_CALLBACK (on_page_notify), assistant);
g_signal_connect (G_OBJECT (page), "child-notify::page-type",
g_signal_connect (G_OBJECT (page_info), "notify::page-type",
G_CALLBACK (on_page_notify), assistant);
n_pages = g_list_length (priv->pages);
@@ -1702,7 +1830,7 @@ gtk_assistant_insert_page (GtkAssistant *assistant,
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_show (box);
gtk_container_add (GTK_CONTAINER (box), page);
gtk_container_add (GTK_CONTAINER (box), page_info->page);
g_object_set (box, "margin", 12, NULL);
g_signal_connect (box, "remove", G_CALLBACK (assistant_remove_page_cb), assistant);
@@ -1893,15 +2021,7 @@ gtk_assistant_set_page_title (GtkAssistant *assistant,
page_info = (GtkAssistantPage*) child->data;
g_free (page_info->title);
page_info->title = g_strdup (title);
gtk_label_set_text ((GtkLabel*) page_info->regular_title, title);
gtk_label_set_text ((GtkLabel*) page_info->current_title, title);
update_title_state (assistant);
gtk_container_child_notify (GTK_CONTAINER (assistant), page, "title");
g_object_set (page_info, "title", title, NULL);
}
/**
@@ -1959,24 +2079,7 @@ gtk_assistant_set_page_type (GtkAssistant *assistant,
page_info = (GtkAssistantPage*) child->data;
if (type != page_info->type)
{
page_info->type = type;
/* backwards compatibility to the era before fixing bug 604289 */
if (type == GTK_ASSISTANT_PAGE_SUMMARY && !page_info->complete_set)
{
gtk_assistant_set_page_complete (assistant, page, TRUE);
page_info->complete_set = FALSE;
}
/* Always set buttons state, a change in a future page
* might change current page buttons
*/
update_buttons_state (assistant);
gtk_container_child_notify (GTK_CONTAINER (assistant), page, "page-type");
}
g_object_set (page_info, "page-type", type, NULL);
}
/**
@@ -2035,18 +2138,7 @@ gtk_assistant_set_page_complete (GtkAssistant *assistant,
page_info = (GtkAssistantPage*) child->data;
if (complete != page_info->complete)
{
page_info->complete = complete;
page_info->complete_set = TRUE;
/* Always set buttons state, a change in a future page
* might change current page buttons
*/
update_buttons_state (assistant);
gtk_container_child_notify (GTK_CONTAINER (assistant), page, "complete");
}
g_object_set (page_info, "complete", complete, NULL);
}
/**
@@ -2103,16 +2195,7 @@ gtk_assistant_set_page_has_padding (GtkAssistant *assistant,
page_info = (GtkAssistantPage*) child->data;
if (page_info->has_padding != has_padding)
{
page_info->has_padding = has_padding;
g_object_set (page_info->box,
"margin", has_padding ? 12 : 0,
NULL);
gtk_container_child_notify (GTK_CONTAINER (assistant), page, "has-padding");
}
g_object_set (page_info, "has-padding", has_padding, NULL);
}
/**
@@ -2285,6 +2368,27 @@ gtk_assistant_buildable_interface_init (GtkBuildableIface *iface)
parent_buildable_iface = g_type_interface_peek_parent (iface);
iface->custom_tag_start = gtk_assistant_buildable_custom_tag_start;
iface->custom_finished = gtk_assistant_buildable_custom_finished;
iface->add_child = gtk_assistant_buildable_add_child;
}
static void
gtk_assistant_buildable_add_child (GtkBuildable *buildable,
GtkBuilder *builder,
GObject *child,
const char *type)
{
if (GTK_IS_ASSISTANT_PAGE (child))
gtk_assistant_add_page (GTK_ASSISTANT (buildable), GTK_ASSISTANT_PAGE (child), -1);
else if (type && g_str_equal (type, "titlebar"))
{
GtkAssistant *assistant = GTK_ASSISTANT (buildable);
assistant->priv->headerbar = GTK_WIDGET (child);
gtk_window_set_titlebar (GTK_WINDOW (buildable), assistant->priv->headerbar);
}
else if (GTK_IS_WIDGET (child))
gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child));
else
g_warning ("Can't add a child of type '%s' to '%s'", G_OBJECT_TYPE_NAME (child), G_OBJECT_TYPE_NAME (buildable));
}
gboolean
@@ -2309,3 +2413,36 @@ gtk_assistant_buildable_custom_finished (GtkBuildable *buildable,
parent_buildable_iface->custom_finished (buildable, builder, child,
tagname, user_data);
}
/**
* gtk_assistant_get_page:
* @assistant: a #GtkAssistant
* @child: a child of @assistant
*
* Returns the #GtkAssistantPage object for @child.
*
* Returns: (transfer none): the #GtkAssistantPage for @child
*/
GtkAssistantPage *
gtk_assistant_get_page (GtkAssistant *assistant,
GtkWidget *child)
{
GList *page_info = find_page (assistant, child);
return (GtkAssistantPage *) (page_info ? page_info->data : NULL);
}
/**
* gtk_assistant_page_get_child:
* @page: a #GtkAssistantPage
*
* Returns the child to which @page belongs.
*
* Returns: (transfer none): the child to which @page belongs
*/
GtkWidget *
gtk_assistant_page_get_child (GtkAssistantPage *page)
{
return page->page;
}

View File

@@ -118,6 +118,16 @@ struct _GtkAssistantClass
void (*_gtk_reserved5) (void);
};
#define GTK_TYPE_ASSISTANT_PAGE (gtk_assistant_page_get_type ())
#define GTK_ASSISTANT_PAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ASSISTANT_PAGE, GtkAssistantPage))
#define GTK_ASSISTANT_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ASSISTANT_PAGE, GtkAssistantPageClass))
#define GTK_IS_ASSISTANT_PAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ASSISTANT_PAGE))
#define GTK_IS_ASSISTANT_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ASSISTANT_PAGE))
#define GTK_ASSISTANT_PAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ASSISTANT_PAGE, GtkAssistantPageClass))
typedef struct _GtkAssistantPage GtkAssistantPage;
typedef struct _GtkAssistantPageClass GtkAssistantPageClass;
/**
* GtkAssistantPageFunc:
* @current_page: The page number used to calculate the next page.
@@ -132,6 +142,8 @@ struct _GtkAssistantClass
*/
typedef gint (*GtkAssistantPageFunc) (gint current_page, gpointer data);
GDK_AVAILABLE_IN_ALL
GType gtk_assistant_page_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GType gtk_assistant_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
@@ -209,6 +221,12 @@ void gtk_assistant_set_page_has_padding (GtkAssistant *assista
GDK_AVAILABLE_IN_ALL
gboolean gtk_assistant_get_page_has_padding (GtkAssistant *assistant,
GtkWidget *page);
GDK_AVAILABLE_IN_ALL
GtkAssistantPage * gtk_assistant_get_page (GtkAssistant *assistant,
GtkWidget *child);
GDK_AVAILABLE_IN_ALL
GtkWidget * gtk_assistant_page_get_child (GtkAssistantPage *page);
G_END_DECLS