diff -Nru libdazzle-3.30.0/debian/changelog libdazzle-3.30.1/debian/changelog --- libdazzle-3.30.0/debian/changelog 2018-09-11 23:32:31.000000000 +0000 +++ libdazzle-3.30.1/debian/changelog 2018-09-25 13:08:54.000000000 +0000 @@ -1,3 +1,10 @@ +libdazzle (3.30.1-1) unstable; urgency=medium + + * New upstream release + * Bump Standards-Version to 4.2.1 + + -- Jeremy Bicha Tue, 25 Sep 2018 09:08:54 -0400 + libdazzle (3.30.0-2) unstable; urgency=medium * Add debian/docs to install NEWS and README.md @@ -13,7 +20,7 @@ libdazzle (3.29.92-3) experimental; urgency=medium - * debian/libdazzle-1.0-0.symbols: + * debian/libdazzle-1.0-0.symbols: - correctly update the list of symbols -- Sebastien Bacher Thu, 30 Aug 2018 16:32:03 +0200 diff -Nru libdazzle-3.30.0/debian/control libdazzle-3.30.1/debian/control --- libdazzle-3.30.0/debian/control 2018-09-11 23:32:31.000000000 +0000 +++ libdazzle-3.30.1/debian/control 2018-09-25 13:08:54.000000000 +0000 @@ -21,7 +21,7 @@ xauth , xvfb , valac -Standards-Version: 4.1.5 +Standards-Version: 4.2.1 Vcs-Browser: https://salsa.debian.org/gnome-team/libdazzle Vcs-Git: https://salsa.debian.org/gnome-team/libdazzle.git Homepage: https://gitlab.gnome.org/GNOME/libdazzle diff -Nru libdazzle-3.30.0/debian/control.in libdazzle-3.30.1/debian/control.in --- libdazzle-3.30.0/debian/control.in 2018-09-11 23:32:31.000000000 +0000 +++ libdazzle-3.30.1/debian/control.in 2018-09-25 13:08:54.000000000 +0000 @@ -17,7 +17,7 @@ xauth , xvfb , valac -Standards-Version: 4.1.5 +Standards-Version: 4.2.1 Vcs-Browser: https://salsa.debian.org/gnome-team/libdazzle Vcs-Git: https://salsa.debian.org/gnome-team/libdazzle.git Homepage: https://gitlab.gnome.org/GNOME/libdazzle diff -Nru libdazzle-3.30.0/debian/gbp.conf libdazzle-3.30.1/debian/gbp.conf --- libdazzle-3.30.0/debian/gbp.conf 2018-09-11 23:32:31.000000000 +0000 +++ libdazzle-3.30.1/debian/gbp.conf 2018-09-25 13:08:54.000000000 +0000 @@ -7,6 +7,9 @@ [buildpackage] sign-tags = True +[dch] +multimaint-merge = True + [import-orig] postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit diff -Nru libdazzle-3.30.0/meson.build libdazzle-3.30.1/meson.build --- libdazzle-3.30.0/meson.build 2018-09-05 04:26:49.000000000 +0000 +++ libdazzle-3.30.1/meson.build 2018-09-25 00:36:24.000000000 +0000 @@ -1,5 +1,5 @@ project('libdazzle', 'c', - version: '3.30.0', + version: '3.30.1', license: 'GPLv3+', meson_version: '>= 0.40.1', default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ], diff -Nru libdazzle-3.30.0/NEWS libdazzle-3.30.1/NEWS --- libdazzle-3.30.0/NEWS 2018-09-05 04:26:49.000000000 +0000 +++ libdazzle-3.30.1/NEWS 2018-09-25 00:36:24.000000000 +0000 @@ -1,4 +1,13 @@ ============== +Version 3.30.1 +============== + +Changes in this release: + + • Correctness fixes to DzlListModelFilter + • DzlMenuButton now properly hides empty menu sections + +============== Version 3.30.0 ============== diff -Nru libdazzle-3.30.0/src/menus/dzl-menu-button-section.c libdazzle-3.30.1/src/menus/dzl-menu-button-section.c --- libdazzle-3.30.0/src/menus/dzl-menu-button-section.c 2018-09-05 04:26:49.000000000 +0000 +++ libdazzle-3.30.1/src/menus/dzl-menu-button-section.c 2018-09-25 00:36:24.000000000 +0000 @@ -37,6 +37,7 @@ /* Template references */ GtkLabel *label; DzlBox *items_box; + GtkSeparator *separator; guint show_accels : 1; guint show_icons : 1; @@ -152,6 +153,11 @@ "position", i, NULL); } + + if (added || g_menu_model_get_n_items (menu)) + gtk_widget_show (GTK_WIDGET (self->separator)); + else + gtk_widget_hide (GTK_WIDGET (self->separator)); } static void @@ -287,6 +293,7 @@ "/org/gnome/dazzle/ui/dzl-menu-button-section.ui"); gtk_widget_class_bind_template_child (widget_class, DzlMenuButtonSection, label); gtk_widget_class_bind_template_child (widget_class, DzlMenuButtonSection, items_box); + gtk_widget_class_bind_template_child (widget_class, DzlMenuButtonSection, separator); } static void diff -Nru libdazzle-3.30.0/src/util/dzl-list-model-filter.c libdazzle-3.30.1/src/util/dzl-list-model-filter.c --- libdazzle-3.30.0/src/util/dzl-list-model-filter.c 2018-09-05 04:26:49.000000000 +0000 +++ libdazzle-3.30.1/src/util/dzl-list-model-filter.c 2018-09-25 00:36:24.000000000 +0000 @@ -18,7 +18,7 @@ #include "config.h" -#define G_LOG_DOMAIN "dzl-list-model-filter.h" +#define G_LOG_DOMAIN "dzl-list-model-filter" #include "util/dzl-list-model-filter.h" @@ -159,10 +159,16 @@ /* Small shortcut when all items are removed */ if (n_removed == (guint)g_sequence_get_length (priv->child_seq)) { + guint n_filter_removed = g_sequence_get_length (priv->filter_seq); + g_sequence_remove_range (g_sequence_get_begin_iter (priv->child_seq), g_sequence_get_end_iter (priv->child_seq)); g_assert (g_sequence_is_empty (priv->child_seq)); g_assert (g_sequence_is_empty (priv->filter_seq)); + + if (unblocked) + g_list_model_items_changed (G_LIST_MODEL (self), 0, n_filter_removed, 0); + goto add_new_items; } @@ -200,7 +206,7 @@ if (n_added > 0) { - GSequenceIter *iter = g_sequence_get_iter_at_pos (priv->child_seq, position + 1); + GSequenceIter *iter = g_sequence_get_iter_at_pos (priv->child_seq, position); GSequenceIter *filter_iter = find_next_visible_filter_iter (self, iter); guint filter_position = g_sequence_iter_get_position (filter_iter); guint count = 0; diff -Nru libdazzle-3.30.0/tests/test-model-filter.c libdazzle-3.30.1/tests/test-model-filter.c --- libdazzle-3.30.0/tests/test-model-filter.c 2018-09-05 04:26:49.000000000 +0000 +++ libdazzle-3.30.1/tests/test-model-filter.c 2018-09-25 00:36:24.000000000 +0000 @@ -128,11 +128,134 @@ g_clear_object (&filter); } +static guint last_n_added = 0; +static guint last_n_removed = 0; +static guint last_changed_position = 0; + +static void +model_items_changed_cb (DzlListModelFilter *filter, + guint position, + guint n_removed, + guint n_added, + GListModel *model) +{ + last_n_added = n_added; + last_n_removed = n_removed; + last_changed_position = position; +} + + +static void +filter_items_changed_cb (DzlListModelFilter *filter, + guint position, + guint n_removed, + guint n_added, + GListModel *model) +{ + g_assert_cmpint (n_added, ==, last_n_added); + g_assert_cmpint (n_removed, ==, last_n_removed); + g_assert_cmpint (position, ==, last_changed_position); +} + +static void +test_items_changed (void) +{ + DzlListModelFilter *filter; + GListStore *model; + guint i; + + model = g_list_store_new (TEST_TYPE_ITEM); + g_assert (model); + + g_signal_connect (model, "items-changed", G_CALLBACK (model_items_changed_cb), NULL); + + filter = dzl_list_model_filter_new (G_LIST_MODEL (model)); + g_assert (filter); + + g_signal_connect_after (filter, "items-changed", G_CALLBACK (filter_items_changed_cb), model); + + /* The filter model is not filtered, so it must mirror whatever + * the child model does. In this case, test if the position of + * items-changed match. + */ + for (i = 0; i < 100; i++) + { + g_autoptr (TestItem) val = test_item_new (i); + g_list_store_append (model, val); + } + + g_assert_cmpint (100, ==, g_list_model_get_n_items (G_LIST_MODEL (model))); + g_assert_cmpint (100, ==, g_list_model_get_n_items (G_LIST_MODEL (filter))); + + for (i = 0; i < 100; i++) + g_list_store_remove (model, 0); + + g_clear_object (&model); + g_clear_object (&filter); +} + + +static guint items_to_remove = 0; +static gboolean items_changed_emitted = FALSE; + +static void +filter_items_removed_cb (DzlListModelFilter *filter, + guint position, + guint n_removed, + guint n_added, + GListModel *model) +{ + items_changed_emitted = TRUE; + + g_assert_cmpint (n_removed, ==, items_to_remove); +} + +static void +test_remove_all (void) +{ + DzlListModelFilter *filter; + GListStore *model; + guint i; + + model = g_list_store_new (TEST_TYPE_ITEM); + g_assert (model); + + filter = dzl_list_model_filter_new (G_LIST_MODEL (model)); + g_assert (filter); + + /* The filter model is not filtered, so it must mirror whatever + * the child model does. In this case, test if the position of + * items-changed match. + */ + for (i = 0; i < 100; i++) + { + g_autoptr (TestItem) val = test_item_new (i); + + g_list_store_append (model, val); + + items_to_remove++; + } + + g_assert_cmpint (100, ==, g_list_model_get_n_items (G_LIST_MODEL (model))); + g_assert_cmpint (100, ==, g_list_model_get_n_items (G_LIST_MODEL (filter))); + + g_signal_connect_after (filter, "items-changed", G_CALLBACK (filter_items_removed_cb), model); + + g_list_store_remove_all (model); + + g_assert_true (items_changed_emitted); + + g_clear_object (&model); + g_clear_object (&filter); +} + gint main (gint argc, gchar *argv[]) { g_test_init (&argc, &argv, NULL); g_test_add_func ("/Dazzle/ListModelFilter/basic", test_basic); + g_test_add_func ("/Dazzle/ListModelFilter/items-changed", test_items_changed); + g_test_add_func ("/Dazzle/ListModelFilter/remove-all", test_remove_all); return g_test_run (); }