Test buttons and toggle buttons as proxies.

2003-09-04  Matthias Clasen  <maclas@gmx.de>

	* 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.
This commit is contained in:
Matthias Clasen 2003-09-04 21:34:15 +00:00 committed by Matthias Clasen
parent 02a963e15b
commit 9ae676b06b
8 changed files with 93 additions and 10 deletions

View File

@ -1,5 +1,14 @@
2003-09-04 Matthias Clasen <maclas@gmx.de>
* 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

View File

@ -1,5 +1,14 @@
2003-09-04 Matthias Clasen <maclas@gmx.de>
* 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

View File

@ -1,5 +1,14 @@
2003-09-04 Matthias Clasen <maclas@gmx.de>
* 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

View File

@ -1,5 +1,14 @@
2003-09-04 Matthias Clasen <maclas@gmx.de>
* 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

View File

@ -1,5 +1,14 @@
2003-09-04 Matthias Clasen <maclas@gmx.de>
* 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

View File

@ -31,6 +31,7 @@
#include <config.h>
#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);

View File

@ -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);
}

View File

@ -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, "<control>q", NULL, G_CALLBACK (gtk_main_quit) },
{ "NewAction", GTK_STOCK_NEW, NULL, "<control>n", NULL, G_CALLBACK (activate_action) },
{ "New2Action", GTK_STOCK_NEW, NULL, "<control>m", NULL, G_CALLBACK (activate_action) },
{ "OpenAction", GTK_STOCK_OPEN, NULL, "<control>o", NULL, G_CALLBACK (activate_action) },
{ "CutAction", GTK_STOCK_CUT, NULL, "<control>x", NULL, G_CALLBACK (activate_action) },
{ "CopyAction", GTK_STOCK_COPY, NULL, "<control>c", NULL, G_CALLBACK (activate_action) },
{ "PasteAction", GTK_STOCK_PASTE, NULL, "<control>v", NULL, G_CALLBACK (activate_action) },
{ "AboutAction", NULL, "_About", NULL, NULL, G_CALLBACK (activate_action) },
{ "QuitAction", GTK_STOCK_QUIT, NULL, "<control>q", NULL, G_CALLBACK (gtk_main_quit) },
{ "NewAction", GTK_STOCK_NEW, NULL, "<control>n", NULL, G_CALLBACK (activate_action) },
{ "New2Action", GTK_STOCK_NEW, NULL, "<control>m", NULL, G_CALLBACK (activate_action) },
{ "OpenAction", GTK_STOCK_OPEN, NULL, "<control>o", NULL, G_CALLBACK (activate_action) },
{ "CutAction", GTK_STOCK_CUT, NULL, "<control>x", NULL, G_CALLBACK (activate_action) },
{ "CopyAction", GTK_STOCK_COPY, NULL, "<control>c", NULL, G_CALLBACK (activate_action) },
{ "PasteAction", GTK_STOCK_PASTE, NULL, "<control>v", NULL, G_CALLBACK (activate_action) },
{ "AboutAction", NULL, "_About", NULL, NULL, G_CALLBACK (activate_action) },
{ "BoldAction", GTK_STOCK_BOLD, "_Bold", "<control>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",