#include <config.h>
-#include "gtkalias.h"
#include "gtkactiongroup.h"
+#include "gtkiconfactory.h"
+#include "gtkicontheme.h"
#include "gtkstock.h"
#include "gtktoggleaction.h"
#include "gtkradioaction.h"
#include "gtkaccelmap.h"
#include "gtkmarshalers.h"
+#include "gtkprivate.h"
#include "gtkintl.h"
+#include "gtkalias.h"
#define GTK_ACTION_GROUP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ACTION_GROUP, GtkActionGroupPrivate))
(GInstanceInitFunc) gtk_action_group_init,
};
- type = g_type_register_static (G_TYPE_OBJECT, "GtkActionGroup",
+ type = g_type_register_static (G_TYPE_OBJECT, I_("GtkActionGroup"),
&type_info, 0);
}
P_("Name"),
P_("A name for the action group."),
NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (gobject_class,
PROP_SENSITIVE,
g_param_spec_boolean ("sensitive",
P_("Sensitive"),
P_("Whether the action group is enabled."),
TRUE,
- G_PARAM_READWRITE));
+ GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_VISIBLE,
g_param_spec_boolean ("visible",
P_("Visible"),
P_("Whether the action group is visible."),
TRUE,
- G_PARAM_READWRITE));
+ GTK_PARAM_READWRITE));
/**
* GtkActionGroup::connect-proxy:
* Since: 2.4
*/
action_group_signals[CONNECT_PROXY] =
- g_signal_new ("connect_proxy",
+ g_signal_new (I_("connect_proxy"),
G_OBJECT_CLASS_TYPE (klass),
0, 0, NULL, NULL,
_gtk_marshal_VOID__OBJECT_OBJECT,
* Since: 2.4
*/
action_group_signals[DISCONNECT_PROXY] =
- g_signal_new ("disconnect_proxy",
+ g_signal_new (I_("disconnect_proxy"),
G_OBJECT_CLASS_TYPE (klass),
0, 0, NULL, NULL,
_gtk_marshal_VOID__OBJECT_OBJECT,
* Since: 2.4
*/
action_group_signals[PRE_ACTIVATE] =
- g_signal_new ("pre_activate",
+ g_signal_new (I_("pre_activate"),
G_OBJECT_CLASS_TYPE (klass),
0, 0, NULL, NULL,
_gtk_marshal_VOID__OBJECT,
* Since: 2.4
*/
action_group_signals[POST_ACTIVATE] =
- g_signal_new ("post_activate",
+ g_signal_new (I_("post_activate"),
G_OBJECT_CLASS_TYPE (klass),
0, 0, NULL, NULL,
_gtk_marshal_VOID__OBJECT,
static void
remove_action (GtkAction *action)
{
- g_object_set (action, "action_group", NULL, NULL);
+ g_object_set (action, I_("action-group"), NULL, NULL);
g_object_unref (action);
}
}
static void
-cb_set_action_sensitivity (const gchar *name, GtkAction *action)
+cb_set_action_sensitivity (const gchar *name,
+ GtkAction *action)
{
- /* Minor optimization, the action_groups state only effects actions that are
- * themselves sensitive */
+ /* Minor optimization, the action_groups state only affects actions
+ * that are themselves sensitive */
if (gtk_action_get_sensitive (action))
- g_object_notify (G_OBJECT (action), "sensitive");
+ _gtk_action_sync_sensitive (action);
}
/**
* Since: 2.4
*/
void
-gtk_action_group_set_sensitive (GtkActionGroup *action_group, gboolean sensitive)
+gtk_action_group_set_sensitive (GtkActionGroup *action_group,
+ gboolean sensitive)
{
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- if (action_group->private_data->sensitive ^ sensitive)
+ sensitive = sensitive != FALSE;
+
+ if (action_group->private_data->sensitive != sensitive)
{
action_group->private_data->sensitive = sensitive;
g_hash_table_foreach (action_group->private_data->actions,
(GHFunc) cb_set_action_sensitivity, NULL);
+
+ g_object_notify (G_OBJECT (action_group), "sensitive");
}
}
}
static void
-cb_set_action_visiblity (const gchar *name, GtkAction *action)
+cb_set_action_visiblity (const gchar *name,
+ GtkAction *action)
{
- /* Minor optimization, the action_groups state only effects actions that are
- * themselves sensitive */
+ /* Minor optimization, the action_groups state only affects actions
+ * that are themselves visible */
if (gtk_action_get_visible (action))
- g_object_notify (G_OBJECT (action), "visible");
+ _gtk_action_sync_visible (action);
}
/**
* Since: 2.4
*/
void
-gtk_action_group_set_visible (GtkActionGroup *action_group, gboolean visible)
+gtk_action_group_set_visible (GtkActionGroup *action_group,
+ gboolean visible)
{
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- if (action_group->private_data->visible ^ visible)
+ visible = visible != FALSE;
+
+ if (action_group->private_data->visible != visible)
{
action_group->private_data->visible = visible;
g_hash_table_foreach (action_group->private_data->actions,
(GHFunc) cb_set_action_visiblity, NULL);
+
+ g_object_notify (G_OBJECT (action_group), "visible");
}
}
g_hash_table_insert (action_group->private_data->actions,
g_strdup (gtk_action_get_name (action)),
g_object_ref (action));
- g_object_set (G_OBJECT (action), "action_group", action_group, NULL);
+ g_object_set (action, I_("action-group"), action_group, NULL);
}
/**
*/
void
gtk_action_group_add_action_with_accel (GtkActionGroup *action_group,
- GtkAction *action,
- const gchar *accelerator)
+ GtkAction *action,
+ const gchar *accelerator)
{
gchar *accel_path;
guint accel_key = 0;
gchar *name;
gchar *stock_id;
- g_object_get (action, "name", &name, "stock_id", &stock_id, NULL);
+ g_object_get (action, "name", &name, "stock-id", &stock_id, NULL);
accel_path = g_strconcat ("<Actions>/",
action_group->private_data->name, "/", name, NULL);
if (shared_data->destroy)
(*shared_data->destroy) (shared_data->data);
- g_free (shared_data);
+ g_slice_free (SharedData, shared_data);
}
}
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- shared_data = g_new0 (SharedData, 1);
+ shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;
action = gtk_action_new (entries[i].name,
label,
tooltip,
- entries[i].stock_id);
+ NULL);
+ if (entries[i].stock_id)
+ {
+ g_object_set (action, "stock-id", entries[i].stock_id, NULL);
+ if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
+ entries[i].stock_id))
+ g_object_set (action, "icon-name", entries[i].stock_id, NULL);
+ }
+
if (entries[i].callback)
{
GClosure *closure;
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
- shared_data = g_new0 (SharedData, 1);
+ shared_data = g_slice_new0 (SharedData);
shared_data->ref_count = 1;
shared_data->data = user_data;
shared_data->destroy = destroy;
action = gtk_toggle_action_new (entries[i].name,
label,
tooltip,
- entries[i].stock_id);
+ NULL);
+
+ if (entries[i].stock_id)
+ {
+ if (gtk_icon_factory_lookup_default (entries[i].stock_id))
+ g_object_set (action, "stock-id", entries[i].stock_id, NULL);
+ else
+ g_object_set (action, "icon-name", entries[i].stock_id, NULL);
+ }
gtk_toggle_action_set_active (action, entries[i].is_active);
action = gtk_radio_action_new (entries[i].name,
label,
tooltip,
- entries[i].stock_id,
+ NULL,
entries[i].value);
+ if (entries[i].stock_id)
+ {
+ if (gtk_icon_factory_lookup_default (entries[i].stock_id))
+ g_object_set (action, "stock-id", entries[i].stock_id, NULL);
+ else
+ g_object_set (action, "icon-name", entries[i].stock_id, NULL);
+ }
+
if (i == 0)
first_action = action;
* Since: 2.4
**/
void
-gtk_action_group_set_translate_func (GtkActionGroup *action_group,
- GtkTranslateFunc func,
- gpointer data,
- GtkDestroyNotify notify)
+gtk_action_group_set_translate_func (GtkActionGroup *action_group,
+ GtkTranslateFunc func,
+ gpointer data,
+ GtkDestroyNotify notify)
{
g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
dgettext_swapped (const gchar *msgid,
const gchar *domainname)
{
- return dgettext (domainname, msgid);
+ /* Pass through dgettext if and only if msgid is nonempty. */
+ if (msgid && *msgid)
+ return dgettext (domainname, msgid);
+ else
+ return (gchar*) msgid;
}
/**
g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), string);
+ if (string == NULL)
+ return NULL;
+
translate_func = action_group->private_data->translate_func;
translate_data = action_group->private_data->translate_data;
void
_gtk_action_group_emit_post_activate (GtkActionGroup *action_group,
- GtkAction *action)
+ GtkAction *action)
{
g_signal_emit (action_group, action_group_signals[POST_ACTIVATE], 0, action);
}
+
+#define __GTK_ACTION_GROUP_C__
+#include "gtkaliasdef.c"