Optimize automation-event process splitting
[ardour.git] / libs / gtkmm2ext / sync-menu.c
index 894446c4244fda580466c0312e67c4dd99da3be4..14933e511911ab8f8571493dcec590530346c2e1 100644 (file)
@@ -313,6 +313,7 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
          gint             n_keys;
          gint             use_command;
          gboolean         add_modifiers = FALSE;
+         UInt8            modifiers = 0; /* implies Command key */
 
          if (gdk_keymap_get_entries_for_keyval (keymap, key->accel_key,
                                                 &keys, &n_keys) == 0)
@@ -339,7 +340,7 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
                  default:
                          break;
                  }
-         
+
                  if (realkey != -1) {
                          SetMenuItemCommandKey (carbon_item->menu, carbon_item->index,
                                                 false, realkey);
@@ -347,10 +348,14 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
                  }
 
            } else {
-                 SetMenuItemCommandKey (carbon_item->menu, carbon_item->index,
-                                        true, keys[0].keycode);
-                 g_free (keys);
-                 add_modifiers = TRUE;
+                 SetMenuItemCommandKey (carbon_item->menu, carbon_item->index, true, keys[0].keycode);
+                 if (keys[0].level == 1) {
+                        /* regular key, but it needs shift to make it work */
+                        modifiers |= kMenuShiftModifier;
+                }
+
+                g_free (keys);
+                add_modifiers = TRUE;
            }
 
          if (add_modifiers)
@@ -376,11 +381,11 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
                  }
 
                  /* gdk/quartz maps Command to Meta */
-                 
+
                  if (key->accel_mods & GDK_META_MASK) {
                          use_command = 1;
                  }
-               }  
+               }
 
              if (!use_command)
                modifiers |= kMenuNoCommandModifier;
@@ -535,7 +540,7 @@ carbon_menu_item_connect (GtkWidget     *menu_item,
 
 static int _in_carbon_menu_event_handler = 0;
 
-int 
+int
 gdk_quartz_in_carbon_menu_event_handler ()
 {
        return _in_carbon_menu_event_handler;
@@ -589,7 +594,7 @@ menu_event_handler_func (EventHandlerCallRef  event_handler_call_ref,
                                         sizeof (widget), 0, &widget);
              if (err == noErr && GTK_IS_WIDGET (widget))
                {
-                 g_idle_add (dummy_gtk_menu_item_activate, widget);
+                 g_idle_add ((GSourceFunc) dummy_gtk_menu_item_activate, widget);
                  // gtk_menu_item_activate (GTK_MENU_ITEM (widget));
                  _in_carbon_menu_event_handler = 0;
                  return noErr;