mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 14:45:49 +01:00
Support Show/Hide window
Better demo window.Run() -> window.Show()
This commit is contained in:
parent
b6b6acf1d9
commit
92af7455ad
5 changed files with 89 additions and 22 deletions
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ type Window struct {
|
|||
X int
|
||||
Y int
|
||||
FullscreenButtonEnabled bool
|
||||
Hidden bool
|
||||
}
|
||||
|
||||
var WindowDefaults = &Window{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue