// Copyright 2014 The Chromium Embedded Framework Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.

#include "libcef/browser/native/menu_runner_linux.h"

#include "libcef/browser/browser_host_impl.h"

#include "base/compiler_specific.h"
#include "base/strings/string_util.h"
#include "ui/gfx/geometry/point.h"

CefMenuRunnerLinux::CefMenuRunnerLinux() {}

bool CefMenuRunnerLinux::RunContextMenu(
    CefBrowserHostImpl* browser,
    CefMenuModelImpl* model,
    const content::ContextMenuParams& params) {
  menu_.reset(
      new views::MenuRunner(model->model(), views::MenuRunner::CONTEXT_MENU));

  const gfx::Point& screen_point =
      browser->GetScreenPoint(gfx::Point(params.x, params.y));

  views::Widget* parent_widget = nullptr;
  if (!browser->IsWindowless())
    parent_widget = browser->GetWindowWidget();

  menu_->RunMenuAt(parent_widget, nullptr, gfx::Rect(screen_point, gfx::Size()),
                   views::MenuAnchorPosition::kTopRight, ui::MENU_SOURCE_NONE);

  return true;
}

void CefMenuRunnerLinux::CancelContextMenu() {
  if (menu_)
    menu_->Cancel();
}

bool CefMenuRunnerLinux::FormatLabel(base::string16& label) {
  // Remove the accelerator indicator (&) from label strings.
  const char16 replace[] = {L'&', 0};
  return base::ReplaceChars(label, replace, base::string16(), &label);
}
