render_view_context_menu_views.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/tab_contents/render_view_context_menu_views.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/logging.h" 8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/keycodes/keyboard_codes.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/accelerator.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/menu/menu_2.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RenderViewContextMenuViews, public: 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRenderViewContextMenuViews::RenderViewContextMenuViews( 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents* tab_contents, 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ContextMenuParams& params) 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : RenderViewContextMenu(tab_contents, params) { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochRenderViewContextMenuViews::~RenderViewContextMenuViews() { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RenderViewContextMenuViews::RunMenuAt(int x, int y) { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch menu_->RunContextMenuAt(gfx::Point(x, y)); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RenderViewContextMenuViews::SetExternal() { 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch external_ = true; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RenderViewContextMenuViews::UpdateMenuItemStates() { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch menu_->UpdateStates(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// RenderViewContextMenuViews, protected: 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RenderViewContextMenuViews::PlatformInit() { 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch menu_.reset(new views::Menu2(&menu_model_)); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (external_) { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The external tab container needs to be notified by command 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and not by index. So we are turning off the MNS_NOTIFYBYPOS 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // style. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HMENU menu = GetMenuHandle(); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(menu != NULL); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MENUINFO mi = {0}; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mi.cbSize = sizeof(mi); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mi.fMask = MIM_STYLE | MIM_MENUDATA; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch mi.dwMenuData = reinterpret_cast<ULONG_PTR>(this); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetMenuInfo(menu, &mi); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool RenderViewContextMenuViews::GetAcceleratorForCommandId( 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int command_id, 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::Accelerator* accel) { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // There are no formally defined accelerators we can query so we assume 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that Ctrl+C, Ctrl+V, Ctrl+X, Ctrl-A, etc do what they normally do. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (command_id) { 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_UNDO: 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_Z, false, true, false); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_REDO: 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(jcampan): should it be Ctrl-Y? 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_Z, true, true, false); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_CUT: 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_X, false, true, false); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_COPY: 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_C, false, true, false); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_PASTE: 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_V, false, true, false); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case IDC_CONTENT_CONTEXT_SELECTALL: 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen *accel = views::Accelerator(ui::VKEY_A, false, true, false); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 98