summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-06-22 23:30:22 +0000
committerMatthias Clasen <mclasen@redhat.com>2019-06-22 23:30:22 +0000
commit366e8da9277d0dfcb8a11321afe76e19133dc4f2 (patch)
treefa16b4bfd33124308f985243a36d37f669535cf7
parent203d612afd78d577cb3ae544763824771d049c97 (diff)
downloadgtk+-366e8da9277d0dfcb8a11321afe76e19133dc4f2.tar.gz
Add another test for action inheritance
This one checks for precedence between class actions and inserted groups.
-rw-r--r--testsuite/gtk/action.c97
1 files changed, 96 insertions, 1 deletions
diff --git a/testsuite/gtk/action.c b/testsuite/gtk/action.c
index 6c3b457534..7d44e2fc5d 100644
--- a/testsuite/gtk/action.c
+++ b/testsuite/gtk/action.c
@@ -240,12 +240,106 @@ test_overlap (void)
g_assert_cmpint (win_activated, ==, 1);
g_assert_cmpint (box_activated, ==, 1);
-
gtk_widget_destroy (window);
g_object_unref (win_actions);
g_object_unref (box_actions);
}
+static int toggled;
+static int act1;
+static int act2;
+
+static void
+visibility_toggled (GObject *object,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ toggled++;
+}
+
+static void
+activate1 (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ act1++;
+}
+
+static void
+activate2 (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ act2++;
+}
+
+/* Test that overlap also works as expected between
+ * class action and inserted groups. Class actions
+ * take precedence over inserted groups in the same
+ * muxer, but inheritance works as normal between
+ * muxers.
+ */
+static void
+test_overlap2 (void)
+{
+ GtkWidget *text;
+ GtkWidget *child;
+ GSimpleActionGroup *group1;
+ GSimpleActionGroup *group2;
+ GActionEntry entries1[] = {
+ { "toggle-visibility", activate1, NULL, NULL, NULL },
+ };
+ GActionEntry entries2[] = {
+ { "toggle-visibility", activate2, NULL, NULL, NULL },
+ };
+
+ text = gtk_text_new ();
+ g_signal_connect (text, "notify::visibility",
+ G_CALLBACK (visibility_toggled), NULL);
+
+ child = gtk_label_new ("");
+ gtk_widget_set_parent (child, text);
+
+ g_assert_cmpint (toggled, ==, 0);
+ g_assert_cmpint (act1, ==, 0);
+ g_assert_cmpint (act2, ==, 0);
+
+ gtk_widget_activate_action (child, "misc.toggle-visibility", NULL);
+
+ g_assert_cmpint (toggled, ==, 1);
+ g_assert_cmpint (act1, ==, 0);
+ g_assert_cmpint (act2, ==, 0);
+
+ group1 = g_simple_action_group_new ();
+ g_action_map_add_action_entries (G_ACTION_MAP (group1),
+ entries1,
+ G_N_ELEMENTS (entries1),
+ NULL);
+ gtk_widget_insert_action_group (text, "misc", G_ACTION_GROUP (group1));
+ gtk_widget_activate_action (child, "misc.toggle-visibility", NULL);
+
+ g_assert_cmpint (toggled, ==, 2);
+ g_assert_cmpint (act1, ==, 0);
+ g_assert_cmpint (act2, ==, 0);
+
+ group2 = g_simple_action_group_new ();
+ g_action_map_add_action_entries (G_ACTION_MAP (group2),
+ entries2,
+ G_N_ELEMENTS (entries2),
+ NULL);
+ gtk_widget_insert_action_group (child, "misc", G_ACTION_GROUP (group2));
+
+ gtk_widget_activate_action (child, "misc.toggle-visibility", NULL);
+
+ g_assert_cmpint (toggled, ==, 2);
+ g_assert_cmpint (act1, ==, 0);
+ g_assert_cmpint (act2, ==, 1);
+
+ gtk_widget_destroy (text);
+ g_object_unref (group1);
+ g_object_unref (group2);
+}
+
/* Test that gtk_widget_class_query_action
* yields the expected results
*/
@@ -303,6 +397,7 @@ main (int argc,
g_test_add_func ("/action/inheritance", test_action);
g_test_add_func ("/action/text", test_text);
g_test_add_func ("/action/overlap", test_overlap);
+ g_test_add_func ("/action/overlap2", test_overlap2);
g_test_add_func ("/action/introspection", test_introspection);
return g_test_run();