Index: src/preferences/keymap/KeymapWindow.cpp
===================================================================
--- src/preferences/keymap/KeymapWindow.cpp	(révision 30920)
+++ src/preferences/keymap/KeymapWindow.cpp	(copie de travail)
@@ -561,6 +561,11 @@
 void
 KeymapWindow::_UpdateSwitchShortcutButton()
 {
+	if (fCurrentMap.KeyForModifier(B_LEFT_COMMAND_KEY) == 0x66)
+		fSwitchShortcutsButton->SetEnabled(false);
+	else
+		fSwitchShortcutsButton->SetEnabled(true);
+	
 	const char* label = "Switch Shortcut Keys";
 	if (fCurrentMap.KeyForModifier(B_LEFT_COMMAND_KEY) == 0x5d
 		&& fCurrentMap.KeyForModifier(B_LEFT_CONTROL_KEY) == 0x5c) {
Index: src/kits/interface/Menu.cpp
===================================================================
--- src/kits/interface/Menu.cpp	(révision 30920)
+++ src/kits/interface/Menu.cpp	(copie de travail)
@@ -78,7 +78,7 @@
 
 
 menu_info BMenu::sMenuInfo;
-bool BMenu::sAltAsCommandKey;
+menu_cmd_key BMenu::sCommandKey;
 
 
 static property_info sPropList[] = {
@@ -346,13 +346,16 @@
 {
 	BView::AttachedToWindow();
 
-	sAltAsCommandKey = true;
+	sCommandKey = B_COMMAND_IS_ALT;
 	key_map *keys = NULL;
 	char *chars = NULL;
 	get_key_map(&keys, &chars);
-	if (keys == NULL || keys->left_command_key != 0x5d
-		|| keys->left_control_key != 0x5c)
-		sAltAsCommandKey = false;
+	if (keys->left_command_key == 0x66) {
+		sCommandKey = B_COMMAND_IS_CMD;
+	} else if (keys == NULL || keys->left_command_key != 0x5d
+		|| keys->left_control_key != 0x5c) {
+		sCommandKey = B_COMMAND_IS_CTL;
+	}
 	free(chars);
 	free(keys);
 
@@ -2800,10 +2803,10 @@
 }
 
 
-bool
-MenuPrivate::IsAltCommandKey() const
+menu_cmd_key
+MenuPrivate::CommandKey() const
 {
-	return fMenu->sAltAsCommandKey;
+	return fMenu->sCommandKey;
 }
 
 
Index: src/kits/interface/MenuItem.cpp
===================================================================
--- src/kits/interface/MenuItem.cpp	(révision 30920)
+++ src/kits/interface/MenuItem.cpp	(copie de travail)
@@ -71,6 +71,20 @@
 };
 
 
+const unsigned char kCmdBits[] = {
+	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
+	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
+	0x1d,0x1a,0x13,0x04,0x04,0x13,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
+	0x1d,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x13,0x13,0x04,0x1a,0x04,0x04,0x04,0x13,0x1a,0x17,0x14,
+	0x1d,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x04,0x04,0x04,0x04,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x17,0x14,
+	0x1d,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x17,0x14,
+	0x1d,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x17,0x14,
+	0x1d,0x1a,0x13,0x04,0x04,0x13,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x04,0x13,0x1a,0x17,0x14,
+	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
+	0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
+	0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14
+};
+
 const unsigned char kShiftBits[] = {
 	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
@@ -790,13 +804,15 @@
 	where.y += (fBounds.Height() - 11) / 2 - 1;
 	where.x -= 4;	
 	
-	const bool altCommandKey = MenuPrivate(fSuper).IsAltCommandKey();
+	const menu_cmd_key commandKey = MenuPrivate(fSuper).CommandKey();
 	if (fModifiers & B_COMMAND_KEY) {
 		BRect rect(0,0,16,10);
 		BBitmap control(rect, B_CMAP8);
 
-		if (altCommandKey)
+		if (commandKey == B_COMMAND_IS_ALT)
 			control.ImportBits(kAltBits, sizeof(kAltBits), 17, 0, B_CMAP8);
+		else if (commandKey == B_COMMAND_IS_CMD)
+			control.ImportBits(kCmdBits, sizeof(kCmdBits), 19, 0, B_CMAP8);
 		else
 			control.ImportBits(kCtrlBits, sizeof(kCtrlBits), 17, 0, B_CMAP8);
 		
@@ -808,7 +824,7 @@
 		BRect rect(0,0,16,10);
 		BBitmap control(rect, B_CMAP8);
 
-		if (altCommandKey)
+		if (commandKey == B_COMMAND_IS_ALT || commandKey == B_COMMAND_IS_CMD)
 			control.ImportBits(kCtrlBits, sizeof(kCtrlBits), 17, 0, B_CMAP8);
 		else	
 			control.ImportBits(kAltBits, sizeof(kAltBits), 17, 0, B_CMAP8);
Index: headers/os/interface/Menu.h
===================================================================
--- headers/os/interface/Menu.h	(révision 30920)
+++ headers/os/interface/Menu.h	(copie de travail)
@@ -28,6 +28,12 @@
 	B_ITEMS_IN_MATRIX
 };
 
+enum menu_cmd_key {
+	B_COMMAND_IS_ALT = 0,
+	B_COMMAND_IS_CTL,
+	B_COMMAND_IS_CMD
+};
+
 struct menu_info {
 	float		font_size;
 	font_family	f_family;
@@ -243,7 +249,7 @@
 			void			_QuitTracking(bool onlyThis = true);
 
 	static	menu_info		sMenuInfo;
-	static	bool			sAltAsCommandKey;
+	static	menu_cmd_key	sCommandKey;
 
 			BMenuItem*		fChosenItem;
 			BList			fItems;
Index: headers/private/interface/MenuPrivate.h
===================================================================
--- headers/private/interface/MenuPrivate.h	(révision 30920)
+++ headers/private/interface/MenuPrivate.h	(copie de travail)
@@ -35,7 +35,7 @@
 	BRect Padding() const;
 	void GetItemMargins(float *, float *, float *, float *) const;
 
-	bool IsAltCommandKey() const;
+	menu_cmd_key CommandKey() const;
 	int State(BMenuItem **item = NULL) const;
 	
 	void Install(BWindow *window);
