コンテンツにスキップ

Window API

このコンテンツはまだ日本語訳がありません。

The Window API provides methods to control window appearance, behaviour, and lifecycle. Access through window instances or the app.Window manager.

Window is an interface satisfied by *application.WebviewWindow; method signatures below are on *WebviewWindow. Many mutators return Window to allow chaining — the return values are documented per method.

Common operations:

  • Create and show windows
  • Control size, position, and state
  • Handle window events
  • Manage window content
  • Configure appearance and behaviour

Shows the window. If the window was hidden, it becomes visible. Returns the receiver for chaining.

func (w *WebviewWindow) Show() Window

Example:

window := app.Window.New()
window.Show()

Hides the window without closing it. The window remains in memory and can be shown again. Returns the receiver for chaining.

func (w *WebviewWindow) Hide() Window

Example:

// Hide window temporarily
window.Hide()
// Show it again later
window.Show()

Use cases:

  • System tray applications that hide to tray
  • Wizard flows where windows are reused
  • Temporary hiding during operations

Closes the window. This triggers the WindowClosing event.

func (w *WebviewWindow) Close()

Example:

window.Close()

Note: If a registered hook calls event.Cancel(), the close will be prevented.

Sets the window title bar text. Returns the receiver for chaining.

func (w *WebviewWindow) SetTitle(title string) Window

Parameters:

  • title - The new window title

Example:

window.SetTitle("My Application - Document.txt")

Returns the window’s unique name identifier.

func (w *WebviewWindow) Name() string

Example:

name := window.Name()
fmt.Println("Window name:", name)
// Retrieve window by name later
if w, ok := app.Window.GetByName(name); ok {
w.Focus()
}

Sets the window dimensions in pixels. Returns the receiver for chaining.

func (w *WebviewWindow) SetSize(width, height int) Window

Parameters:

  • width - Window width in pixels
  • height - Window height in pixels

Example:

window.SetSize(1024, 768)

Returns the current window dimensions.

func (w *WebviewWindow) Size() (width, height int)

Example:

width, height := window.Size()
fmt.Printf("Window is %dx%d\n", width, height)

Sets minimum and maximum window dimensions. Both return the receiver for chaining.

func (w *WebviewWindow) SetMinSize(width, height int) Window
func (w *WebviewWindow) SetMaxSize(width, height int) Window

Example:

// Prevent window from being too small
window.SetMinSize(800, 600)
// Prevent window from being too large
window.SetMaxSize(1920, 1080)

Sets the window position relative to the top-left corner of the screen.

func (w *WebviewWindow) SetPosition(x, y int)

Parameters:

  • x - Horizontal position in pixels
  • y - Vertical position in pixels

Example:

// Position window at top-left
window.SetPosition(0, 0)
// Position window 100px from top-left
window.SetPosition(100, 100)

Returns the current window position.

func (w *WebviewWindow) Position() (x, y int)

Example:

x, y := window.Position()
fmt.Printf("Window is at (%d, %d)\n", x, y)

Centers the window on the screen.

func (w *WebviewWindow) Center()

Example:

window := app.Window.New()
window.Center()
window.Show()

Note: Centres on the primary monitor. For multi-monitor setups, see the screen APIs.

Brings the window to the front and gives it keyboard focus.

func (w *WebviewWindow) Focus()

Example:

// Bring window to front
window.Focus()

Minimises the window to the taskbar/dock or restores it. Minimise() returns the receiver for chaining; UnMinimise() returns nothing.

func (w *WebviewWindow) Minimise() Window
func (w *WebviewWindow) UnMinimise()

Example:

// Minimise window
window.Minimise()
// Restore from minimised state
window.UnMinimise()

Maximises the window to fill the screen or restores it to its previous size. Maximise() returns the receiver for chaining; UnMaximise() returns nothing.

func (w *WebviewWindow) Maximise() Window
func (w *WebviewWindow) UnMaximise()

Example:

// Maximise window
window.Maximise()
// Restore to previous size
window.UnMaximise()

Fullscreen() / UnFullscreen() / ToggleFullscreen()

Section titled “Fullscreen() / UnFullscreen() / ToggleFullscreen()”

Enters or exits fullscreen mode. Fullscreen() returns the receiver for chaining.

func (w *WebviewWindow) Fullscreen() Window
func (w *WebviewWindow) UnFullscreen()
func (w *WebviewWindow) ToggleFullscreen()

Example:

// Enter fullscreen
window.Fullscreen()
// Exit fullscreen
window.UnFullscreen()
// Or toggle
window.ToggleFullscreen()

There is no SetFullscreen(bool) method.

IsMinimised() / IsMaximised() / IsFullscreen()

Section titled “IsMinimised() / IsMaximised() / IsFullscreen()”

Checks the current window state.

func (w *WebviewWindow) IsMinimised() bool
func (w *WebviewWindow) IsMaximised() bool
func (w *WebviewWindow) IsFullscreen() bool

Example:

if window.IsMinimised() {
window.UnMinimise()
}
if window.IsMaximised() {
fmt.Println("Window is maximised")
}
if window.IsFullscreen() {
window.UnFullscreen()
}

Navigates to a specific URL within the window. Returns the receiver for chaining.

func (w *WebviewWindow) SetURL(url string) Window

Parameters:

  • url - URL to navigate to (can be http://wails.localhost/ for embedded assets)

Example:

// Navigate to embedded page
window.SetURL("http://wails.localhost/settings.html")
// Navigate to external URL (if allowed)
window.SetURL("https://wails.io")

Sets the window content directly from an HTML string. Returns the receiver for chaining.

func (w *WebviewWindow) SetHTML(html string) Window

Parameters:

  • html - HTML content to display

Example:

html := `
<!DOCTYPE html>
<html>
<head><title>Dynamic Content</title></head>
<body>
<h1>Hello from Go!</h1>
<p>This content was generated dynamically.</p>
</body>
</html>
`
window.SetHTML(html)

Use cases:

  • Dynamic content generation
  • Simple windows without a frontend build process
  • Error pages or splash screens

Reloads the current window content.

func (w *WebviewWindow) Reload()

Example:

// Reload current page
window.Reload()

Note: Useful during development or when content needs refreshing.

Wails provides two methods for handling window events:

  • OnWindowEvent() - Listen to window events (cannot prevent them).
  • RegisterHook() - Hook into window events (can prevent them by calling event.Cancel()).

Registers a callback for window events. Returns an unsubscribe function.

func (w *WebviewWindow) OnWindowEvent(
eventType events.WindowEventType,
callback func(event *WindowEvent),
) func()

Example:

import "github.com/wailsapp/wails/v3/pkg/events"
// Listen for window focus
window.OnWindowEvent(events.Common.WindowFocus, func(e *application.WindowEvent) {
app.Logger.Info("Window gained focus")
})
// Listen for window lost focus
window.OnWindowEvent(events.Common.WindowLostFocus, func(e *application.WindowEvent) {
app.Logger.Info("Window lost focus")
})
// Listen for window resize
window.OnWindowEvent(events.Common.WindowDidResize, func(e *application.WindowEvent) {
app.Logger.Info("Window resized")
})

Common Window Events:

  • events.Common.WindowClosing - Window is about to close
  • events.Common.WindowFocus - Window gained focus
  • events.Common.WindowLostFocus - Window lost focus
  • events.Common.WindowDidMove - Window moved
  • events.Common.WindowDidResize - Window resized
  • events.Common.WindowMinimise - Window minimised
  • events.Common.WindowMaximise - Window maximised
  • events.Common.WindowFullscreen - Window entered fullscreen
  • events.Common.WindowRuntimeReady - In-window runtime initialised

Registers a hook for window events. Hooks run before listeners and can prevent the event by calling event.Cancel(). Returns an unsubscribe function.

func (w *WebviewWindow) RegisterHook(
eventType events.WindowEventType,
callback func(event *WindowEvent),
) func()

Example - Prevent window close:

import "github.com/wailsapp/wails/v3/pkg/events"
window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) {
confirm := app.Dialog.Question().
SetTitle("Confirm Close").
SetMessage("Are you sure you want to close this window?")
yes := confirm.AddButton("Yes")
no := confirm.AddButton("No")
confirm.SetDefaultButton(yes)
confirm.SetCancelButton(no)
no.OnClick(func() {
e.Cancel() // Prevent window from closing
})
confirm.Show()
})

Example - Save before closing:

window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) {
if !hasUnsavedChanges {
return
}
dlg := app.Dialog.Question().
SetTitle("Unsaved Changes").
SetMessage("Save changes before closing?")
save := dlg.AddButton("Save")
discard := dlg.AddButton("Don't Save")
cancel := dlg.AddButton("Cancel")
dlg.SetDefaultButton(save)
dlg.SetCancelButton(cancel)
save.OnClick(func() { saveData() })
cancel.OnClick(func() { e.Cancel() })
_ = discard // allow close
dlg.Show()
})

Emits a custom event to the window’s frontend. Returns true if the emit was cancelled by a hook.

func (w *WebviewWindow) EmitEvent(name string, data ...any) bool

Parameters:

  • name - Event name
  • data - Optional data to send with the event

Example:

// Send data to specific window
window.EmitEvent("data-updated", map[string]any{
"count": 42,
"status": "success",
})

Frontend (JavaScript):

import { Events } from '@wailsio/runtime'
Events.On('data-updated', (data) => {
console.log('Count:', data.count)
console.log('Status:', data.status)
})

Enables or disables user interaction with the window.

func (w *WebviewWindow) SetEnabled(enabled bool)

Example:

// Disable window during long operation
window.SetEnabled(false)
// Perform operation
performLongOperation()
// Re-enable window
window.SetEnabled(true)

Sets the window background colour (shown before content loads). Returns the receiver for chaining.

func (w *WebviewWindow) SetBackgroundColour(colour RGBA) Window

RGBA is application.RGBA{Red, Green, Blue, Alpha uint8}. Use the helpers application.NewRGB(r, g, b) (alpha 255) or application.NewRGBA(r, g, b, a).

Example:

// White background
window.SetBackgroundColour(application.NewRGB(255, 255, 255))
// Dark background with full alpha
window.SetBackgroundColour(application.NewRGBA(30, 30, 30, 255))

Controls whether the window can be resized by the user. Returns the receiver for chaining.

func (w *WebviewWindow) SetResizable(resizable bool) Window

Example:

// Make window fixed size
window.SetResizable(false)

Sets whether the window stays above other windows. Returns the receiver for chaining.

func (w *WebviewWindow) SetAlwaysOnTop(alwaysOnTop bool) Window

Example:

// Keep window on top
window.SetAlwaysOnTop(true)

Opens the native print dialog for the window content.

func (w *WebviewWindow) Print() error

Returns: Error if printing fails.

Example:

if err := window.Print(); err != nil {
log.Println("Print failed:", err)
}

Attaches a second window as a sheet modal.

func (w *WebviewWindow) AttachModal(modalWindow Window)

Parameters:

  • modalWindow - The window to attach as a modal

Platform support:

  • macOS: Full support (presents as a sheet)
  • Windows: No support
  • Linux: No support

Example:

modalWindow := app.Window.New()
window.AttachModal(modalWindow)

Linux windows support the following platform-specific options via LinuxWindow:

Controls how the application menu is displayed. This option is available on the default GTK4 build and is ignored on legacy -tags gtk3 builds.

ValueDescription
LinuxMenuStyleMenuBarTraditional menu bar below the title bar (default)
LinuxMenuStylePrimaryMenuPrimary menu button in the header bar (GNOME style)

Example:

window := app.Window.NewWithOptions(application.WebviewWindowOptions{
Title: "My Application",
Linux: application.LinuxWindow{
MenuStyle: application.LinuxMenuStylePrimaryMenu,
},
})
window.SetMenu(menu)

Note: The primary menu style displays a hamburger button (☰) in the header bar, following GNOME Human Interface Guidelines. This is the recommended style for modern GNOME applications.

package main
import (
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/events"
)
func main() {
app := application.New(application.Options{
Name: "Window API Demo",
})
// Create window with options
window := app.Window.NewWithOptions(application.WebviewWindowOptions{
Title: "My Application",
Width: 1024,
Height: 768,
MinWidth: 800,
MinHeight: 600,
BackgroundColour: application.NewRGB(255, 255, 255),
URL: "http://wails.localhost/",
})
// Configure window behaviour
window.SetResizable(true)
window.SetMinSize(800, 600)
window.SetMaxSize(1920, 1080)
// Confirm-before-close hook
window.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) {
dlg := app.Dialog.Question().
SetTitle("Confirm Close").
SetMessage("Are you sure you want to close this window?")
yes := dlg.AddButton("Yes")
no := dlg.AddButton("No")
dlg.SetDefaultButton(yes)
dlg.SetCancelButton(no)
no.OnClick(func() { e.Cancel() })
dlg.Show()
})
// Listen for window events
window.OnWindowEvent(events.Common.WindowFocus, func(e *application.WindowEvent) {
window.SetTitle("My Application (Active)")
app.Logger.Info("Window gained focus")
})
window.OnWindowEvent(events.Common.WindowLostFocus, func(e *application.WindowEvent) {
window.SetTitle("My Application")
app.Logger.Info("Window lost focus")
})
// Position and show window
window.Center()
window.Show()
app.Run()
}