]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkaccelgroup.c
Add @INTLLIBS@. gtk-scier-981116-0.patch Sean Cier
[~andy/gtk] / gtk / gtkaccelgroup.c
index b834199afe3fc274c289557699530623b1fe80e4..f929912fbe9103eecdd5492ce6b48bd34222e880 100644 (file)
@@ -57,11 +57,11 @@ static GMemChunk    *accel_entries_mem_chunk = NULL;
 
 /* --- 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;
@@ -72,9 +72,9 @@ gtk_accel_entries_equal (gpointer a,
 }
 
 static guint
-gtk_accel_entries_hash (gpointer a)
+gtk_accel_entries_hash (gconstpointer a)
 {
-  GtkAccelEntry *e;
+  const GtkAccelEntry *e;
   guint h;
   
   e = a;
@@ -94,8 +94,8 @@ gtk_accel_group_new (void)
   
   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);
@@ -376,9 +376,13 @@ gtk_accel_group_add (GtkAccelGroup *accel_group,
                 "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)
@@ -649,7 +653,7 @@ gtk_accel_group_create_add (GtkType          class_type,
                         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,
@@ -669,49 +673,13 @@ gtk_accel_group_create_remove (GtkType          class_type,
                         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)
 {
@@ -732,9 +700,9 @@ gtk_accel_group_entries_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,
@@ -844,6 +812,20 @@ is_control (const gchar *string)
          (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,
@@ -866,7 +848,13 @@ gtk_accelerator_parse (const gchar    *accelerator,
     {
       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;
@@ -892,7 +880,7 @@ gtk_accelerator_parse (const gchar    *accelerator,
            }
          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
              };
@@ -945,6 +933,7 @@ gchar*
 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>";
@@ -963,6 +952,8 @@ gtk_accelerator_name (guint           accelerator_key,
     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)
@@ -983,6 +974,11 @@ gtk_accelerator_name (guint           accelerator_key,
 
   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);
@@ -1024,7 +1020,7 @@ gtk_accelerator_name (guint           accelerator_key,
 }
 
 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;
 }