diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-06-01 11:28:28 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-06-01 11:28:28 +0000 |
commit | 8dfbef5e6f910524667e09e8f92bf2569222a0ad (patch) | |
tree | 60e3f2090c4ad66226f0b2dac3cbbdb1f87fd9c6 | |
parent | 0b9a3fc160e46f7fc787a28cd37d53582c04d40e (diff) | |
parent | cc878160bd2dc1fc4cc2c241fec6805c6dcb716d (diff) | |
download | gtk+-8dfbef5e6f910524667e09e8f92bf2569222a0ad.tar.gz |
Merge branch 'matthiasc/for-master' into 'master'
columnview: Add column reordering
See merge request GNOME/gtk!2005
-rw-r--r-- | demos/gtk-demo/listview_settings.c | 21 | ||||
-rw-r--r-- | demos/gtk-demo/listview_settings.ui | 52 | ||||
-rw-r--r-- | demos/gtk-demo/sliding_puzzle.c | 13 | ||||
-rw-r--r-- | docs/reference/gtk/gtk4-sections.txt | 1 | ||||
-rw-r--r-- | gtk/gtkcolumnview.c | 50 | ||||
-rw-r--r-- | gtk/gtkcolumnview.h | 4 |
6 files changed, 138 insertions, 3 deletions
diff --git a/demos/gtk-demo/listview_settings.c b/demos/gtk-demo/listview_settings.c index 944b764dd6..deecdaeb57 100644 --- a/demos/gtk-demo/listview_settings.c +++ b/demos/gtk-demo/listview_settings.c @@ -25,6 +25,8 @@ enum { PROP_SUMMARY, PROP_DESCRIPTION, PROP_VALUE, + PROP_TYPE, + PROP_DEFAULT_VALUE, N_PROPS }; @@ -65,6 +67,21 @@ settings_key_get_property (GObject *object, } break; + case PROP_TYPE: + { + const GVariantType *type = g_settings_schema_key_get_value_type (self->key); + g_value_set_string (value, g_variant_type_peek_string (type)); + } + break; + + case PROP_DEFAULT_VALUE: + { + GVariant *variant = g_settings_schema_key_get_default_value (self->key); + g_value_take_string (value, g_variant_print (variant, FALSE)); + g_variant_unref (variant); + } + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -98,6 +115,10 @@ settings_key_class_init (SettingsKeyClass *klass) g_param_spec_string ("summary", NULL, NULL, NULL, G_PARAM_READABLE); properties[PROP_VALUE] = g_param_spec_string ("value", NULL, NULL, NULL, G_PARAM_READABLE); + properties[PROP_TYPE] = + g_param_spec_string ("type", NULL, NULL, NULL, G_PARAM_READABLE); + properties[PROP_DEFAULT_VALUE] = + g_param_spec_string ("default-value", NULL, NULL, NULL, G_PARAM_READABLE); g_object_class_install_properties (gobject_class, N_PROPS, properties); } diff --git a/demos/gtk-demo/listview_settings.ui b/demos/gtk-demo/listview_settings.ui index 8bf12cf496..cc9f7f8a9c 100644 --- a/demos/gtk-demo/listview_settings.ui +++ b/demos/gtk-demo/listview_settings.ui @@ -126,6 +126,58 @@ </property> </object> </child> + <child> + <object class="GtkColumnViewColumn"> + <property name="title">Type</property> + <property name="factory"> + <object class="GtkBuilderListItemFactory"> + <property name="bytes"><![CDATA[ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <template class="GtkListItem"> + <property name="child"> + <object class="GtkLabel"> + <property name="xalign">0</property> + <binding name="label"> + <lookup name="type" type="SettingsKey"> + <lookup name="item">GtkListItem</lookup> + </lookup> + </binding> + </object> + </property> + </template> +</interface> + ]]></property> + </object> + </property> + </object> + </child> + <child> + <object class="GtkColumnViewColumn"> + <property name="title">Default</property> + <property name="factory"> + <object class="GtkBuilderListItemFactory"> + <property name="bytes"><![CDATA[ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <template class="GtkListItem"> + <property name="child"> + <object class="GtkLabel"> + <property name="xalign">0</property> + <binding name="label"> + <lookup name="default-value" type="SettingsKey"> + <lookup name="item">GtkListItem</lookup> + </lookup> + </binding> + </object> + </property> + </template> +</interface> + ]]></property> + </object> + </property> + </object> + </child> </object> </child> </object> diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c index 3f1a7c3092..c7897f2dfd 100644 --- a/demos/gtk-demo/sliding_puzzle.c +++ b/demos/gtk-demo/sliding_puzzle.c @@ -293,6 +293,8 @@ start_puzzle (GdkPaintable *paintable) /* Add shortcuts so people can use the arrow * keys to move the puzzle */ controller = gtk_shortcut_controller_new (); + gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller), + GTK_SHORTCUT_SCOPE_GLOBAL); add_move_binding (GTK_SHORTCUT_CONTROLLER (controller), GDK_KEY_Left, GDK_KEY_KP_Left, -1, 0); @@ -353,11 +355,16 @@ reshuffle (void) { GtkWidget *grid; - grid = gtk_aspect_frame_get_child (GTK_ASPECT_FRAME (frame)); if (solved) - start_puzzle (puzzle); + { + start_puzzle (puzzle); + grid = gtk_aspect_frame_get_child (GTK_ASPECT_FRAME (frame)); + } else - shuffle_puzzle (grid); + { + grid = gtk_aspect_frame_get_child (GTK_ASPECT_FRAME (frame)); + shuffle_puzzle (grid); + } gtk_widget_grab_focus (grid); } diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index 8d98f71601..a2fb71fbfc 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -496,6 +496,7 @@ gtk_list_view_get_type GtkColumnView gtk_column_view_new gtk_column_view_append_column +gtk_column_view_insert_column gtk_column_view_remove_column gtk_column_view_get_columns gtk_column_view_get_model diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index 7ae41f8b1c..e94875ae71 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -691,6 +691,7 @@ gtk_column_view_remove_column (GtkColumnView *self, g_object_unref (item); if (item == column) break; + } gtk_column_view_sorter_remove_column (GTK_COLUMN_VIEW_SORTER (self->sorter), column); @@ -698,6 +699,55 @@ gtk_column_view_remove_column (GtkColumnView *self, g_list_store_remove (self->columns, i); } +/** + * gtk_column_view_insert_column: + * @self: a #GtkColumnView + * @position: the position to insert @column at + * @column: the #GtkColumnViewColumn to insert + * + * Inserts a column at the given position in the columns of @self. + * + * If @column is already a column of @self, it will be repositioned. + */ +void +gtk_column_view_insert_column (GtkColumnView *self, + guint position, + GtkColumnViewColumn *column) +{ + g_return_if_fail (GTK_IS_COLUMN_VIEW (self)); + g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (column)); + g_return_if_fail (gtk_column_view_column_get_column_view (column) == NULL || + gtk_column_view_column_get_column_view (column) == self); + g_return_if_fail (position <= g_list_model_get_n_items (G_LIST_MODEL (self->columns))); + + g_object_ref (column); + + if (gtk_column_view_column_get_column_view (column) == self) + { + guint i; + + for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (self->columns)); i++) + { + GtkColumnViewColumn *item = g_list_model_get_item (G_LIST_MODEL (self->columns), i); + + g_object_unref (item); + if (item == column) + { + g_list_store_remove (self->columns, i); + break; + } + } + } + else + gtk_column_view_column_set_column_view (column, self); + + g_list_store_insert (self->columns, position, column); + + gtk_column_view_column_queue_resize (column); + + g_object_unref (column); +} + void gtk_column_view_measure_across (GtkColumnView *self, int *minimum, diff --git a/gtk/gtkcolumnview.h b/gtk/gtkcolumnview.h index 2e1437b8f4..0866b6449c 100644 --- a/gtk/gtkcolumnview.h +++ b/gtk/gtkcolumnview.h @@ -61,6 +61,10 @@ void gtk_column_view_append_column (GtkColumnView GDK_AVAILABLE_IN_ALL void gtk_column_view_remove_column (GtkColumnView *self, GtkColumnViewColumn *column); +GDK_AVAILABLE_IN_ALL +void gtk_column_view_insert_column (GtkColumnView *self, + guint position, + GtkColumnViewColumn *column); GDK_AVAILABLE_IN_ALL GListModel * gtk_column_view_get_model (GtkColumnView *self); |