mirror of
https://github.com/ElectronNET/Electron.NET.git
synced 2026-09-23 23:45:19 +00:00
Merge pull request #1014 from softworkz/submit_new_event
BrowserWindow: Add OnBoundsChanged event
This commit is contained in:
@@ -186,6 +186,19 @@ public class BrowserWindow : ApiBase
|
||||
remove => RemoveEvent(value, Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Emitted when the window is moved or resized.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// While not being an original Electron event, this one includes the bounds values,
|
||||
/// saving the additional roundtrip for calling <see cref="GetBoundsAsync"/>.
|
||||
/// </remarks>
|
||||
public event Action<Rectangle> OnBoundsChanged
|
||||
{
|
||||
add => AddEvent(value, Id);
|
||||
remove => RemoveEvent(value, Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// macOS: Emitted once when the window is moved to a new position.
|
||||
/// </summary>
|
||||
|
||||
@@ -112,6 +112,12 @@ module.exports = (socket, app) => {
|
||||
electronSocket.emit("browserWindow-move" + id);
|
||||
});
|
||||
});
|
||||
socket.on("register-browserWindow-bounds-changed", (id) => {
|
||||
const window = getWindowById(id);
|
||||
const cb = () => electronSocket.emit("browserWindow-bounds-changed" + id, window.getBounds());
|
||||
window.on("resize", cb);
|
||||
window.on("move", cb);
|
||||
});
|
||||
socket.on("register-browserWindow-moved", (id) => {
|
||||
getWindowById(id).on("moved", () => {
|
||||
electronSocket.emit("browserWindow-moved" + id);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -139,6 +139,13 @@ export = (socket: Socket, app: Electron.App) => {
|
||||
});
|
||||
});
|
||||
|
||||
socket.on("register-browserWindow-bounds-changed", (id) => {
|
||||
const window = getWindowById(id);
|
||||
const cb = () => electronSocket.emit("browserWindow-bounds-changed" + id, window.getBounds());
|
||||
window.on("resize", cb);
|
||||
window.on("move", cb);
|
||||
});
|
||||
|
||||
socket.on("register-browserWindow-moved", (id) => {
|
||||
getWindowById(id).on("moved", () => {
|
||||
electronSocket.emit("browserWindow-moved" + id);
|
||||
|
||||
@@ -257,5 +257,57 @@ namespace ElectronNET.IntegrationTests.Tests
|
||||
|
||||
win.SetDocumentEdited(false);
|
||||
}
|
||||
|
||||
[IntegrationFact]
|
||||
public async Task BoundsChanged_event_fires_with_updated_bounds()
|
||||
{
|
||||
BrowserWindow window = null;
|
||||
|
||||
try
|
||||
{
|
||||
window = await Electron.WindowManager.CreateWindowAsync(
|
||||
new BrowserWindowOptions { Show = false, Width = 300, Height = 200 },
|
||||
"about:blank");
|
||||
|
||||
var tcs = new TaskCompletionSource<Rectangle>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
window.OnBoundsChanged += bounds => tcs.TrySetResult(bounds);
|
||||
|
||||
await Task.Delay(500.ms());
|
||||
|
||||
var target = new Rectangle { X = 25, Y = 35, Width = 420, Height = 310 };
|
||||
window.SetBounds(target);
|
||||
|
||||
var completed = await Task.WhenAny(tcs.Task, Task.Delay(3.seconds()));
|
||||
completed.Should().Be(tcs.Task);
|
||||
|
||||
var observed = await tcs.Task;
|
||||
|
||||
observed.Width.Should().Be(target.Width);
|
||||
observed.Height.Should().Be(target.Height);
|
||||
}
|
||||
finally
|
||||
{
|
||||
window?.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
[IntegrationFact]
|
||||
public async Task BoundsChanged_event_can_fire_on_resize_of_existing_window()
|
||||
{
|
||||
var win = this.MainWindow;
|
||||
|
||||
var tcs = new TaskCompletionSource<Rectangle>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
win.OnBoundsChanged += bounds => tcs.TrySetResult(bounds);
|
||||
|
||||
await Task.Delay(500.ms());
|
||||
win.SetBounds(new Rectangle { X = 10, Y = 10, Width = 560, Height = 440 });
|
||||
|
||||
var completed = await Task.WhenAny(tcs.Task, Task.Delay(3.seconds()));
|
||||
completed.Should().Be(tcs.Task);
|
||||
|
||||
var boundsObserved = await tcs.Task;
|
||||
boundsObserved.Width.Should().Be(560);
|
||||
boundsObserved.Height.Should().Be(440);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user