+static void
+child_properties (GtkWidget *button,
+ GObject *object)
+{
+ create_prop_editor (object, 0);
+}
+
+static GtkWidget *
+children_from_object (GObject *object)
+{
+ GList *children, *c;
+ GtkWidget *grid, *label, *prop_edit, *button, *vbox, *sw;
+ gchar *str;
+ gint i;
+
+ if (!GTK_IS_CONTAINER (object))
+ return NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (object));
+
+ grid = gtk_grid_new ();
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
+ gtk_grid_set_row_spacing (GTK_GRID (grid), 3);
+
+ for (c = children, i = 0; c; c = c->next, i++)
+ {
+ object = c->data;
+
+ label = gtk_label_new ("Child");
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_grid_attach (GTK_GRID (grid), label, 0, i, 1, 1);
+
+ prop_edit = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
+
+ str = object_label (object, NULL);
+ label = gtk_label_new (str);
+ g_free (str);
+ button = gtk_button_new_with_label ("Properties");
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (child_properties),
+ object);
+
+ gtk_container_add (GTK_CONTAINER (prop_edit), label);
+ gtk_container_add (GTK_CONTAINER (prop_edit), button);
+
+ gtk_grid_attach (GTK_GRID (grid), prop_edit, 1, i, 1, 1);
+ }
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+ gtk_container_add (GTK_CONTAINER (sw), vbox);
+
+ g_list_free (children);
+
+ return sw;
+}
+
+static GtkWidget *
+cells_from_object (GObject *object)
+{
+ GList *cells, *c;
+ GtkWidget *grid, *label, *prop_edit, *button, *vbox, *sw;
+ gchar *str;
+ gint i;
+
+ if (!GTK_IS_CELL_LAYOUT (object))
+ return NULL;
+
+ cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (object));
+
+ grid = gtk_grid_new ();
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
+ gtk_grid_set_row_spacing (GTK_GRID (grid), 3);
+
+ for (c = cells, i = 0; c; c = c->next, i++)
+ {
+ object = c->data;
+
+ label = gtk_label_new ("Cell");
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_grid_attach (GTK_GRID (grid), label, 0, i, 1, 1);
+
+ prop_edit = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
+
+ str = object_label (object, NULL);
+ label = gtk_label_new (str);
+ g_free (str);
+ button = gtk_button_new_with_label ("Properties");
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (child_properties),
+ object);
+
+ gtk_container_add (GTK_CONTAINER (prop_edit), label);
+ gtk_container_add (GTK_CONTAINER (prop_edit), button);
+
+ gtk_grid_attach (GTK_GRID (grid), prop_edit, 1, i, 1, 1);
+ }
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0);
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+ gtk_container_add (GTK_CONTAINER (sw), vbox);
+
+ g_list_free (cells);
+
+ return sw;
+}
+
+static void
+open_parent_widget (GtkWidget *button,
+ GObject *object)
+{
+ GtkWidget *parent;
+
+ parent = gtk_widget_get_parent (GTK_WIDGET (object));
+ if (parent != NULL)
+ create_prop_editor (G_OBJECT (parent), 0);
+}
+