Support Show/Hide window

Better demo
window.Run() -> window.Show()
This commit is contained in:
Lea Anthony 2022-12-27 21:15:43 +11:00
commit 92af7455ad
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
5 changed files with 89 additions and 22 deletions

View file

@ -44,7 +44,7 @@ func main() {
SetTitle("Window "+strconv.Itoa(windowCounter)).
SetPosition(rand.Intn(1000), rand.Intn(800)).
SetURL("https://wails.io").
Run()
Show()
windowCounter++
})
@ -71,6 +71,13 @@ func main() {
w.SetMaxSize(600, 600)
})
})
sizeMenu.Add("Get Current Window Size").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
width, height := w.Size()
app.NewInfoDialog().SetTitle("Current Window Size").SetMessage("Width: " + strconv.Itoa(width) + " Height: " + strconv.Itoa(height)).Show()
})
})
sizeMenu.Add("Reset Min Size").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.SetMinSize(0, 0)
@ -94,6 +101,14 @@ func main() {
w.SetPosition(rand.Intn(1000), rand.Intn(800))
})
})
positionMenu.Add("Get Position").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
x, y := w.Position()
app.NewInfoDialog().SetTitle("Current Window Position").SetMessage("X: " + strconv.Itoa(x) + " Y: " + strconv.Itoa(y)).Show()
})
})
positionMenu.Add("Center").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.Center()
@ -127,6 +142,33 @@ func main() {
w.Restore()
})
})
stateMenu.Add("Hide (for 2 seconds)").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.Hide()
time.Sleep(2 * time.Second)
w.Show()
})
})
stateMenu.Add("Always on Top").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.SetAlwaysOnTop(true)
})
})
stateMenu.Add("Not always on Top").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.SetAlwaysOnTop(false)
})
})
stateMenu.Add("Google.com").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.SetURL("https://google.com")
})
})
stateMenu.Add("wails.io").OnClick(func(ctx *application.Context) {
currentWindow(func(w *application.Window) {
w.SetURL("https://wails.io")
})
})
app.NewWindow()

View file

@ -140,7 +140,7 @@ func (a *App) NewWindowWithOptions(windowOptions *options.Window) *Window {
a.windowAliasesLock.Unlock()
}
if a.running {
newWindow.Run()
newWindow.run()
}
return newWindow
@ -192,7 +192,7 @@ func (a *App) Run() error {
// run windows
for _, window := range a.windows {
go window.Run()
go window.run()
}
// run system trays

View file

@ -50,6 +50,8 @@ type (
isFullscreen() bool
disableSizeConstraints()
setFullscreenButtonEnabled(enabled bool)
show()
hide()
}
)
@ -137,7 +139,7 @@ func (w *Window) SetSize(width, height int) *Window {
return w
}
func (w *Window) Run() {
func (w *Window) run() {
if w.impl != nil {
return
}
@ -155,6 +157,22 @@ func (w *Window) SetAlwaysOnTop(b bool) *Window {
return w
}
func (w *Window) Show() *Window {
if w.impl == nil {
w.run()
return w
}
w.impl.show()
return w
}
func (w *Window) Hide() *Window {
w.options.Hidden = true
if w.impl != nil {
w.impl.hide()
}
return w
}
func (w *Window) SetURL(s string) *Window {
w.options.URL = s
if w.impl != nil {

View file

@ -125,22 +125,6 @@ void windowSetSize(void* nsWindow, int width, int height) {
});
}
// Show the NSWindow
void windowShow(void* nsWindow) {
// Show window on main thread
dispatch_async(dispatch_get_main_queue(), ^{
[(NSWindow*)nsWindow makeKeyAndOrderFront:nil];
});
}
// Hide the NSWindow
void windowHide(void* nsWindow) {
// Hide window on main thread
dispatch_async(dispatch_get_main_queue(), ^{
[(NSWindow*)nsWindow orderOut:nil];
});
}
// Set NSWindow always on top
void windowSetAlwaysOnTop(void* nsWindow, bool alwaysOnTop) {
// Set window always on top on main thread
@ -676,6 +660,19 @@ static void windowDisableSizeConstraints(void *window) {
});
}
static void windowShow(void *window) {
dispatch_async(dispatch_get_main_queue(), ^{
// show window
[(NSWindow*)window makeKeyAndOrderFront:nil];
});
}
static void windowHide(void *window) {
dispatch_async(dispatch_get_main_queue(), ^{
[(NSWindow*)window orderOut:nil];
});
}
*/
import "C"
import (
@ -694,6 +691,14 @@ type macosWindow struct {
parent *Window
}
func (w *macosWindow) show() {
C.windowShow(w.nsWindow)
}
func (w *macosWindow) hide() {
C.windowHide(w.nsWindow)
}
func (w *macosWindow) setFullscreenButtonEnabled(enabled bool) {
C.setFullscreenButtonEnabled(w.nsWindow, C.bool(enabled))
}
@ -972,8 +977,9 @@ func (w *macosWindow) run() {
if w.parent.options.HTML != "" {
w.setHTML(w.parent.options.HTML)
}
C.windowShow(w.nsWindow)
if w.parent.options.Hidden == false {
C.windowShow(w.nsWindow)
}
})
}

View file

@ -37,6 +37,7 @@ type Window struct {
X int
Y int
FullscreenButtonEnabled bool
Hidden bool
}
var WindowDefaults = &Window{