fix: emit context-menu
event in Windows draggable regions (#46334)
fix: emit `context-menu` event in Windows draggable regions (#46032) fix: emit context-menu event in Windows draggable regions Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
parent
929cba26c2
commit
60427961a2
3 changed files with 29 additions and 5 deletions
|
@ -10,6 +10,7 @@
|
||||||
#include "base/win/scoped_handle.h"
|
#include "base/win/scoped_handle.h"
|
||||||
#include "base/win/windows_version.h"
|
#include "base/win/windows_version.h"
|
||||||
#include "content/public/browser/browser_accessibility_state.h"
|
#include "content/public/browser/browser_accessibility_state.h"
|
||||||
|
#include "shell/browser/api/electron_api_web_contents.h"
|
||||||
#include "shell/browser/browser.h"
|
#include "shell/browser/browser.h"
|
||||||
#include "shell/browser/native_window_views.h"
|
#include "shell/browser/native_window_views.h"
|
||||||
#include "shell/browser/ui/views/root_view.h"
|
#include "shell/browser/ui/views/root_view.h"
|
||||||
|
@ -288,6 +289,11 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
case WM_RBUTTONUP: {
|
||||||
|
if (!has_frame())
|
||||||
|
electron::api::WebContents::SetDisableDraggableRegions(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
case WM_GETMINMAXINFO: {
|
case WM_GETMINMAXINFO: {
|
||||||
WINDOWPLACEMENT wp;
|
WINDOWPLACEMENT wp;
|
||||||
wp.length = sizeof(WINDOWPLACEMENT);
|
wp.length = sizeof(WINDOWPLACEMENT);
|
||||||
|
@ -411,10 +417,16 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case WM_CONTEXTMENU: {
|
case WM_CONTEXTMENU: {
|
||||||
bool prevent_default = false;
|
// We don't want to trigger system-context-menu here if we have a
|
||||||
NotifyWindowSystemContextMenu(GET_X_LPARAM(l_param),
|
// frameless window as it'll already be emitted in
|
||||||
GET_Y_LPARAM(l_param), &prevent_default);
|
// ElectronDesktopWindowTreeHostWin::HandleMouseEvent.
|
||||||
return prevent_default;
|
if (has_frame()) {
|
||||||
|
bool prevent_default = false;
|
||||||
|
NotifyWindowSystemContextMenu(GET_X_LPARAM(l_param),
|
||||||
|
GET_Y_LPARAM(l_param), &prevent_default);
|
||||||
|
return prevent_default;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
case WM_SYSCOMMAND: {
|
case WM_SYSCOMMAND: {
|
||||||
// Mask is needed to account for double clicking title bar to maximize
|
// Mask is needed to account for double clicking title bar to maximize
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "base/win/windows_version.h"
|
#include "base/win/windows_version.h"
|
||||||
#include "electron/buildflags/buildflags.h"
|
#include "electron/buildflags/buildflags.h"
|
||||||
|
#include "shell/browser/api/electron_api_web_contents.h"
|
||||||
#include "shell/browser/native_window_views.h"
|
#include "shell/browser/native_window_views.h"
|
||||||
#include "shell/browser/ui/views/win_frame_view.h"
|
#include "shell/browser/ui/views/win_frame_view.h"
|
||||||
#include "shell/browser/win/dark_mode.h"
|
#include "shell/browser/win/dark_mode.h"
|
||||||
|
@ -113,6 +114,12 @@ bool ElectronDesktopWindowTreeHostWin::HandleMouseEvent(ui::MouseEvent* event) {
|
||||||
bool prevent_default = false;
|
bool prevent_default = false;
|
||||||
native_window_view_->NotifyWindowSystemContextMenu(event->x(), event->y(),
|
native_window_view_->NotifyWindowSystemContextMenu(event->x(), event->y(),
|
||||||
&prevent_default);
|
&prevent_default);
|
||||||
|
// If the user prevents default behavior, emit contextmenu event to
|
||||||
|
// allow bringing up the custom menu.
|
||||||
|
if (prevent_default) {
|
||||||
|
electron::api::WebContents::SetDisableDraggableRegions(true);
|
||||||
|
views::DesktopWindowTreeHostWin::HandleMouseEvent(event);
|
||||||
|
}
|
||||||
return prevent_default;
|
return prevent_default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2942,8 +2942,13 @@ describe('webContents module', () => {
|
||||||
expect(contextMenuEmitCount).to.equal(1);
|
expect(contextMenuEmitCount).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
ifit(process.platform !== 'win32')('emits when right-clicked in page in a draggable region', async () => {
|
it('emits when right-clicked in page in a draggable region', async () => {
|
||||||
const w = new BrowserWindow({ show: false });
|
const w = new BrowserWindow({ show: false });
|
||||||
|
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
w.on('system-context-menu', (event) => { event.preventDefault(); });
|
||||||
|
}
|
||||||
|
|
||||||
await w.loadFile(path.join(fixturesPath, 'pages', 'draggable-page.html'));
|
await w.loadFile(path.join(fixturesPath, 'pages', 'draggable-page.html'));
|
||||||
|
|
||||||
const promise = once(w.webContents, 'context-menu') as Promise<[any, Electron.ContextMenuParams]>;
|
const promise = once(w.webContents, 'context-menu') as Promise<[any, Electron.ContextMenuParams]>;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue