diff --git a/ChangeLog b/ChangeLog index 656f45d9b7..e069da798b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2003-09-04 Matthias Clasen + * tests/testmerge.c: Test buttons and toggle buttons as proxies. + + * gtk/gtktoggleaction.c (connect_proxy): + (gtk_toggle_action_real_toggled): Support toggle buttons as proxies. Note + that a "draw_as_radio" property is needed for check buttons similar to + check menu items, in order to fully support button proxies for radio actions. + + * gtk/gtkaction.c (connect_proxy): Allow buttons as proxies. + * tests/testmerge.c (toggle_dynamic): Test gtk_ui_manager_add_ui(). * gtk/gtkuimanager.h: Add GtkUIManagerItemType enum which is needed for the diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 656f45d9b7..e069da798b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,14 @@ 2003-09-04 Matthias Clasen + * tests/testmerge.c: Test buttons and toggle buttons as proxies. + + * gtk/gtktoggleaction.c (connect_proxy): + (gtk_toggle_action_real_toggled): Support toggle buttons as proxies. Note + that a "draw_as_radio" property is needed for check buttons similar to + check menu items, in order to fully support button proxies for radio actions. + + * gtk/gtkaction.c (connect_proxy): Allow buttons as proxies. + * tests/testmerge.c (toggle_dynamic): Test gtk_ui_manager_add_ui(). * gtk/gtkuimanager.h: Add GtkUIManagerItemType enum which is needed for the diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 656f45d9b7..e069da798b 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,14 @@ 2003-09-04 Matthias Clasen + * tests/testmerge.c: Test buttons and toggle buttons as proxies. + + * gtk/gtktoggleaction.c (connect_proxy): + (gtk_toggle_action_real_toggled): Support toggle buttons as proxies. Note + that a "draw_as_radio" property is needed for check buttons similar to + check menu items, in order to fully support button proxies for radio actions. + + * gtk/gtkaction.c (connect_proxy): Allow buttons as proxies. + * tests/testmerge.c (toggle_dynamic): Test gtk_ui_manager_add_ui(). * gtk/gtkuimanager.h: Add GtkUIManagerItemType enum which is needed for the diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 656f45d9b7..e069da798b 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,14 @@ 2003-09-04 Matthias Clasen + * tests/testmerge.c: Test buttons and toggle buttons as proxies. + + * gtk/gtktoggleaction.c (connect_proxy): + (gtk_toggle_action_real_toggled): Support toggle buttons as proxies. Note + that a "draw_as_radio" property is needed for check buttons similar to + check menu items, in order to fully support button proxies for radio actions. + + * gtk/gtkaction.c (connect_proxy): Allow buttons as proxies. + * tests/testmerge.c (toggle_dynamic): Test gtk_ui_manager_add_ui(). * gtk/gtkuimanager.h: Add GtkUIManagerItemType enum which is needed for the diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 656f45d9b7..e069da798b 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,14 @@ 2003-09-04 Matthias Clasen + * tests/testmerge.c: Test buttons and toggle buttons as proxies. + + * gtk/gtktoggleaction.c (connect_proxy): + (gtk_toggle_action_real_toggled): Support toggle buttons as proxies. Note + that a "draw_as_radio" property is needed for check buttons similar to + check menu items, in order to fully support button proxies for radio actions. + + * gtk/gtkaction.c (connect_proxy): Allow buttons as proxies. + * tests/testmerge.c (toggle_dynamic): Test gtk_ui_manager_add_ui(). * gtk/gtkuimanager.h: Add GtkUIManagerItemType enum which is needed for the diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c index 2b1cb76463..1be5c5aae7 100644 --- a/gtk/gtkaction.c +++ b/gtk/gtkaction.c @@ -31,6 +31,7 @@ #include #include "gtkaction.h" +#include "gtkbutton.h" #include "gtktoolbutton.h" #include "gtkmenuitem.h" #include "gtkimagemenuitem.h" @@ -629,6 +630,23 @@ connect_proxy (GtkAction *action, G_CALLBACK (gtk_action_create_menu_proxy), action, 0); + g_signal_connect_object (proxy, "clicked", + G_CALLBACK (gtk_action_activate), action, + G_CONNECT_SWAPPED); + } + else if (GTK_IS_BUTTON (proxy)) + { + /* button specific synchronisers ... */ + + /* synchronise the label */ + g_object_set (G_OBJECT (proxy), + "label", action->private_data->short_label, + "use_underline", TRUE, + NULL); + g_signal_connect_object (action, "notify::short_label", + G_CALLBACK (gtk_action_sync_short_label), + proxy, 0); + g_signal_connect_object (proxy, "clicked", G_CALLBACK (gtk_action_activate), action, G_CONNECT_SWAPPED); diff --git a/gtk/gtktoggleaction.c b/gtk/gtktoggleaction.c index dd7ed2330e..51f5113e50 100644 --- a/gtk/gtktoggleaction.c +++ b/gtk/gtktoggleaction.c @@ -33,6 +33,7 @@ #include "gtktoggleaction.h" #include "gtktoggleactionprivate.h" #include "gtktoggletoolbutton.h" +#include "gtktogglebutton.h" #include "gtkcheckmenuitem.h" enum @@ -152,6 +153,9 @@ gtk_toggle_action_real_toggled (GtkToggleAction *action) else if (GTK_IS_TOGGLE_TOOL_BUTTON (proxy)) gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (proxy), action->private_data->active); + else if (GTK_IS_TOGGLE_BUTTON (proxy)) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (proxy), + action->private_data->active); else { g_warning ("Don't know how to toggle `%s' widgets", G_OBJECT_TYPE_NAME (proxy)); @@ -175,6 +179,9 @@ connect_proxy (GtkAction *action, else if (GTK_IS_TOGGLE_TOOL_BUTTON (proxy)) gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (proxy), toggle_action->private_data->active); + else if (GTK_IS_TOGGLE_BUTTON (proxy)) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (proxy), + toggle_action->private_data->active); (* GTK_ACTION_CLASS (parent_class)->connect_proxy) (action, proxy); } diff --git a/tests/testmerge.c b/tests/testmerge.c index 47c06dc04e..0d50a39151 100644 --- a/tests/testmerge.c +++ b/tests/testmerge.c @@ -96,7 +96,7 @@ toggle_action (GtkAction *action) const gchar *name = gtk_action_get_name (action); const gchar *typename = G_OBJECT_TYPE_NAME (action); - g_message ("Action %s (type=%s) activated (active=%d)", name, typename, + g_message ("ToggleAction %s (type=%s) toggled (active=%d)", name, typename, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); } @@ -104,7 +104,7 @@ toggle_action (GtkAction *action) static void radio_action_changed (GtkAction *action, GtkRadioAction *current) { - g_message ("Action %s (type=%s) activated (active=%d) (value %d)", + g_message ("RadioAction %s (type=%s) activated (active=%d) (value %d)", gtk_action_get_name (GTK_ACTION (current)), G_OBJECT_TYPE_NAME (GTK_ACTION (current)), gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current)), @@ -118,14 +118,15 @@ static GtkActionEntry entries[] = { { "JustifyMenuAction", NULL, "_Justify" }, { "Test", NULL, "Test" }, - { "QuitAction", GTK_STOCK_QUIT, NULL, "q", NULL, G_CALLBACK (gtk_main_quit) }, - { "NewAction", GTK_STOCK_NEW, NULL, "n", NULL, G_CALLBACK (activate_action) }, - { "New2Action", GTK_STOCK_NEW, NULL, "m", NULL, G_CALLBACK (activate_action) }, - { "OpenAction", GTK_STOCK_OPEN, NULL, "o", NULL, G_CALLBACK (activate_action) }, - { "CutAction", GTK_STOCK_CUT, NULL, "x", NULL, G_CALLBACK (activate_action) }, - { "CopyAction", GTK_STOCK_COPY, NULL, "c", NULL, G_CALLBACK (activate_action) }, - { "PasteAction", GTK_STOCK_PASTE, NULL, "v", NULL, G_CALLBACK (activate_action) }, - { "AboutAction", NULL, "_About", NULL, NULL, G_CALLBACK (activate_action) }, + { "QuitAction", GTK_STOCK_QUIT, NULL, "q", NULL, G_CALLBACK (gtk_main_quit) }, + { "NewAction", GTK_STOCK_NEW, NULL, "n", NULL, G_CALLBACK (activate_action) }, + { "New2Action", GTK_STOCK_NEW, NULL, "m", NULL, G_CALLBACK (activate_action) }, + { "OpenAction", GTK_STOCK_OPEN, NULL, "o", NULL, G_CALLBACK (activate_action) }, + { "CutAction", GTK_STOCK_CUT, NULL, "x", NULL, G_CALLBACK (activate_action) }, + { "CopyAction", GTK_STOCK_COPY, NULL, "c", NULL, G_CALLBACK (activate_action) }, + { "PasteAction", GTK_STOCK_PASTE, NULL, "v", NULL, G_CALLBACK (activate_action) }, + { "AboutAction", NULL, "_About", NULL, NULL, G_CALLBACK (activate_action) }, + { "BoldAction", GTK_STOCK_BOLD, "_Bold", "b", NULL, G_CALLBACK (toggle_action), TRUE }, }; static guint n_entries = G_N_ELEMENTS (entries); @@ -470,6 +471,18 @@ main (int argc, char **argv) gtk_box_pack_end (GTK_BOX (menu_box), area, FALSE, FALSE, 0); gtk_widget_show (area); + button = gtk_button_new (); + gtk_box_pack_end (GTK_BOX (menu_box), button, FALSE, FALSE, 0); + gtk_action_connect_proxy (gtk_action_group_get_action (action_group, "AboutAction"), + button); + gtk_widget_show (button); + merge = gtk_ui_manager_new (); + + button = gtk_check_button_new (); + gtk_box_pack_end (GTK_BOX (menu_box), button, FALSE, FALSE, 0); + gtk_action_connect_proxy (gtk_action_group_get_action (action_group, "BoldAction"), + button); + gtk_widget_show (button); merge = gtk_ui_manager_new (); g_signal_connect (area, "button_press_event",