fix: context-menu event emitted in draggable regions (#45813)
* fix: context-menu event emitted in draggable regions * fix: only trigger on mouse release
This commit is contained in:
parent
00089a951b
commit
eac1a7ff68
3 changed files with 24 additions and 3 deletions
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "base/feature_list.h"
|
#include "base/feature_list.h"
|
||||||
#include "base/i18n/rtl.h"
|
#include "base/i18n/rtl.h"
|
||||||
|
#include "shell/browser/api/electron_api_web_contents.h"
|
||||||
#include "shell/browser/native_window_features.h"
|
#include "shell/browser/native_window_features.h"
|
||||||
#include "shell/browser/native_window_views.h"
|
#include "shell/browser/native_window_views.h"
|
||||||
#include "shell/browser/ui/views/client_frame_view_linux.h"
|
#include "shell/browser/ui/views/client_frame_view_linux.h"
|
||||||
|
@ -241,4 +242,23 @@ void ElectronDesktopWindowTreeHostLinux::UpdateFrameHints() {
|
||||||
SizeConstraintsChanged();
|
SizeConstraintsChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ElectronDesktopWindowTreeHostLinux::DispatchEvent(ui::Event* event) {
|
||||||
|
if (event->IsMouseEvent()) {
|
||||||
|
auto* mouse_event = static_cast<ui::MouseEvent*>(event);
|
||||||
|
bool is_mousedown = mouse_event->type() == ui::EventType::kMousePressed;
|
||||||
|
bool is_system_menu_trigger =
|
||||||
|
is_mousedown &&
|
||||||
|
(mouse_event->IsRightMouseButton() ||
|
||||||
|
(mouse_event->IsLeftMouseButton() && mouse_event->IsControlDown()));
|
||||||
|
if (is_system_menu_trigger) {
|
||||||
|
electron::api::WebContents::SetDisableDraggableRegions(true);
|
||||||
|
views::DesktopWindowTreeHostLinux::DispatchEvent(event);
|
||||||
|
electron::api::WebContents::SetDisableDraggableRegions(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
views::DesktopWindowTreeHostLinux::DispatchEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
|
@ -60,6 +60,7 @@ class ElectronDesktopWindowTreeHostLinux
|
||||||
|
|
||||||
// views::DesktopWindowTreeHostLinux:
|
// views::DesktopWindowTreeHostLinux:
|
||||||
void UpdateFrameHints() override;
|
void UpdateFrameHints() override;
|
||||||
|
void DispatchEvent(ui::Event* event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateWindowState(ui::PlatformWindowState new_state);
|
void UpdateWindowState(ui::PlatformWindowState new_state);
|
||||||
|
|
|
@ -2861,18 +2861,18 @@ describe('webContents module', () => {
|
||||||
|
|
||||||
await once(w.webContents, 'context-menu');
|
await once(w.webContents, 'context-menu');
|
||||||
await setTimeout(100);
|
await setTimeout(100);
|
||||||
|
|
||||||
expect(contextMenuEmitCount).to.equal(1);
|
expect(contextMenuEmitCount).to.equal(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('emits when right-clicked in page in a draggable region', async () => {
|
ifit(process.platform !== 'win32')('emits when right-clicked in page in a draggable region', async () => {
|
||||||
const w = new BrowserWindow({ show: false });
|
const w = new BrowserWindow({ show: false });
|
||||||
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]>;
|
||||||
|
|
||||||
// Simulate right-click to create context-menu event.
|
// Simulate right-click to create context-menu event.
|
||||||
const opts = { x: 0, y: 0, button: 'right' as const };
|
const midPoint = w.getBounds().width / 2;
|
||||||
|
const opts = { x: midPoint, y: midPoint, button: 'right' as const };
|
||||||
w.webContents.sendInputEvent({ ...opts, type: 'mouseDown' });
|
w.webContents.sendInputEvent({ ...opts, type: 'mouseDown' });
|
||||||
w.webContents.sendInputEvent({ ...opts, type: 'mouseUp' });
|
w.webContents.sendInputEvent({ ...opts, type: 'mouseUp' });
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue