feat: 'will-move' event for windows. (#14283)

* feat: 'will-resize' window event (Windows only)

* documentation for 'will-move' event

* comment and line break fix in docs
This commit is contained in:
Siddharth Dalal 2018-08-28 09:44:10 -04:00 committed by Charles Kerr
parent f1fe485768
commit afdb6c5f90
7 changed files with 37 additions and 1 deletions

View file

@ -205,6 +205,13 @@ void TopLevelWindow::OnWindowResize() {
Emit("resize"); Emit("resize");
} }
void TopLevelWindow::OnWindowWillMove(const gfx::Rect& new_bounds,
bool* prevent_default) {
if (Emit("will-move", new_bounds)) {
*prevent_default = true;
}
}
void TopLevelWindow::OnWindowMove() { void TopLevelWindow::OnWindowMove() {
Emit("move"); Emit("move");
} }

View file

@ -63,6 +63,8 @@ class TopLevelWindow : public mate::TrackableObject<TopLevelWindow>,
void OnWindowWillResize(const gfx::Rect& new_bounds, void OnWindowWillResize(const gfx::Rect& new_bounds,
bool* prevent_default) override; bool* prevent_default) override;
void OnWindowResize() override; void OnWindowResize() override;
void OnWindowWillMove(const gfx::Rect& new_bounds,
bool* prevent_default) override;
void OnWindowMove() override; void OnWindowMove() override;
void OnWindowMoved() override; void OnWindowMoved() override;
void OnWindowScrollTouchBegin() override; void OnWindowScrollTouchBegin() override;

View file

@ -468,6 +468,12 @@ void NativeWindow::NotifyWindowWillResize(const gfx::Rect& new_bounds,
observer.OnWindowWillResize(new_bounds, prevent_default); observer.OnWindowWillResize(new_bounds, prevent_default);
} }
void NativeWindow::NotifyWindowWillMove(const gfx::Rect& new_bounds,
bool* prevent_default) {
for (NativeWindowObserver& observer : observers_)
observer.OnWindowWillMove(new_bounds, prevent_default);
}
void NativeWindow::NotifyWindowResize() { void NativeWindow::NotifyWindowResize() {
for (NativeWindowObserver& observer : observers_) for (NativeWindowObserver& observer : observers_)
observer.OnWindowResize(); observer.OnWindowResize();

View file

@ -241,6 +241,7 @@ class NativeWindow : public base::SupportsUserData,
void NotifyWindowWillResize(const gfx::Rect& new_bounds, void NotifyWindowWillResize(const gfx::Rect& new_bounds,
bool* prevent_default); bool* prevent_default);
void NotifyWindowResize(); void NotifyWindowResize();
void NotifyWindowWillMove(const gfx::Rect& new_bounds, bool* prevent_default);
void NotifyWindowMoved(); void NotifyWindowMoved();
void NotifyWindowScrollTouchBegin(); void NotifyWindowScrollTouchBegin();
void NotifyWindowScrollTouchEnd(); void NotifyWindowScrollTouchEnd();

View file

@ -70,6 +70,8 @@ class NativeWindowObserver {
virtual void OnWindowWillResize(const gfx::Rect& new_bounds, virtual void OnWindowWillResize(const gfx::Rect& new_bounds,
bool* prevent_default) {} bool* prevent_default) {}
virtual void OnWindowResize() {} virtual void OnWindowResize() {}
virtual void OnWindowWillMove(const gfx::Rect& new_bounds,
bool* prevent_default) {}
virtual void OnWindowMove() {} virtual void OnWindowMove() {}
virtual void OnWindowMoved() {} virtual void OnWindowMoved() {}
virtual void OnWindowScrollTouchBegin() {} virtual void OnWindowScrollTouchBegin() {}

View file

@ -207,9 +207,16 @@ bool NativeWindowViews::PreHandleMSG(UINT message,
return false; return false;
} }
case WM_MOVING: { case WM_MOVING: {
if (!movable_) bool prevent_default = false;
NotifyWindowWillMove(gfx::Rect(*reinterpret_cast<RECT*>(l_param)),
&prevent_default);
if (!movable_ || prevent_default) {
::GetWindowRect(GetAcceleratedWidget(), ::GetWindowRect(GetAcceleratedWidget(),
reinterpret_cast<RECT*>(l_param)); reinterpret_cast<RECT*>(l_param));
return true; // Tells Windows that the Move is handled. If not true,
// frameless windows can be moved using
// -webkit-app-region: drag elements.
}
return false; return false;
} }
case WM_MOVE: { case WM_MOVE: {

View file

@ -505,6 +505,17 @@ Note that this is only emitted when the window is being resized manually. Resizi
Emitted after the window has been resized. Emitted after the window has been resized.
#### Event: 'will-move' _Windows_
Returns:
* `event` Event
* `newBounds` [`Rectangle`](structures/rectangle.md) - Location the window is being moved to.
Emitted before the window is moved. Calling `event.preventDefault()` will prevent the window from being moved.
Note that this is only emitted when the window is being resized manually. Resizing the window with `setBounds`/`setSize` will not emit this event.
#### Event: 'move' #### Event: 'move'
Emitted when the window is being moved to a new position. Emitted when the window is being moved to a new position.