Skip to content
This repository was archived by the owner on Feb 16, 2024. It is now read-only.

Commit bd06ae0

Browse files
authored
Update window bounds attributes on change (#362)
* Update internal WindowOption bounds on change * Check for nil pointer before assigning bounds values * Add test for Window.Bounds() * Update bounds on EventNameWindowEventDidFinishLoad * Remove code that updates bounds before event * Bump astilectron version to 0.53.0 * Add bounds test
1 parent a95bcff commit bd06ae0

11 files changed

+150
-70
lines changed

astilectron.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
// Versions
1414
const (
1515
DefaultAcceptTCPTimeout = 30 * time.Second
16-
DefaultVersionAstilectron = "0.52.0"
16+
DefaultVersionAstilectron = "0.53.0"
1717
DefaultVersionElectron = "11.4.3"
1818
)
1919

@@ -222,7 +222,7 @@ func (a *Astilectron) listenTCP() (err error) {
222222

223223
// watchNoAccept checks whether a TCP connection is accepted quickly enough
224224
func (a *Astilectron) watchNoAccept(timeout time.Duration, chanAccepted chan bool) {
225-
//check timeout
225+
// check timeout
226226
if timeout == 0 {
227227
timeout = DefaultAcceptTCPTimeout
228228
}

dock_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ func TestDock_Actions(t *testing.T) {
1919
testObjectAction(t, func() error {
2020
_, err := dck.Bounce(DockBounceTypeCritical)
2121
return err
22-
}, dck.object, wrt, "{\"name\":\""+eventNameDockCmdBounce+"\",\"targetID\":\""+dck.id+"\",\"bounceType\":\"critical\"}\n", eventNameDockEventBouncing)
23-
testObjectAction(t, func() error { return dck.BounceDownloads("/path/to/file") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdBounceDownloads+"\",\"targetID\":\""+dck.id+"\",\"filePath\":\"/path/to/file\"}\n", eventNameDockEventDownloadsBouncing)
24-
testObjectAction(t, func() error { return dck.CancelBounce(1) }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdCancelBounce+"\",\"targetID\":\""+dck.id+"\",\"id\":1}\n", eventNameDockEventBouncingCancelled)
25-
testObjectAction(t, func() error { return dck.Hide() }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdHide+"\",\"targetID\":\""+dck.id+"\"}\n", eventNameDockEventHidden)
26-
testObjectAction(t, func() error { return dck.SetBadge("badge") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdSetBadge+"\",\"targetID\":\""+dck.id+"\",\"badge\":\"badge\"}\n", eventNameDockEventBadgeSet)
27-
testObjectAction(t, func() error { return dck.SetIcon("/path/to/icon") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdSetIcon+"\",\"targetID\":\""+dck.id+"\",\"image\":\"/path/to/icon\"}\n", eventNameDockEventIconSet)
28-
testObjectAction(t, func() error { return dck.Show() }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdShow+"\",\"targetID\":\""+dck.id+"\"}\n", eventNameDockEventShown)
22+
}, dck.object, wrt, "{\"name\":\""+eventNameDockCmdBounce+"\",\"targetID\":\""+dck.id+"\",\"bounceType\":\"critical\"}\n", eventNameDockEventBouncing, nil)
23+
testObjectAction(t, func() error { return dck.BounceDownloads("/path/to/file") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdBounceDownloads+"\",\"targetID\":\""+dck.id+"\",\"filePath\":\"/path/to/file\"}\n", eventNameDockEventDownloadsBouncing, nil)
24+
testObjectAction(t, func() error { return dck.CancelBounce(1) }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdCancelBounce+"\",\"targetID\":\""+dck.id+"\",\"id\":1}\n", eventNameDockEventBouncingCancelled, nil)
25+
testObjectAction(t, func() error { return dck.Hide() }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdHide+"\",\"targetID\":\""+dck.id+"\"}\n", eventNameDockEventHidden, nil)
26+
testObjectAction(t, func() error { return dck.SetBadge("badge") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdSetBadge+"\",\"targetID\":\""+dck.id+"\",\"badge\":\"badge\"}\n", eventNameDockEventBadgeSet, nil)
27+
testObjectAction(t, func() error { return dck.SetIcon("/path/to/icon") }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdSetIcon+"\",\"targetID\":\""+dck.id+"\",\"image\":\"/path/to/icon\"}\n", eventNameDockEventIconSet, nil)
28+
testObjectAction(t, func() error { return dck.Show() }, dck.object, wrt, "{\"name\":\""+eventNameDockCmdShow+"\",\"targetID\":\""+dck.id+"\"}\n", eventNameDockEventShown, nil)
2929
}
3030

3131
func TestDock_NewMenu(t *testing.T) {

menu_item_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ func TestMenuItem_Actions(t *testing.T) {
2525
var mi = newMenuItem(context.Background(), targetIDApp, &MenuItemOptions{Label: astikit.StrPtr("label")}, d, i, w)
2626

2727
// Actions
28-
testObjectAction(t, func() error { return mi.SetChecked(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetChecked+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"checked\":true}}\n", EventNameMenuItemEventCheckedSet)
29-
testObjectAction(t, func() error { return mi.SetEnabled(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetEnabled+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"enabled\":true}}\n", EventNameMenuItemEventEnabledSet)
30-
testObjectAction(t, func() error { return mi.SetLabel("test") }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetLabel+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"label\":\"test\"}}\n", EventNameMenuItemEventLabelSet)
31-
testObjectAction(t, func() error { return mi.SetVisible(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetVisible+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"visible\":true}}\n", EventNameMenuItemEventVisibleSet)
28+
testObjectAction(t, func() error { return mi.SetChecked(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetChecked+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"checked\":true}}\n", EventNameMenuItemEventCheckedSet, nil)
29+
testObjectAction(t, func() error { return mi.SetEnabled(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetEnabled+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"enabled\":true}}\n", EventNameMenuItemEventEnabledSet, nil)
30+
testObjectAction(t, func() error { return mi.SetLabel("test") }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetLabel+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"label\":\"test\"}}\n", EventNameMenuItemEventLabelSet, nil)
31+
testObjectAction(t, func() error { return mi.SetVisible(true) }, mi.object, wrt, "{\"name\":\""+EventNameMenuItemCmdSetVisible+"\",\"targetID\":\""+mi.id+"\",\"menuItemOptions\":{\"visible\":true}}\n", EventNameMenuItemEventVisibleSet, nil)
3232

3333
}

menu_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func TestMenu_Actions(t *testing.T) {
2323
var m = newMenu(context.Background(), targetIDApp, []*MenuItemOptions{{Label: astikit.StrPtr("1")}, {Label: astikit.StrPtr("2")}}, d, i, w)
2424

2525
// Actions
26-
testObjectAction(t, func() error { return m.Create() }, m.object, wrt, "{\"name\":\""+EventNameMenuCmdCreate+"\",\"targetID\":\""+m.id+"\",\"menu\":{\"id\":\"1\",\"items\":[{\"id\":\"2\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"},{\"id\":\"3\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"}],\"rootId\":\""+targetIDApp+"\"}}\n", EventNameMenuEventCreated)
27-
testObjectAction(t, func() error { return m.Destroy() }, m.object, wrt, "{\"name\":\""+EventNameMenuCmdDestroy+"\",\"targetID\":\""+m.id+"\",\"menu\":{\"id\":\"1\",\"items\":[{\"id\":\"2\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"},{\"id\":\"3\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"}],\"rootId\":\""+targetIDApp+"\"}}\n", EventNameMenuEventDestroyed)
26+
testObjectAction(t, func() error { return m.Create() }, m.object, wrt, "{\"name\":\""+EventNameMenuCmdCreate+"\",\"targetID\":\""+m.id+"\",\"menu\":{\"id\":\"1\",\"items\":[{\"id\":\"2\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"},{\"id\":\"3\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"}],\"rootId\":\""+targetIDApp+"\"}}\n", EventNameMenuEventCreated, nil)
27+
testObjectAction(t, func() error { return m.Destroy() }, m.object, wrt, "{\"name\":\""+EventNameMenuCmdDestroy+"\",\"targetID\":\""+m.id+"\",\"menu\":{\"id\":\"1\",\"items\":[{\"id\":\"2\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"},{\"id\":\"3\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"}],\"rootId\":\""+targetIDApp+"\"}}\n", EventNameMenuEventDestroyed, nil)
2828
assert.True(t, m.ctx.Err() != nil)
2929
}

notification_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,6 @@ func TestNotification_Actions(t *testing.T) {
2525
}, true, d, i, w)
2626

2727
// Actions
28-
testObjectAction(t, func() error { return n.Create() }, n.object, wrt, "{\"name\":\""+eventNameNotificationCmdCreate+"\",\"targetID\":\""+n.id+"\",\"notificationOptions\":{\"body\":\"body\",\"hasReply\":true,\"icon\":\"/path/to/icon\",\"replyPlaceholder\":\"placeholder\",\"silent\":true,\"sound\":\"sound\",\"subtitle\":\"subtitle\",\"title\":\"title\"}}\n", EventNameNotificationEventCreated)
29-
testObjectAction(t, func() error { return n.Show() }, n.object, wrt, "{\"name\":\""+eventNameNotificationCmdShow+"\",\"targetID\":\""+n.id+"\"}\n", EventNameNotificationEventShown)
28+
testObjectAction(t, func() error { return n.Create() }, n.object, wrt, "{\"name\":\""+eventNameNotificationCmdCreate+"\",\"targetID\":\""+n.id+"\",\"notificationOptions\":{\"body\":\"body\",\"hasReply\":true,\"icon\":\"/path/to/icon\",\"replyPlaceholder\":\"placeholder\",\"silent\":true,\"sound\":\"sound\",\"subtitle\":\"subtitle\",\"title\":\"title\"}}\n", EventNameNotificationEventCreated, nil)
29+
testObjectAction(t, func() error { return n.Show() }, n.object, wrt, "{\"name\":\""+eventNameNotificationCmdShow+"\",\"targetID\":\""+n.id+"\"}\n", EventNameNotificationEventShown, nil)
3030
}

object_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,23 @@ import (
77
"github.com/stretchr/testify/assert"
88
)
99

10-
func testObjectAction(t *testing.T, fn func() error, o *object, wrt *mockedWriter, sentEvent, eventNameDone string) {
10+
func testObjectAction(t *testing.T, fn func() error, o *object, wrt *mockedWriter, sentEvent, eventNameDone string, receivedEvent *Event) {
1111
wrt.w = []string{}
1212
o.cancel()
1313
err := fn()
1414
assert.EqualError(t, err, context.Canceled.Error())
1515
o.ctx, o.cancel = context.WithCancel(context.Background())
1616
if eventNameDone != "" {
17-
wrt.fn = func() { o.d.dispatch(Event{Name: eventNameDone, TargetID: o.id}) }
17+
wrt.fn = func() {
18+
var event Event
19+
if receivedEvent != nil {
20+
event = *receivedEvent
21+
}
22+
event.Name = eventNameDone
23+
event.TargetID = o.id
24+
25+
o.d.dispatch(event)
26+
}
1827
}
1928
err = fn()
2029
assert.NoError(t, err)

session_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ func TestSession_Actions(t *testing.T) {
1414
var s = newSession(context.Background(), d, i, w)
1515

1616
// Actions
17-
testObjectAction(t, func() error { return s.ClearCache() }, s.object, wrt, "{\"name\":\"session.cmd.clear.cache\",\"targetID\":\"1\"}\n", EventNameSessionEventClearedCache)
18-
testObjectAction(t, func() error { return s.FlushStorage() }, s.object, wrt, "{\"name\":\"session.cmd.flush.storage\",\"targetID\":\"1\"}\n", EventNameSessionEventFlushedStorage)
17+
testObjectAction(t, func() error { return s.ClearCache() }, s.object, wrt, "{\"name\":\"session.cmd.clear.cache\",\"targetID\":\"1\"}\n", EventNameSessionEventClearedCache, nil)
18+
testObjectAction(t, func() error { return s.FlushStorage() }, s.object, wrt, "{\"name\":\"session.cmd.flush.storage\",\"targetID\":\"1\"}\n", EventNameSessionEventFlushedStorage, nil)
1919
}

sub_menu_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,21 +92,21 @@ func TestSubMenu_Actions(t *testing.T) {
9292

9393
// Actions
9494
var mi = s.NewItem(&MenuItemOptions{Label: astikit.StrPtr("1")})
95-
testObjectAction(t, func() error { return s.Append(mi) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdAppend+"\",\"targetID\":\""+s.id+"\",\"menuItem\":{\"id\":\"3\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"}}\n", EventNameSubMenuEventAppended)
95+
testObjectAction(t, func() error { return s.Append(mi) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdAppend+"\",\"targetID\":\""+s.id+"\",\"menuItem\":{\"id\":\"3\",\"options\":{\"label\":\"1\"},\"rootId\":\""+targetIDApp+"\"}}\n", EventNameSubMenuEventAppended, nil)
9696
assert.Len(t, s.items, 2)
9797
assert.Equal(t, "1", *s.items[1].o.Label)
9898
mi = s.NewItem(&MenuItemOptions{Label: astikit.StrPtr("2")})
9999
err := s.Insert(3, mi)
100100
assert.EqualError(t, err, "submenu has 2 items, position 3 is invalid")
101-
testObjectAction(t, func() error { return s.Insert(1, mi) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdInsert+"\",\"targetID\":\""+s.id+"\",\"menuItem\":{\"id\":\"4\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"},\"menuItemPosition\":1}\n", EventNameSubMenuEventInserted)
101+
testObjectAction(t, func() error { return s.Insert(1, mi) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdInsert+"\",\"targetID\":\""+s.id+"\",\"menuItem\":{\"id\":\"4\",\"options\":{\"label\":\"2\"},\"rootId\":\""+targetIDApp+"\"},\"menuItemPosition\":1}\n", EventNameSubMenuEventInserted, nil)
102102
assert.Len(t, s.items, 3)
103103
assert.Equal(t, "2", *s.items[1].o.Label)
104104
testObjectAction(t, func() error {
105105
return s.Popup(&MenuPopupOptions{PositionOptions: PositionOptions{X: astikit.IntPtr(1), Y: astikit.IntPtr(2)}})
106-
}, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdPopup+"\",\"targetID\":\""+s.id+"\",\"menuPopupOptions\":{\"x\":1,\"y\":2}}\n", EventNameSubMenuEventPoppedUp)
106+
}, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdPopup+"\",\"targetID\":\""+s.id+"\",\"menuPopupOptions\":{\"x\":1,\"y\":2}}\n", EventNameSubMenuEventPoppedUp, nil)
107107
testObjectAction(t, func() error {
108108
return s.PopupInWindow(&Window{object: &object{id: "2"}}, &MenuPopupOptions{PositionOptions: PositionOptions{X: astikit.IntPtr(1), Y: astikit.IntPtr(2)}})
109-
}, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdPopup+"\",\"targetID\":\""+s.id+"\",\"menuPopupOptions\":{\"x\":1,\"y\":2},\"windowId\":\"2\"}\n", EventNameSubMenuEventPoppedUp)
110-
testObjectAction(t, func() error { return s.ClosePopup() }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdClosePopup+"\",\"targetID\":\""+s.id+"\"}\n", EventNameSubMenuEventClosedPopup)
111-
testObjectAction(t, func() error { return s.ClosePopupInWindow(&Window{object: &object{id: "2"}}) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdClosePopup+"\",\"targetID\":\""+s.id+"\",\"windowId\":\"2\"}\n", EventNameSubMenuEventClosedPopup)
109+
}, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdPopup+"\",\"targetID\":\""+s.id+"\",\"menuPopupOptions\":{\"x\":1,\"y\":2},\"windowId\":\"2\"}\n", EventNameSubMenuEventPoppedUp, nil)
110+
testObjectAction(t, func() error { return s.ClosePopup() }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdClosePopup+"\",\"targetID\":\""+s.id+"\"}\n", EventNameSubMenuEventClosedPopup, nil)
111+
testObjectAction(t, func() error { return s.ClosePopupInWindow(&Window{object: &object{id: "2"}}) }, s.object, wrt, "{\"name\":\""+EventNameSubMenuCmdClosePopup+"\",\"targetID\":\""+s.id+"\",\"windowId\":\"2\"}\n", EventNameSubMenuEventClosedPopup, nil)
112112
}

tray_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ func TestTray_Actions(t *testing.T) {
2020
}, d, i, w)
2121

2222
// Actions
23-
testObjectAction(t, func() error { return tr.Create() }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdCreate+"\",\"targetID\":\""+tr.id+"\",\"trayOptions\":{\"image\":\"/path/to/image\",\"tooltip\":\"tooltip\"}}\n", EventNameTrayEventCreated)
24-
testObjectAction(t, func() error { return tr.SetImage("test") }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdSetImage+"\",\"targetID\":\""+tr.id+"\",\"image\":\"test\"}\n", EventNameTrayEventImageSet)
25-
testObjectAction(t, func() error { return tr.Destroy() }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdDestroy+"\",\"targetID\":\""+tr.id+"\"}\n", EventNameTrayEventDestroyed)
23+
testObjectAction(t, func() error { return tr.Create() }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdCreate+"\",\"targetID\":\""+tr.id+"\",\"trayOptions\":{\"image\":\"/path/to/image\",\"tooltip\":\"tooltip\"}}\n", EventNameTrayEventCreated, nil)
24+
testObjectAction(t, func() error { return tr.SetImage("test") }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdSetImage+"\",\"targetID\":\""+tr.id+"\",\"image\":\"test\"}\n", EventNameTrayEventImageSet, nil)
25+
testObjectAction(t, func() error { return tr.Destroy() }, tr.object, wrt, "{\"name\":\""+EventNameTrayCmdDestroy+"\",\"targetID\":\""+tr.id+"\"}\n", EventNameTrayEventDestroyed, nil)
2626
assert.True(t, tr.ctx.Err() != nil)
2727
}
2828

window.go

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ const (
5050
eventNameWindowEventMessageCallback = "window.event.message.callback"
5151
EventNameWindowEventMinimize = "window.event.minimize"
5252
EventNameWindowEventMove = "window.event.move"
53+
EventNameWindowEventMoved = "window.event.moved"
5354
EventNameWindowEventReadyToShow = "window.event.ready.to.show"
5455
EventNameWindowEventResize = "window.event.resize"
5556
EventNameWindowEventResizeContent = "window.event.resize.content"
@@ -59,6 +60,7 @@ const (
5960
EventNameWindowEventUnresponsive = "window.event.unresponsive"
6061
EventNameWindowEventDidGetRedirectRequest = "window.event.did.get.redirect.request"
6162
EventNameWindowEventWebContentsExecutedJavaScript = "window.event.web.contents.executed.javascript"
63+
EventNameWindowEventWillMove = "window.event.will.move"
6264
EventNameWindowEventWillNavigate = "window.event.will.navigate"
6365
EventNameWindowEventUpdatedCustomOptions = "window.event.updated.custom.options"
6466
EventNameWindowEventAlwaysOnTopChanged = "window.event.always.on.top.changed"
@@ -246,6 +248,30 @@ func newWindow(ctx context.Context, l astikit.SeverityLogger, o Options, p Paths
246248
return
247249
})
248250

251+
// Bounds change handling, updates the internal WindowOption's bounds
252+
updateBoundsFunc := func(w *Window) func(e Event) (deleteListener bool) {
253+
return func(e Event) (deleteListener bool) {
254+
w.m.Lock()
255+
defer w.m.Unlock()
256+
if w.o != nil && e.Bounds != nil {
257+
w.o.X = e.Bounds.X
258+
w.o.Y = e.Bounds.Y
259+
w.o.Width = e.Bounds.Width
260+
w.o.Height = e.Bounds.Height
261+
}
262+
return
263+
}
264+
}
265+
266+
w.On(EventNameWindowEventDidFinishLoad, updateBoundsFunc(w))
267+
w.On(EventNameWindowEventMaximize, updateBoundsFunc(w))
268+
w.On(EventNameWindowEventMove, updateBoundsFunc(w))
269+
w.On(EventNameWindowEventMoved, updateBoundsFunc(w))
270+
w.On(EventNameWindowEventResize, updateBoundsFunc(w))
271+
w.On(EventNameWindowEventResizeContent, updateBoundsFunc(w))
272+
w.On(EventNameWindowEventUnmaximize, updateBoundsFunc(w))
273+
w.On(EventNameWindowEventWillMove, updateBoundsFunc(w))
274+
249275
// Basic parse
250276
if w.url, err = stdUrl.Parse(url); err != nil {
251277
err = fmt.Errorf("std parsing of url %s failed: %w", url, err)
@@ -263,6 +289,7 @@ func newWindow(ctx context.Context, l astikit.SeverityLogger, o Options, p Paths
263289
// Set url
264290
w.url = &stdUrl.URL{Path: filepath.ToSlash(url), Scheme: "file"}
265291
}
292+
266293
return
267294
}
268295

@@ -280,6 +307,26 @@ func (w *Window) Blur() (err error) {
280307
return
281308
}
282309

310+
// Bounds return the window bounds
311+
func (w *Window) Bounds() (rect Rectangle, err error) {
312+
if err = w.ctx.Err(); err != nil {
313+
return
314+
}
315+
w.m.Lock()
316+
defer w.m.Unlock()
317+
318+
if w.o.Width != nil && w.o.Height != nil {
319+
rect.Size.Width = *w.o.Width
320+
rect.Size.Height = *w.o.Height
321+
}
322+
323+
if w.o.X != nil && w.o.Y != nil {
324+
rect.Position.X = *w.o.X
325+
rect.Position.Y = *w.o.Y
326+
}
327+
return
328+
}
329+
283330
// Center centers the window
284331
func (w *Window) Center() (err error) {
285332
if err = w.ctx.Err(); err != nil {
@@ -394,10 +441,6 @@ func (w *Window) Move(x, y int) (err error) {
394441
if err = w.ctx.Err(); err != nil {
395442
return
396443
}
397-
w.m.Lock()
398-
w.o.X = astikit.IntPtr(x)
399-
w.o.Y = astikit.IntPtr(y)
400-
w.m.Unlock()
401444
_, err = synchronousEvent(w.ctx, w, w.w, Event{Name: EventNameWindowCmdMove, TargetID: w.id, WindowOptions: &WindowOptions{X: astikit.IntPtr(x), Y: astikit.IntPtr(y)}}, EventNameWindowEventMove)
402445
return
403446
}
@@ -478,10 +521,6 @@ func (w *Window) Resize(width, height int) (err error) {
478521
if err = w.ctx.Err(); err != nil {
479522
return
480523
}
481-
w.m.Lock()
482-
w.o.Height = astikit.IntPtr(height)
483-
w.o.Width = astikit.IntPtr(width)
484-
w.m.Unlock()
485524
_, err = synchronousEvent(w.ctx, w, w.w, Event{Name: EventNameWindowCmdResize, TargetID: w.id, WindowOptions: &WindowOptions{Height: astikit.IntPtr(height), Width: astikit.IntPtr(width)}}, EventNameWindowEventResize)
486525
return
487526
}
@@ -491,10 +530,6 @@ func (w *Window) ResizeContent(width, height int) (err error) {
491530
if err = w.ctx.Err(); err != nil {
492531
return
493532
}
494-
w.m.Lock()
495-
w.o.Height = astikit.IntPtr(height)
496-
w.o.Width = astikit.IntPtr(width)
497-
w.m.Unlock()
498533
_, err = synchronousEvent(w.ctx, w, w.w, Event{Name: EventNameWindowCmdResizeContent, TargetID: w.id, WindowOptions: &WindowOptions{Height: astikit.IntPtr(height), Width: astikit.IntPtr(width)}}, EventNameWindowEventResizeContent)
499534
return
500535
}
@@ -504,12 +539,6 @@ func (w *Window) SetBounds(r RectangleOptions) (err error) {
504539
if err = w.ctx.Err(); err != nil {
505540
return
506541
}
507-
w.m.Lock()
508-
w.o.Height = r.Height
509-
w.o.Width = r.Width
510-
w.o.X = r.X
511-
w.o.Y = r.Y
512-
w.m.Unlock()
513542
_, err = synchronousEvent(w.ctx, w, w.w, Event{Name: EventNameWindowCmdSetBounds, TargetID: w.id, Bounds: &r}, EventNameWindowEventResize)
514543
return
515544
}

0 commit comments

Comments
 (0)