716cb28430
* chore: bump chromium in DEPS to 1e9f9a24aa12bea9cf194a82a7e249bd1242ec4f * chore: update patches * Make WebContents' theme color a base::Optional<SkColor> https://chromium-review.googlesource.com/c/chromium/src/+/1540022 * update autofill patch for incorrect header includes * Move Shell messages to web_test and rename to BlinkTest. https://chromium-review.googlesource.com/c/chromium/src/+/1525181 * Make PlatformNotificationServiceImpl a KeyedService. https://chromium-review.googlesource.com/c/chromium/src/+/1336150 * Move MediaPlayerId to its own file. https://chromium-review.googlesource.com/c/chromium/src/+/1547057 * Remove net/base/completion_callback.h, which is no longer used https://chromium-review.googlesource.com/c/chromium/src/+/1552821 * AW NS: support file scheme cookies https://chromium-review.googlesource.com/c/chromium/src/+/1533486 * Remove SecurityInfo and adapt remaining consumers https://chromium-review.googlesource.com/c/chromium/src/+/1509455 * Remove deprecated type-specific number to string conversion functions https://chromium-review.googlesource.com/c/chromium/src/+/1545881 * DevTools: Adding new performance histograms for launch of top 4 tools https://chromium-review.googlesource.com/c/chromium/src/+/1506388 * Update include paths for //base/hash/hash.h https://chromium-review.googlesource.com/c/chromium/src/+/1544630 * build: Disable ensure_gn_version gclient hook for mac CI checkout * update patches * use maybe version of v8::String::NewFromTwoByte * bump appveyor image version * fix mac ci hopefully * Convert enum to enum class for MenuAnchorPosition https://chromium-review.googlesource.com/c/chromium/src/+/1530508 * use maybe version of ToObject * RenderViewHost::GetProcess is no longer const * Unrefcount AuthChallengeInfo https://chromium-review.googlesource.com/c/chromium/src/+/1550631 * MenuButtonController takes Button rather than MenuButton https://chromium-review.googlesource.com/c/chromium/src/+/1500935 * add //ui/views_bridge_mac to deps to fix link error * forward declare views::Button in atom::MenuDelegate * more v8 patches * base/{=> hash}/md5.h https://chromium-review.googlesource.com/c/chromium/src/+/1535124 * gfx::{PlatformFontWin => win}::* https://chromium-review.googlesource.com/c/chromium/src/+/1534178 * fix v8 patches * [base] Rename TaskScheduler to ThreadPool https://chromium-review.googlesource.com/c/chromium/src/+/1561552 * use internal_config_base for bytecode_builtins_list_generator avoids windows link errors * FIXME: temporarily disable v8/breakpad integration * FIXME: temporarily disable prevent-will-redirect test * FIXME: disable neon on aarch64 pending crbug.com/953815 * update to account for WebCursor refactor https://chromium-review.googlesource.com/c/chromium/src/+/1562755 * enable stack dumping on appveyor * Revert "FIXME: disable neon on aarch64 pending crbug.com/953815" This reverts commit 57f082026be3d83069f2a2814684abf4dc9e7b53. * fix: remove const qualifiers to match upstream * fix: remove const qualifiers to match upstream in cc files as well * don't throw an error when testing if an object is an object * use non-deprecated Buffer constructor * Remove net::CookieSameSite::DEFAULT_MODE enum value https://chromium-review.googlesource.com/c/chromium/src/+/1567955 * depend on modded dbus-native to work around buffer deprecation https://github.com/sidorares/dbus-native/pull/262 * revert clang roll to fix arm build on linux * fixup! depend on modded dbus-native to work around buffer deprecation need more coffee * update coffee-script * robustify verify-mksnapshot w.r.t. command-line parameters * Revert "robustify verify-mksnapshot w.r.t. command-line parameters" This reverts commit a49af01411f684f6025528d604895c3696e0bc57. * fix mksnapshot by matching args * update patches * TMP: enable rdp on appveyor * Changed ContentBrowserClient::CreateQuotaPermissionContext() to return scoped_refptr. https://chromium-review.googlesource.com/c/chromium/src/+/1569376 * Make content::ResourceType an enum class. https://chromium-review.googlesource.com/c/chromium/src/+/1569345 * fixup! Make content::ResourceType an enum class. * turn off rdp * use net::CompletionRepeatingCallback instead of base::Callback<void(int)> * remove disable_ensure_gn_version_gclient_hook.patch * copy repeating callback instead of std::move * fix lint * add completion_repeating_callback.h include
84 lines
2.5 KiB
C++
84 lines
2.5 KiB
C++
// Copyright (c) 2014 GitHub, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "atom/browser/api/atom_api_menu_views.h"
|
|
|
|
#include <memory>
|
|
|
|
#include "atom/browser/native_window_views.h"
|
|
#include "atom/browser/unresponsive_suppressor.h"
|
|
#include "ui/display/screen.h"
|
|
|
|
using views::MenuRunner;
|
|
|
|
namespace atom {
|
|
|
|
namespace api {
|
|
|
|
MenuViews::MenuViews(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
|
: Menu(isolate, wrapper), weak_factory_(this) {}
|
|
|
|
MenuViews::~MenuViews() = default;
|
|
|
|
void MenuViews::PopupAt(TopLevelWindow* window,
|
|
int x,
|
|
int y,
|
|
int positioning_item,
|
|
const base::Closure& callback) {
|
|
auto* native_window = static_cast<NativeWindowViews*>(window->window());
|
|
if (!native_window)
|
|
return;
|
|
|
|
// (-1, -1) means showing on mouse location.
|
|
gfx::Point location;
|
|
if (x == -1 || y == -1) {
|
|
location = display::Screen::GetScreen()->GetCursorScreenPoint();
|
|
} else {
|
|
gfx::Point origin = native_window->GetContentBounds().origin();
|
|
location = gfx::Point(origin.x() + x, origin.y() + y);
|
|
}
|
|
|
|
int flags = MenuRunner::CONTEXT_MENU | MenuRunner::HAS_MNEMONICS;
|
|
|
|
// Don't emit unresponsive event when showing menu.
|
|
atom::UnresponsiveSuppressor suppressor;
|
|
|
|
// Show the menu.
|
|
int32_t window_id = window->weak_map_id();
|
|
auto close_callback = base::Bind(
|
|
&MenuViews::OnClosed, weak_factory_.GetWeakPtr(), window_id, callback);
|
|
menu_runners_[window_id] =
|
|
std::make_unique<MenuRunner>(model(), flags, close_callback);
|
|
menu_runners_[window_id]->RunMenuAt(
|
|
native_window->widget(), NULL, gfx::Rect(location, gfx::Size()),
|
|
views::MenuAnchorPosition::kTopLeft, ui::MENU_SOURCE_MOUSE);
|
|
}
|
|
|
|
void MenuViews::ClosePopupAt(int32_t window_id) {
|
|
auto runner = menu_runners_.find(window_id);
|
|
if (runner != menu_runners_.end()) {
|
|
// Close the runner for the window.
|
|
runner->second->Cancel();
|
|
} else if (window_id == -1) {
|
|
// Or just close all opened runners.
|
|
for (auto it = menu_runners_.begin(); it != menu_runners_.end();) {
|
|
// The iterator is invalidated after the call.
|
|
(it++)->second->Cancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
void MenuViews::OnClosed(int32_t window_id, base::Closure callback) {
|
|
menu_runners_.erase(window_id);
|
|
callback.Run();
|
|
}
|
|
|
|
// static
|
|
mate::WrappableBase* Menu::New(mate::Arguments* args) {
|
|
return new MenuViews(args->isolate(), args->GetThis());
|
|
}
|
|
|
|
} // namespace api
|
|
|
|
} // namespace atom
|