GtkMenuTrackerItem: Unbreak accels

Forgot to port this one small part over.  Add it back.
This commit is contained in:
Ryan Lortie
2013-05-08 13:52:05 -04:00
parent a96fc95d6d
commit 7d3b8ad9bc
4 changed files with 79 additions and 2 deletions

View File

@@ -2112,6 +2112,7 @@ gtk_menu_shell_tracker_insert_func (GtkMenuTrackerItem *item,
g_object_bind_property (item, "visible", widget, "visible", G_BINDING_SYNC_CREATE);
g_object_bind_property (item, "role", widget, "action-role", G_BINDING_SYNC_CREATE);
g_object_bind_property (item, "toggled", widget, "toggled", G_BINDING_SYNC_CREATE);
g_object_bind_property (item, "accel", widget, "accel", G_BINDING_SYNC_CREATE);
g_signal_connect (widget, "activate", G_CALLBACK (gtk_menu_shell_item_activate), item);

View File

@@ -23,6 +23,7 @@ enum {
PROP_VISIBLE,
PROP_ROLE,
PROP_TOGGLED,
PROP_ACCEL,
PROP_SUBMENU,
PROP_SUBMENU_NAMESPACE,
N_PROPS
@@ -86,6 +87,9 @@ gtk_menu_tracker_item_get_property (GObject *object,
case PROP_TOGGLED:
g_value_set_boolean (value, gtk_menu_tracker_item_get_toggled (self));
break;
case PROP_ACCEL:
g_value_set_string (value, gtk_menu_tracker_item_get_accel (self));
break;
case PROP_SUBMENU:
g_value_set_object (value, gtk_menu_tracker_item_get_submenu (self));
break;
@@ -136,6 +140,8 @@ gtk_menu_tracker_item_class_init (GtkMenuTrackerItemClass *class)
G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_TOGGLED] =
g_param_spec_boolean ("toggled", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_ACCEL] =
g_param_spec_string ("accel", "", "", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_SUBMENU] =
g_param_spec_object ("submenu", "", "", G_TYPE_MENU_MODEL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_SUBMENU_NAMESPACE] =
@@ -409,6 +415,16 @@ gtk_menu_tracker_item_get_toggled (GtkMenuTrackerItem *self)
return self->toggled;
}
const gchar *
gtk_menu_tracker_item_get_accel (GtkMenuTrackerItem *self)
{
const gchar *accel = NULL;
g_menu_item_get_attribute (self->item, "accel", "&s", &accel);
return accel;
}
GMenuModel *
gtk_menu_tracker_item_get_submenu (GtkMenuTrackerItem *self)
{

View File

@@ -73,6 +73,9 @@ GtkMenuTrackerItemRole gtk_menu_tracker_item_get_role (GtkMenu
G_GNUC_INTERNAL
gboolean gtk_menu_tracker_item_get_toggled (GtkMenuTrackerItem *self);
G_GNUC_INTERNAL
const gchar * gtk_menu_tracker_item_get_accel (GtkMenuTrackerItem *self);
G_GNUC_INTERNAL
GMenuModel * gtk_menu_tracker_item_get_submenu (GtkMenuTrackerItem *self);

View File

@@ -21,7 +21,7 @@
#include "gtkmodelmenuitem.h"
#include "gtklabel.h"
#include "gtkaccellabel.h"
#include "gtkimage.h"
#include "gtkbox.h"
@@ -42,7 +42,8 @@ enum
PROP_ACTION_ROLE,
PROP_ICON,
PROP_TEXT,
PROP_TOGGLED
PROP_TOGGLED,
PROP_ACCEL
};
static void
@@ -237,6 +238,55 @@ gtk_model_menu_item_set_text (GtkModelMenuItem *item,
}
static void
gtk_model_menu_item_set_accel (GtkModelMenuItem *item,
const gchar *accel)
{
GtkWidget *child;
GList *children;
GdkModifierType modifiers;
guint key;
if (accel)
{
gtk_accelerator_parse (accel, &key, &modifiers);
if (!key)
modifiers = 0;
}
else
{
key = 0;
modifiers = 0;
}
child = gtk_bin_get_child (GTK_BIN (item));
if (child == NULL)
{
gtk_menu_item_get_label (GTK_MENU_ITEM (item));
child = gtk_bin_get_child (GTK_BIN (item));
g_assert (GTK_IS_LABEL (child));
}
if (GTK_IS_LABEL (child))
{
gtk_accel_label_set_accel (GTK_ACCEL_LABEL (child), key, modifiers);
return;
}
if (!GTK_IS_CONTAINER (child))
return;
children = gtk_container_get_children (GTK_CONTAINER (child));
while (children)
{
if (GTK_IS_ACCEL_LABEL (children->data))
gtk_accel_label_set_accel (children->data, key, modifiers);
children = g_list_delete_link (children, children);
}
}
void
gtk_model_menu_item_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
@@ -260,6 +310,10 @@ gtk_model_menu_item_set_property (GObject *object, guint prop_id,
_gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), g_value_get_boolean (value));
break;
case PROP_ACCEL:
gtk_model_menu_item_set_accel (item, g_value_get_string (value));
break;
default:
g_assert_not_reached ();
}
@@ -298,6 +352,9 @@ gtk_model_menu_item_class_init (GtkModelMenuItemClass *class)
g_object_class_install_property (object_class, PROP_TOGGLED,
g_param_spec_boolean ("toggled", "toggled", "toggled", FALSE,
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (object_class, PROP_ACCEL,
g_param_spec_string ("accel", "accel", "accel", NULL,
G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
}
GtkWidget *