Skip to content

Commit

Permalink
fix: do not use CONTEXT_MENU flag for tray menu (reland) (#24193)
Browse files Browse the repository at this point in the history
  • Loading branch information
trop[bot] committed Jun 18, 2020
1 parent 368f583 commit ee27523
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 40 deletions.
1 change: 1 addition & 0 deletions patches/chromium/.patches
Expand Up @@ -105,3 +105,4 @@ a11y_iterate_all_descendants_for_getselectioncount.patch
a11y_allows_klistboxoption_as_an_item_to_kgroup.patch
fix_handling_non_client_pointer_events_from_pen_on_windows_10.patch
allow_ime_to_insert_zero_length_composition_string.patch
remove_menu_window_task_item.patch
20 changes: 20 additions & 0 deletions patches/chromium/remove_menu_window_task_item.patch
@@ -0,0 +1,20 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Cheng Zhao <zcbenz@gmail.com>
Date: Thu, 4 Oct 2018 14:57:02 -0700
Subject: fix: remove menu window from taskbar

Refs https://chromium-review.googlesource.com/c/chromium/src/+/2245941

diff --git a/ui/views/widget/widget_hwnd_utils.cc b/ui/views/widget/widget_hwnd_utils.cc
index 40e66a212e3ea158b61f11d804a3c1644023b2d7..89f5b62f95dfec59bacf79f33895438039fac1c5 100644
--- a/ui/views/widget/widget_hwnd_utils.cc
+++ b/ui/views/widget/widget_hwnd_utils.cc
@@ -118,6 +118,8 @@ void CalculateWindowStylesFromInitParams(
else
*style |= WS_BORDER;
}
+ if (!params.force_show_in_taskbar)
+ *ex_style |= WS_EX_TOOLWINDOW;
break;
case Widget::InitParams::TYPE_TOOLTIP:
*style |= WS_POPUP;
35 changes: 5 additions & 30 deletions shell/browser/ui/win/notify_icon.cc
Expand Up @@ -18,7 +18,6 @@
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/image/image.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/widget/widget.h"

namespace {

Expand Down Expand Up @@ -49,11 +48,7 @@ NotifyIcon::NotifyIcon(NotifyIconHost* host,
HWND window,
UINT message,
GUID guid)
: host_(host),
icon_id_(id),
window_(window),
message_id_(message),
weak_factory_(this) {
: host_(host), icon_id_(id), window_(window), message_id_(message) {
guid_ = guid;
is_using_guid_ = guid != GUID_DEFAULT;
NOTIFYICONDATA icon_data;
Expand Down Expand Up @@ -213,26 +208,10 @@ void NotifyIcon::PopUpContextMenu(const gfx::Point& pos,
if (pos.IsOrigin())
rect.set_origin(display::Screen::GetScreen()->GetCursorScreenPoint());

// Create a widget for the menu, otherwise we get no keyboard events, which
// is required for accessibility.
widget_.reset(new views::Widget());
views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
params.ownership =
views::Widget::InitParams::Ownership::WIDGET_OWNS_NATIVE_WIDGET;
params.bounds = gfx::Rect(0, 0, 0, 0);
params.force_software_compositing = true;
params.z_order = ui::ZOrderLevel::kFloatingUIElement;

widget_->Init(std::move(params));

widget_->Show();
widget_->Activate();
menu_runner_.reset(new views::MenuRunner(
menu_model != nullptr ? menu_model : menu_model_,
views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS,
base::BindRepeating(&NotifyIcon::OnContextMenuClosed,
weak_factory_.GetWeakPtr())));
menu_runner_->RunMenuAt(widget_.get(), NULL, rect,
menu_runner_.reset(
new views::MenuRunner(menu_model != nullptr ? menu_model : menu_model_,
views::MenuRunner::HAS_MNEMONICS));
menu_runner_->RunMenuAt(nullptr, nullptr, rect,
views::MenuAnchorPosition::kTopLeft,
ui::MENU_SOURCE_MOUSE);
}
Expand Down Expand Up @@ -273,8 +252,4 @@ void NotifyIcon::InitIconData(NOTIFYICONDATA* icon_data) {
}
}

void NotifyIcon::OnContextMenuClosed() {
widget_->Close();
}

} // namespace electron
11 changes: 1 addition & 10 deletions shell/browser/ui/win/notify_icon.h
Expand Up @@ -14,7 +14,6 @@

#include "base/compiler_specific.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/win/scoped_gdi_object.h"
#include "shell/browser/ui/tray_icon.h"
#include "shell/browser/ui/win/notify_icon_host.h"
Expand All @@ -25,8 +24,7 @@ class Point;

namespace views {
class MenuRunner;
class Widget;
} // namespace views
}

namespace electron {

Expand Down Expand Up @@ -75,7 +73,6 @@ class NotifyIcon : public TrayIcon {

private:
void InitIconData(NOTIFYICONDATA* icon_data);
void OnContextMenuClosed();

// The tray that owns us. Weak.
NotifyIconHost* host_;
Expand Down Expand Up @@ -104,12 +101,6 @@ class NotifyIcon : public TrayIcon {
// Context menu associated with this icon (if any).
std::unique_ptr<views::MenuRunner> menu_runner_;

// Temporary widget for the context menu, needed for keyboard event capture.
std::unique_ptr<views::Widget> widget_;

// WeakPtrFactory for CloseClosure safety.
base::WeakPtrFactory<NotifyIcon> weak_factory_;

DISALLOW_COPY_AND_ASSIGN(NotifyIcon);
};

Expand Down

0 comments on commit ee27523

Please sign in to comment.