| Index: ash/accelerators/accelerator_controller.cc | 
| diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc | 
| index f6199cc4e3024597da006da8b2c15bc9c4db337e..7f94f3b172430cb797b2ab6e17efd8f4534801a0 100644 | 
| --- a/ash/accelerators/accelerator_controller.cc | 
| +++ b/ash/accelerators/accelerator_controller.cc | 
| @@ -534,6 +534,31 @@ bool AcceleratorController::PerformAction(int action, | 
| // this key combination is reserved for partial screenshot. | 
| return true; | 
| case TOGGLE_APP_LIST: | 
| +      if (accelerator.key_code() == ui::VKEY_LWIN) { | 
| +        // For bindings on the Search key, activate the binding on press if the | 
| +        // Search key is not acting as a modifier. Otherwise, activate it on | 
| +        // release. | 
| + | 
| +        const ui::KeyboardCode previous_key_code = | 
| +            context_.previous_accelerator().key_code(); | 
| + | 
| +        const bool search_as_function_key = | 
| +            Shell::GetInstance()->delegate()->IsSearchKeyActingAsFunctionKey(); | 
| +        const bool type_pressed = accelerator.type() == ui::ET_KEY_PRESSED; | 
| + | 
| +        if (!search_as_function_key && !type_pressed) | 
| +          return false; | 
| +        if (search_as_function_key && type_pressed) | 
| +          return false; | 
| +        if (search_as_function_key && | 
| +            // If something else was pressed between the Search key (LWIN) | 
| +            // being pressed and released, then ignore the release of the | 
| +            // Search key. | 
| +            (previous_event_type == ui::ET_KEY_RELEASED || | 
| +             previous_key_code != ui::VKEY_LWIN)) { | 
| +          return false; | 
| +        } | 
| +      } | 
| if (key_code == ui::VKEY_LWIN && shell->delegate()) | 
| shell->delegate()->RecordUserMetricsAction(UMA_ACCEL_SEARCH_LWIN); | 
| // When spoken feedback is enabled, we should neither toggle the list nor | 
|  |