feat: replace scroll-touch* with generic input-event (#35531)
This commit is contained in:
parent
dfb8a2d804
commit
f82a863f65
20 changed files with 253 additions and 138 deletions
|
@ -247,14 +247,6 @@ void BaseWindow::OnWindowLeaveFullScreen() {
|
|||
Emit("leave-full-screen");
|
||||
}
|
||||
|
||||
void BaseWindow::OnWindowScrollTouchBegin() {
|
||||
Emit("scroll-touch-begin");
|
||||
}
|
||||
|
||||
void BaseWindow::OnWindowScrollTouchEnd() {
|
||||
Emit("scroll-touch-end");
|
||||
}
|
||||
|
||||
void BaseWindow::OnWindowSwipe(const std::string& direction) {
|
||||
Emit("swipe", direction);
|
||||
}
|
||||
|
|
|
@ -68,8 +68,6 @@ class BaseWindow : public gin_helper::TrackableObject<BaseWindow>,
|
|||
bool* prevent_default) override;
|
||||
void OnWindowMove() override;
|
||||
void OnWindowMoved() override;
|
||||
void OnWindowScrollTouchBegin() override;
|
||||
void OnWindowScrollTouchEnd() override;
|
||||
void OnWindowSwipe(const std::string& direction) override;
|
||||
void OnWindowRotateGesture(float rotation) override;
|
||||
void OnWindowSheetBegin() override;
|
||||
|
|
|
@ -106,10 +106,6 @@ BrowserWindow::BrowserWindow(gin::Arguments* args,
|
|||
// Associate with BrowserWindow.
|
||||
web_contents->SetOwnerWindow(window());
|
||||
|
||||
auto* host = web_contents->web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->AddInputEventObserver(this);
|
||||
|
||||
InitWithArgs(args);
|
||||
|
||||
// Install the content view after BaseWindow's JS code is initialized.
|
||||
|
@ -128,9 +124,6 @@ BrowserWindow::~BrowserWindow() {
|
|||
if (api_web_contents_) {
|
||||
// Cleanup the observers if user destroyed this instance directly instead of
|
||||
// gracefully closing content::WebContents.
|
||||
auto* host = web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->RemoveInputEventObserver(this);
|
||||
api_web_contents_->RemoveObserver(this);
|
||||
// Destroy the WebContents.
|
||||
OnCloseContents();
|
||||
|
@ -138,26 +131,6 @@ BrowserWindow::~BrowserWindow() {
|
|||
}
|
||||
}
|
||||
|
||||
void BrowserWindow::OnInputEvent(const blink::WebInputEvent& event) {
|
||||
switch (event.GetType()) {
|
||||
case blink::WebInputEvent::Type::kGestureScrollBegin:
|
||||
case blink::WebInputEvent::Type::kGestureScrollUpdate:
|
||||
case blink::WebInputEvent::Type::kGestureScrollEnd:
|
||||
Emit("scroll-touch-edge");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void BrowserWindow::RenderViewHostChanged(content::RenderViewHost* old_host,
|
||||
content::RenderViewHost* new_host) {
|
||||
if (old_host)
|
||||
old_host->GetWidget()->RemoveInputEventObserver(this);
|
||||
if (new_host)
|
||||
new_host->GetWidget()->AddInputEventObserver(this);
|
||||
}
|
||||
|
||||
void BrowserWindow::BeforeUnloadDialogCancelled() {
|
||||
WindowList::WindowCloseCancelled(window());
|
||||
// Cancel unresponsive event when window close is cancelled.
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
namespace electron::api {
|
||||
|
||||
class BrowserWindow : public BaseWindow,
|
||||
public content::RenderWidgetHost::InputEventObserver,
|
||||
public content::WebContentsObserver,
|
||||
public ExtendedWebContentsObserver {
|
||||
public:
|
||||
|
@ -43,12 +42,7 @@ class BrowserWindow : public BaseWindow,
|
|||
BrowserWindow(gin::Arguments* args, const gin_helper::Dictionary& options);
|
||||
~BrowserWindow() override;
|
||||
|
||||
// content::RenderWidgetHost::InputEventObserver:
|
||||
void OnInputEvent(const blink::WebInputEvent& event) override;
|
||||
|
||||
// content::WebContentsObserver:
|
||||
void RenderViewHostChanged(content::RenderViewHost* old_host,
|
||||
content::RenderViewHost* new_host) override;
|
||||
void BeforeUnloadDialogCancelled() override;
|
||||
void OnRendererUnresponsive(content::RenderProcessHost*) override;
|
||||
void OnRendererResponsive(
|
||||
|
|
|
@ -820,6 +820,12 @@ void WebContents::InitZoomController(content::WebContents* web_contents,
|
|||
double zoom_factor;
|
||||
if (options.Get(options::kZoomFactor, &zoom_factor))
|
||||
zoom_controller_->SetDefaultZoomFactor(zoom_factor);
|
||||
|
||||
// Nothing to do with ZoomController, but this function gets called in all
|
||||
// init cases!
|
||||
content::RenderViewHost* host = web_contents->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->AddInputEventObserver(this);
|
||||
}
|
||||
|
||||
void WebContents::InitWithSessionAndOptions(
|
||||
|
@ -957,6 +963,12 @@ void WebContents::InitWithWebContents(
|
|||
}
|
||||
|
||||
WebContents::~WebContents() {
|
||||
if (web_contents()) {
|
||||
content::RenderViewHost* host = web_contents()->GetRenderViewHost();
|
||||
if (host)
|
||||
host->GetWidget()->RemoveInputEventObserver(this);
|
||||
}
|
||||
|
||||
if (!inspectable_web_contents_) {
|
||||
WebContentsDestroyed();
|
||||
return;
|
||||
|
@ -1273,7 +1285,12 @@ content::KeyboardEventProcessingResult WebContents::PreHandleKeyboardEvent(
|
|||
|
||||
if (event.GetType() == blink::WebInputEvent::Type::kRawKeyDown ||
|
||||
event.GetType() == blink::WebInputEvent::Type::kKeyUp) {
|
||||
bool prevent_default = Emit("before-input-event", event);
|
||||
// For backwards compatibility, pretend that `kRawKeyDown` events are
|
||||
// actually `kKeyDown`.
|
||||
content::NativeWebKeyboardEvent tweaked_event(event);
|
||||
if (event.GetType() == blink::WebInputEvent::Type::kRawKeyDown)
|
||||
tweaked_event.SetType(blink::WebInputEvent::Type::kKeyDown);
|
||||
bool prevent_default = Emit("before-input-event", tweaked_event);
|
||||
if (prevent_default) {
|
||||
return content::KeyboardEventProcessingResult::HANDLED;
|
||||
}
|
||||
|
@ -1684,6 +1701,14 @@ void WebContents::OnWebContentsLostFocus(
|
|||
Emit("blur");
|
||||
}
|
||||
|
||||
void WebContents::RenderViewHostChanged(content::RenderViewHost* old_host,
|
||||
content::RenderViewHost* new_host) {
|
||||
if (old_host)
|
||||
old_host->GetWidget()->RemoveInputEventObserver(this);
|
||||
if (new_host)
|
||||
new_host->GetWidget()->AddInputEventObserver(this);
|
||||
}
|
||||
|
||||
void WebContents::DOMContentLoaded(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
auto* web_frame = WebFrameMain::FromRenderFrameHost(render_frame_host);
|
||||
|
@ -3060,6 +3085,9 @@ void WebContents::SendInputEvent(v8::Isolate* isolate,
|
|||
blink::WebKeyboardEvent::Type::kRawKeyDown,
|
||||
blink::WebInputEvent::Modifiers::kNoModifiers, ui::EventTimeForNow());
|
||||
if (gin::ConvertFromV8(isolate, input_event, &keyboard_event)) {
|
||||
// For backwards compatibility, convert `kKeyDown` to `kRawKeyDown`.
|
||||
if (keyboard_event.GetType() == blink::WebKeyboardEvent::Type::kKeyDown)
|
||||
keyboard_event.SetType(blink::WebKeyboardEvent::Type::kRawKeyDown);
|
||||
rwh->ForwardKeyboardEvent(keyboard_event);
|
||||
return;
|
||||
}
|
||||
|
@ -3466,6 +3494,10 @@ void WebContents::SetImageAnimationPolicy(const std::string& new_policy) {
|
|||
web_contents()->OnWebPreferencesChanged();
|
||||
}
|
||||
|
||||
void WebContents::OnInputEvent(const blink::WebInputEvent& event) {
|
||||
Emit("input-event", event);
|
||||
}
|
||||
|
||||
v8::Local<v8::Promise> WebContents::GetProcessMemoryInfo(v8::Isolate* isolate) {
|
||||
gin_helper::Promise<gin_helper::Dictionary> promise(isolate);
|
||||
v8::Local<v8::Promise> handle = promise.GetHandle();
|
||||
|
|
|
@ -103,6 +103,7 @@ class WebContents : public ExclusiveAccessContext,
|
|||
public gin_helper::CleanedUpAtExit,
|
||||
public content::WebContentsObserver,
|
||||
public content::WebContentsDelegate,
|
||||
public content::RenderWidgetHost::InputEventObserver,
|
||||
public InspectableWebContentsDelegate,
|
||||
public InspectableWebContentsViewDelegate {
|
||||
public:
|
||||
|
@ -433,6 +434,9 @@ class WebContents : public ExclusiveAccessContext,
|
|||
|
||||
void SetImageAnimationPolicy(const std::string& new_policy);
|
||||
|
||||
// content::RenderWidgetHost::InputEventObserver:
|
||||
void OnInputEvent(const blink::WebInputEvent& event) override;
|
||||
|
||||
// disable copy
|
||||
WebContents(const WebContents&) = delete;
|
||||
WebContents& operator=(const WebContents&) = delete;
|
||||
|
@ -616,6 +620,8 @@ class WebContents : public ExclusiveAccessContext,
|
|||
content::RenderWidgetHost* render_widget_host) override;
|
||||
void OnWebContentsLostFocus(
|
||||
content::RenderWidgetHost* render_widget_host) override;
|
||||
void RenderViewHostChanged(content::RenderViewHost* old_host,
|
||||
content::RenderViewHost* new_host) override;
|
||||
|
||||
// InspectableWebContentsDelegate:
|
||||
void DevToolsReloadPage() override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue