]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkaccellabel.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / gtk / gtkaccellabel.c
index d374faa871ee9fe82312b4aa0f8de8b18fc75afb..d8bb7e96fa4069247059cc3183863c7fdc3af6ec 100644 (file)
@@ -836,12 +836,13 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
 #endif
       seen_mod = TRUE;
     }
-  if (seen_mod)
-    g_string_append (gstring, klass->mod_separator);
   
   ch = gdk_keyval_to_unicode (accelerator_key);
   if (ch && ch < 0x80 && (g_unichar_isgraph (ch) || ch == ' '))
     {
+      if (seen_mod)
+        g_string_append (gstring, klass->mod_separator);
+
       switch (ch)
        {
        case ' ':
@@ -862,6 +863,9 @@ _gtk_accel_label_class_get_accelerator_label (GtkAccelLabelClass *klass,
       tmp = gdk_keyval_name (gdk_keyval_to_lower (accelerator_key));
       if (tmp != NULL)
        {
+          if (seen_mod)
+            g_string_append (gstring, klass->mod_separator);
+
          if (tmp[0] != 0 && tmp[1] == 0)
            g_string_append_c (gstring, g_ascii_toupper (tmp[0]));
          else
@@ -908,23 +912,35 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label)
 
   if (enable_accels && (accel_label->priv->accel_closure || accel_label->priv->accel_key))
     {
-      guint accel_key = accel_label->priv->accel_key;
-      GdkModifierType accel_mods = accel_label->priv->accel_mods;
+      gboolean have_accel = FALSE;
+      guint accel_key;
+      GdkModifierType accel_mods;
+
+      /* First check for a manual accel set with _set_accel() */
+      if (accel_label->priv->accel_key)
+        {
+          accel_mods = accel_label->priv->accel_mods;
+          accel_key = accel_label->priv->accel_key;
+          have_accel = TRUE;
+        }
 
       /* If we don't have a hardcoded value, check the accel group */
-      if (!accel_key)
+      if (!have_accel)
         {
-          GtkAccelKey *key = gtk_accel_group_find (accel_label->priv->accel_group, find_accel, accel_label->priv->accel_closure);
+          GtkAccelKey *key;
+
+          key = gtk_accel_group_find (accel_label->priv->accel_group, find_accel, accel_label->priv->accel_closure);
 
           if (key && key->accel_flags & GTK_ACCEL_VISIBLE)
             {
               accel_key = key->accel_key;
               accel_mods = key->accel_mods;
+              have_accel = TRUE;
             }
         }
 
       /* If we found a key using either method, set it */
-      if (accel_key)
+      if (have_accel)
        {
          GtkAccelLabelClass *klass;
          gchar *tmp;
@@ -934,10 +950,12 @@ gtk_accel_label_refetch (GtkAccelLabel *accel_label)
          accel_label->priv->accel_string = g_strconcat ("   ", tmp, NULL);
          g_free (tmp);
        }
-      if (!accel_label->priv->accel_string)
-       accel_label->priv->accel_string = g_strdup ("-/-");
+
+      else
+        /* Otherwise we have a closure with no key.  Show "-/-". */
+        accel_label->priv->accel_string = g_strdup ("-/-");
     }
-  
+
   if (!accel_label->priv->accel_string)
     accel_label->priv->accel_string = g_strdup ("");