feat: add support for preventing the system context menu (#25795)
This commit is contained in:
parent
042d25e926
commit
6d5cf02abd
7 changed files with 36 additions and 0 deletions
|
@ -294,6 +294,12 @@ void BaseWindow::OnNewWindowForTab() {
|
|||
Emit("new-window-for-tab");
|
||||
}
|
||||
|
||||
void BaseWindow::OnSystemContextMenu(int x, int y, bool* prevent_default) {
|
||||
if (Emit("system-context-menu", gfx::Point(x, y))) {
|
||||
*prevent_default = true;
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
void BaseWindow::OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) {
|
||||
if (IsWindowMessageHooked(message)) {
|
||||
|
|
|
@ -82,6 +82,7 @@ class BaseWindow : public gin_helper::TrackableObject<BaseWindow>,
|
|||
void OnTouchBarItemResult(const std::string& item_id,
|
||||
const base::DictionaryValue& details) override;
|
||||
void OnNewWindowForTab() override;
|
||||
void OnSystemContextMenu(int x, int y, bool* prevent_default) override;
|
||||
#if defined(OS_WIN)
|
||||
void OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) override;
|
||||
#endif
|
||||
|
|
|
@ -579,6 +579,13 @@ void NativeWindow::NotifyNewWindowForTab() {
|
|||
observer.OnNewWindowForTab();
|
||||
}
|
||||
|
||||
void NativeWindow::NotifyWindowSystemContextMenu(int x,
|
||||
int y,
|
||||
bool* prevent_default) {
|
||||
for (NativeWindowObserver& observer : observers_)
|
||||
observer.OnSystemContextMenu(x, y, prevent_default);
|
||||
}
|
||||
|
||||
#if defined(OS_WIN)
|
||||
void NativeWindow::NotifyWindowMessage(UINT message,
|
||||
WPARAM w_param,
|
||||
|
|
|
@ -288,6 +288,7 @@ class NativeWindow : public base::SupportsUserData,
|
|||
void NotifyTouchBarItemInteraction(const std::string& item_id,
|
||||
const base::DictionaryValue& details);
|
||||
void NotifyNewWindowForTab();
|
||||
void NotifyWindowSystemContextMenu(int x, int y, bool* prevent_default);
|
||||
|
||||
#if defined(OS_WIN)
|
||||
void NotifyWindowMessage(UINT message, WPARAM w_param, LPARAM l_param);
|
||||
|
|
|
@ -92,6 +92,7 @@ class NativeWindowObserver : public base::CheckedObserver {
|
|||
virtual void OnTouchBarItemResult(const std::string& item_id,
|
||||
const base::DictionaryValue& details) {}
|
||||
virtual void OnNewWindowForTab() {}
|
||||
virtual void OnSystemContextMenu(int x, int y, bool* prevent_default) {}
|
||||
|
||||
// Called when window message received
|
||||
#if defined(OS_WIN)
|
||||
|
|
|
@ -306,6 +306,12 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
|||
}
|
||||
return false;
|
||||
}
|
||||
case WM_CONTEXTMENU: {
|
||||
bool prevent_default = false;
|
||||
NotifyWindowSystemContextMenu(GET_X_LPARAM(l_param),
|
||||
GET_Y_LPARAM(l_param), &prevent_default);
|
||||
return prevent_default;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue