
* chore: bump chromium in DEPS to 1e9f9a24aa12bea9cf194a82a7e249bd1242ec4f * chore: update patches * Make WebContents' theme color a base::Optional<SkColor>1540022
* update autofill patch for incorrect header includes * Move Shell messages to web_test and rename to BlinkTest.1525181
* Make PlatformNotificationServiceImpl a KeyedService.1336150
* Move MediaPlayerId to its own file.1547057
* Remove net/base/completion_callback.h, which is no longer used1552821
* AW NS: support file scheme cookies1533486
* Remove SecurityInfo and adapt remaining consumers1509455
* Remove deprecated type-specific number to string conversion functions1545881
* DevTools: Adding new performance histograms for launch of top 4 tools1506388
* Update include paths for //base/hash/hash.h1544630
* 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 MenuAnchorPosition1530508
* use maybe version of ToObject * RenderViewHost::GetProcess is no longer const * Unrefcount AuthChallengeInfo1550631
* MenuButtonController takes Button rather than MenuButton1500935
* add //ui/views_bridge_mac to deps to fix link error * forward declare views::Button in atom::MenuDelegate * more v8 patches * base/{=> hash}/md5.h1535124
* gfx::{PlatformFontWin => win}::*1534178
* fix v8 patches * [base] Rename TaskScheduler to ThreadPool1561552
* 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 refactor1562755
* 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 value1567955
* 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.1569376
* Make content::ResourceType an enum class.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
|