diff options
author | Matthias Clasen <mclasen@redhat.com> | 2011-11-06 01:17:15 -0500 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2011-12-19 12:45:51 -0500 |
commit | b36198dbc2d4f3599e1a94b2dd66b04feeac99c1 (patch) | |
tree | 8d48a276d174e61aece4924a377de1b63393286a /tests/testgmenu.c | |
parent | 1aec8e22b6da6e39034acfff74f6c8ebf34d4520 (diff) | |
download | gtk+-b36198dbc2d4f3599e1a94b2dd66b04feeac99c1.tar.gz |
More dynamic changes
Diffstat (limited to 'tests/testgmenu.c')
-rw-r--r-- | tests/testgmenu.c | 103 |
1 files changed, 92 insertions, 11 deletions
diff --git a/tests/testgmenu.c b/tests/testgmenu.c index 61df703df3..821daca514 100644 --- a/tests/testgmenu.c +++ b/tests/testgmenu.c @@ -27,10 +27,7 @@ * * - Labeled sections * - * - More dynamic changes. Add/Remove sections, submenus. - * - * - Focus changes. Verify that stopping subscriptions works - * as intended. + * - Focus changes. Verify that stopping subscriptions works. * * - Other attributes. What about icons ? */ @@ -754,6 +751,36 @@ toggle_sumerian (GtkToggleButton *button, gpointer data) } static void +action_list_add (GtkTreeModel *store, + const gchar *action) +{ + GtkTreeIter iter; + + gtk_list_store_append (GTK_LIST_STORE (store), &iter); + gtk_list_store_set (GTK_LIST_STORE (store), &iter, 0, action, -1); +} + +static void +action_list_remove (GtkTreeModel *store, + const gchar *action) +{ + GtkTreeIter iter; + gchar *text; + + gtk_tree_model_get_iter_first (store, &iter); + do { + gtk_tree_model_get (store, &iter, 0, &text, -1); + if (g_strcmp0 (action, text) == 0) + { + g_free (text); + gtk_list_store_remove (GTK_LIST_STORE (store), &iter); + break; + } + g_free (text); + } while (gtk_tree_model_iter_next (store, &iter)); +} + +static void toggle_italic (GtkToggleButton *button, gpointer data) { GMenuModel *model; @@ -763,7 +790,6 @@ toggle_italic (GtkToggleButton *button, gpointer data) GMenuModel *m; GtkTreeView *tv = data; GtkTreeModel *store; - GtkTreeIter iter; model = g_object_get_data (G_OBJECT (button), "model"); group = g_object_get_data (G_OBJECT (button), "group"); @@ -779,21 +805,68 @@ toggle_italic (GtkToggleButton *button, gpointer data) g_simple_action_group_insert (G_SIMPLE_ACTION_GROUP (group), G_ACTION (action)); g_signal_connect (action, "change-state", G_CALLBACK (toggle_changed), NULL); g_object_unref (action); + action_list_add (store, "italic"); g_menu_insert (G_MENU (m), 1, "Italic", "italic"); - gtk_list_store_prepend (GTK_LIST_STORE (store), &iter); - gtk_list_store_set (GTK_LIST_STORE (store), &iter, - 0, "italic", - -1); } else { g_simple_action_group_remove (G_SIMPLE_ACTION_GROUP (group), "italic"); + action_list_remove (store, "italic"); g_menu_remove (G_MENU (m), 1); - gtk_tree_model_get_iter_first (store, &iter); - gtk_list_store_remove (GTK_LIST_STORE (store), &iter); } } +static void +toggle_speed (GtkToggleButton *button, gpointer data) +{ + GMenuModel *model; + GActionGroup *group; + GSimpleAction *action; + gboolean adding; + GMenuModel *m; + GMenu *submenu; + GtkTreeView *tv = data; + GtkTreeModel *store; + + model = g_object_get_data (G_OBJECT (button), "model"); + group = g_object_get_data (G_OBJECT (button), "group"); + + store = gtk_tree_view_get_model (tv); + + adding = gtk_toggle_button_get_active (button); + + m = g_menu_model_get_item_link (model, 1, G_MENU_LINK_SECTION); + if (adding) + { + action = g_simple_action_new ("faster", NULL); + g_simple_action_group_insert (G_SIMPLE_ACTION_GROUP (group), G_ACTION (action)); + g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); + g_object_unref (action); + + action = g_simple_action_new ("slower", NULL); + g_simple_action_group_insert (G_SIMPLE_ACTION_GROUP (group), G_ACTION (action)); + g_signal_connect (action, "activate", G_CALLBACK (activate_action), NULL); + g_object_unref (action); + + action_list_add (store, "faster"); + action_list_add (store, "slower"); + + submenu = g_menu_new (); + g_menu_append (submenu, "Faster", "faster"); + g_menu_append (submenu, "Slower", "slower"); + g_menu_append_submenu (G_MENU (m), "Speed", G_MENU_MODEL (submenu)); + } + else + { + g_simple_action_group_remove (G_SIMPLE_ACTION_GROUP (group), "faster"); + g_simple_action_group_remove (G_SIMPLE_ACTION_GROUP (group), "slower"); + + action_list_remove (store, "faster"); + action_list_remove (store, "slower"); + + g_menu_remove (G_MENU (m), g_menu_model_get_n_items (m) - 1); + } +} static GtkWidget * create_add_remove_buttons (GActionGroup *group, GMenuModel *model, @@ -822,6 +895,14 @@ create_add_remove_buttons (GActionGroup *group, g_signal_connect (button, "toggled", G_CALLBACK (toggle_sumerian), NULL); + button = gtk_check_button_new_with_label ("Add Speed"); + gtk_container_add (GTK_CONTAINER (box), button); + + g_object_set_data (G_OBJECT (button), "group", group); + g_object_set_data (G_OBJECT (button), "model", model); + + g_signal_connect (button, "toggled", + G_CALLBACK (toggle_speed), treeview); return box; } |