/* --- functions --- */
static gint
-gtk_accel_entries_equal (gpointer a,
- gpointer b)
+gtk_accel_entries_equal (gconstpointer a,
+ gconstpointer b)
{
- GtkAccelEntry *e1;
- GtkAccelEntry *e2;
+ const GtkAccelEntry *e1;
+ const GtkAccelEntry *e2;
e1 = a;
e2 = b;
}
static guint
-gtk_accel_entries_hash (gpointer a)
+gtk_accel_entries_hash (gconstpointer a)
{
- GtkAccelEntry *e;
+ const GtkAccelEntry *e;
guint h;
e = a;
if (!accel_groups_key_id)
{
- accel_groups_key_id = gtk_object_data_force_id (accel_groups_key);
- accel_entries_key_id = gtk_object_data_force_id (accel_entries_key);
+ accel_groups_key_id = g_quark_from_static_string (accel_groups_key);
+ accel_entries_key_id = g_quark_from_static_string (accel_entries_key);
accel_entry_hash_table = g_hash_table_new (gtk_accel_entries_hash,
gtk_accel_entries_equal);
"cannot be used as accelerator signal",
accel_signal,
gtk_type_name (GTK_OBJECT_TYPE (object)));
+ if (query)
+ g_free (query);
+
return;
}
-
+ g_free (query);
+
/* prematurely abort if the group/entry is already locked
*/
if (accel_group->lock_count > 0)
signal_flags,
class_type,
handler_offset,
- gtk_accel_group_marshal_add,
+ gtk_marshal_NONE__UINT_POINTER_UINT_UINT_ENUM,
GTK_TYPE_NONE, 5,
GTK_TYPE_UINT,
GTK_TYPE_ACCEL_GROUP,
signal_flags,
class_type,
handler_offset,
- gtk_accel_group_marshal_remove,
+ gtk_marshal_NONE__POINTER_UINT_UINT,
GTK_TYPE_NONE, 3,
GTK_TYPE_ACCEL_GROUP,
GTK_TYPE_UINT,
GTK_TYPE_GDK_MODIFIER_TYPE);
}
-void
-gtk_accel_group_marshal_add (GtkObject *object,
- GtkSignalFunc func,
- gpointer func_data,
- GtkArg *args)
-{
- GtkSignalAddAccelerator signal_func;
-
- signal_func = (GtkSignalAddAccelerator) func;
-
- signal_func (object,
- GTK_VALUE_UINT (args[0]),
- GTK_VALUE_BOXED (args[1]),
- GTK_VALUE_UINT (args[2]),
- GTK_VALUE_UINT (args[3]),
- GTK_VALUE_ENUM (args[4]),
- func_data);
-}
-
-void
-gtk_accel_group_marshal_remove (GtkObject *object,
- GtkSignalFunc func,
- gpointer func_data,
- GtkArg *args)
-{
- GtkSignalRemoveAccelerator signal_func;
-
- signal_func = (GtkSignalRemoveAccelerator) func;
-
- signal_func (object,
- GTK_VALUE_BOXED (args[0]),
- GTK_VALUE_UINT (args[1]),
- GTK_VALUE_UINT (args[2]),
- func_data);
-}
-
GSList*
gtk_accel_groups_from_object (GtkObject *object)
{
gboolean
gtk_accelerator_valid (guint keyval,
- guint modifiers)
+ GdkModifierType modifiers)
{
- guint invalid_accelerator_vals[] = {
+ static const guint invalid_accelerator_vals[] = {
GDK_BackSpace, GDK_Delete, GDK_KP_Delete,
GDK_Shift_L, GDK_Shift_R, GDK_Shift_Lock, GDK_Caps_Lock, GDK_ISO_Lock,
GDK_Control_L, GDK_Control_R, GDK_Meta_L, GDK_Meta_R,
(string[8] == '>'));
}
+static inline gboolean
+is_release (const gchar *string)
+{
+ return ((string[0] == '<') &&
+ (string[1] == 'r' || string[1] == 'R') &&
+ (string[2] == 'e' || string[2] == 'E') &&
+ (string[3] == 'l' || string[3] == 'L') &&
+ (string[4] == 'e' || string[4] == 'E') &&
+ (string[5] == 'a' || string[5] == 'A') &&
+ (string[6] == 's' || string[6] == 'S') &&
+ (string[7] == 'e' || string[7] == 'E') &&
+ (string[8] == '>'));
+}
+
void
gtk_accelerator_parse (const gchar *accelerator,
guint *accelerator_key,
{
if (*accelerator == '<')
{
- if (len >= 9 && is_control (accelerator))
+ if (len >= 9 && is_release (accelerator))
+ {
+ accelerator += 9;
+ len -= 9;
+ mods |= GDK_RELEASE_MASK;
+ }
+ else if (len >= 9 && is_control (accelerator))
{
accelerator += 9;
len -= 9;
}
else if (len >= 6 && is_modx (accelerator))
{
- guint mod_vals[] = {
+ static const guint mod_vals[] = {
GDK_MOD1_MASK, GDK_MOD2_MASK, GDK_MOD3_MASK,
GDK_MOD4_MASK, GDK_MOD5_MASK
};
gtk_accelerator_name (guint accelerator_key,
GdkModifierType accelerator_mods)
{
+ static const gchar text_release[] = "<Release>";
static const gchar text_shift[] = "<Shift>";
static const gchar text_control[] = "<Control>";
static const gchar text_mod1[] = "<Alt>";
keyval_name = "";
l = 0;
+ if (accelerator_mods & GDK_RELEASE_MASK)
+ l += sizeof (text_release) - 1;
if (accelerator_mods & GDK_SHIFT_MASK)
l += sizeof (text_shift) - 1;
if (accelerator_mods & GDK_CONTROL_MASK)
l = 0;
accelerator[l] = 0;
+ if (accelerator_mods & GDK_RELEASE_MASK)
+ {
+ strcpy (accelerator + l, text_release);
+ l += sizeof (text_release) - 1;
+ }
if (accelerator_mods & GDK_SHIFT_MASK)
{
strcpy (accelerator + l, text_shift);
}
void
-gtk_accelerator_set_default_mod_mask (guint default_mod_mask)
+gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask)
{
default_accel_mod_mask = default_mod_mask & GDK_MODIFIER_MASK;
}