1 | /* Constraints/Builder |
2 | * |
3 | * GtkConstraintLayouts can be created in .ui files, and constraints can |
4 | * be set up at that time as well, as this example demonstrates. It shows |
5 | * various ways to do spacing and sizing with constraints. |
6 | * |
7 | * Make the window wider to see the rows react differently |
8 | */ |
9 | |
10 | #include <glib/gi18n.h> |
11 | #include <gtk/gtk.h> |
12 | |
13 | G_DECLARE_FINAL_TYPE (ConstraintsGrid, constraints_grid, CONSTRAINTS, GRID, GtkWidget) |
14 | |
15 | struct _ConstraintsGrid |
16 | { |
17 | GtkWidget parent_instance; |
18 | }; |
19 | |
20 | G_DEFINE_TYPE (ConstraintsGrid, constraints_grid, GTK_TYPE_WIDGET) |
21 | |
22 | static void |
23 | constraints_grid_init (ConstraintsGrid *grid) |
24 | { |
25 | } |
26 | |
27 | static void |
28 | constraints_grid_dispose (GObject *object) |
29 | { |
30 | GtkWidget *widget = GTK_WIDGET (object); |
31 | GtkWidget *child; |
32 | |
33 | while ((child = gtk_widget_get_first_child (widget))) |
34 | gtk_widget_unparent (widget: child); |
35 | |
36 | G_OBJECT_CLASS (constraints_grid_parent_class)->dispose (object); |
37 | } |
38 | |
39 | static void |
40 | constraints_grid_class_init (ConstraintsGridClass *klass) |
41 | { |
42 | GObjectClass *object_class = G_OBJECT_CLASS (klass); |
43 | |
44 | object_class->dispose = constraints_grid_dispose; |
45 | } |
46 | |
47 | GtkWidget * |
48 | do_constraints_builder (GtkWidget *do_widget) |
49 | { |
50 | static GtkWidget *window; |
51 | |
52 | if (!window) |
53 | { |
54 | GtkBuilder *builder; |
55 | |
56 | g_type_ensure (type: constraints_grid_get_type ()); |
57 | |
58 | builder = gtk_builder_new_from_resource (resource_path: "/constraints_builder/constraints_builder.ui" ); |
59 | |
60 | window = GTK_WIDGET (gtk_builder_get_object (builder, "window1" )); |
61 | gtk_window_set_display (GTK_WINDOW (window), |
62 | display: gtk_widget_get_display (widget: do_widget)); |
63 | g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window); |
64 | |
65 | g_object_unref (object: builder); |
66 | } |
67 | |
68 | if (!gtk_widget_get_visible (widget: window)) |
69 | gtk_widget_show (widget: window); |
70 | else |
71 | gtk_window_destroy (GTK_WINDOW (window)); |
72 | |
73 | return window; |
74 | } |
75 | |