mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 22:31:06 +08:00

* feat(website): update dependencies and optimize some terms * docs: optimize english documents * docs: sync documents * chore(website): the website project adds the recommended configuration of the vscode plugin * ensure data doesn't get garbage collected too soon (#1113) * ensure data doesn't get garbage collected too soon * Update v2/internal/frontend/desktop/linux/frontend.go Co-authored-by: stffabi <stffabi@users.noreply.github.com> Co-authored-by: Lea Anthony <lea.anthony@gmail.com> Co-authored-by: stffabi <stffabi@users.noreply.github.com> * revert: undo lock-file changes * Feature/v2 linux menus (#1114) * Render menubar + text menu items * Support disabled menuitems + callbacks * Support checkboxes * Support reusing checkboxes * Support submenus * Support Radio menuitems * Support Menu Accelerators * Support MenuUpdateApplicationMenu * Fixes #1108 (#1115) * chore(action): add auto sync script (#1109) * Support RGBA, fix compilation error * Fix fullscreen drag * Ignore setenv error * ensure data doesn't get garbage collected too soon (#1113) * ensure data doesn't get garbage collected too soon * Update v2/internal/frontend/desktop/linux/frontend.go Co-authored-by: stffabi <stffabi@users.noreply.github.com> Co-authored-by: Lea Anthony <lea.anthony@gmail.com> Co-authored-by: stffabi <stffabi@users.noreply.github.com> * Feature/v2 linux menus (#1114) * Render menubar + text menu items * Support disabled menuitems + callbacks * Support checkboxes * Support reusing checkboxes * Support submenus * Support Radio menuitems * Support Menu Accelerators * Support MenuUpdateApplicationMenu * Fixes #1108 (#1115) * chore(action): add auto sync script (#1109) * Support RGBA, fix compilation error * Fix fullscreen drag * Ignore setenv error * feat(website): update dependencies and optimize some terms * docs: optimize english documents * docs: sync documents * chore(website): the website project adds the recommended configuration of the vscode plugin * revert: undo lock-file changes * [linux] better error handling * [linux] Better Go 1.16 support * [linux] Remove Go based dispatcher * feat(website): update dependencies and optimize some terms Co-authored-by: Travis McLane <tmclane@gmail.com> Co-authored-by: Lea Anthony <lea.anthony@gmail.com> Co-authored-by: stffabi <stffabi@users.noreply.github.com>
526 lines
13 KiB
Plaintext
526 lines
13 KiB
Plaintext
---
|
|
sidebar_position: 3
|
|
---
|
|
|
|
# Options
|
|
|
|
## Application Options
|
|
|
|
The `Options.App` struct contains the application configuration.
|
|
It is passed to the `wails.Run()` method:
|
|
|
|
```go title="Example"
|
|
import "github.com/wailsapp/wails/v2/pkg/options"
|
|
|
|
func main() {
|
|
|
|
err := wails.Run(&options.App{
|
|
Title: "Menus Demo",
|
|
Width: 800,
|
|
Height: 600,
|
|
DisableResize: false,
|
|
Fullscreen: false,
|
|
Frameless: true,
|
|
MinWidth: 400,
|
|
MinHeight: 400,
|
|
MaxWidth: 1280,
|
|
MaxHeight: 1024,
|
|
StartHidden: false,
|
|
HideWindowOnClose: false,
|
|
RGBA: &options.RGBA{R: 0, G: 0, B: 0, A: 255},
|
|
AlwaysOnTop: false,
|
|
Assets: assets,
|
|
Menu: app.applicationMenu(),
|
|
Logger: nil,
|
|
LogLevel: logger.DEBUG,
|
|
OnStartup: app.startup,
|
|
OnDomReady: app.domready,
|
|
OnShutdown: app.shutdown,
|
|
OnBeforeClose: app.beforeClose,
|
|
WindowStartState: options.Maximised,
|
|
Bind: []interface{}{
|
|
app,
|
|
},
|
|
Windows: &windows.Options{
|
|
WebviewIsTransparent: false,
|
|
WindowIsTranslucent: false,
|
|
DisableWindowIcon: false,
|
|
EnableFramelessBorder: false,
|
|
WebviewUserDataPath: "",
|
|
},
|
|
Mac: &mac.Options{
|
|
TitleBar: &mac.TitleBar{
|
|
TitlebarAppearsTransparent: true,
|
|
HideTitle: false,
|
|
HideTitleBar: false,
|
|
FullSizeContent: false,
|
|
UseToolbar: false,
|
|
HideToolbarSeparator: true,
|
|
},
|
|
Appearance: mac.NSAppearanceNameDarkAqua,
|
|
WebviewIsTransparent: true,
|
|
WindowIsTranslucent: false,
|
|
About: &mac.AboutInfo{
|
|
Title: "My Application",
|
|
Message: "© 2021 Me",
|
|
Icon: icon,
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Title
|
|
|
|
Name: Title
|
|
|
|
Type: string
|
|
|
|
The text shown in the window's title bar.
|
|
|
|
### Width
|
|
|
|
Name: Width
|
|
|
|
Type: int
|
|
|
|
The initial width of the window.
|
|
Default: 1024.
|
|
|
|
### Height
|
|
|
|
Name: Height
|
|
|
|
Type: int
|
|
|
|
The initial height of the window.
|
|
Default: 768
|
|
|
|
### DisableResize
|
|
|
|
Name: DisableResize
|
|
|
|
Type: bool
|
|
|
|
By default, the main window is resizable. Setting this to `true` will keep it a fixed size.
|
|
|
|
### Fullscreen
|
|
|
|
Name: Fullscreen
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will make the window fullscreen at startup.
|
|
|
|
### Frameless
|
|
|
|
Name: Frameless
|
|
|
|
Type: bool
|
|
|
|
When set to `true`, the window will have no borders or title bar.
|
|
Also see [Frameless Windows](/docs/guides/frameless).
|
|
|
|
### MinWidth
|
|
|
|
Name: MinWidth
|
|
|
|
Type: int
|
|
|
|
This sets the minimum width for the window. If the value given in `Width` is less than this value,
|
|
the window will be set to `MinWidth` by default.
|
|
|
|
### MinHeight
|
|
|
|
Name: MinHeight
|
|
|
|
Type: int
|
|
|
|
This sets the minimum height for the window. If the value given in `Height` is less than this value,
|
|
the window will be set to `MinHeight` by default.
|
|
|
|
### MaxWidth
|
|
|
|
Name: MaxWidth
|
|
|
|
Type: int
|
|
|
|
This sets the maximum width for the window. If the value given in `Width` is more than this value,
|
|
the window will be set to `MaxWidth` by default.
|
|
|
|
### MaxHeight
|
|
|
|
Name: MaxHeight
|
|
|
|
Type: int
|
|
|
|
This sets the maximum height for the window. If the value given in `Height` is more than this value,
|
|
the window will be set to `MaxHeight` by default.
|
|
|
|
### StartHidden
|
|
|
|
Name: StartHidden
|
|
|
|
Type: bool
|
|
|
|
When set to `true`, the application will be hidden until [WindowShow](/docs/reference/runtime/window#WindowShow)
|
|
is called.
|
|
|
|
### HideWindowOnClose
|
|
|
|
Name: HideWindowOnClose
|
|
|
|
Type: bool
|
|
|
|
By default, closing the window will close the application. Setting this to `true` means closing the window will
|
|
hide the window instead.
|
|
|
|
### RGBA
|
|
|
|
Name: RGBA
|
|
|
|
Type: int (0xRRGGBBAA)
|
|
Example: 0xFF000088 - Red at 50% transparency
|
|
|
|
This value is the RGBA value to set the window by default.
|
|
Default: 0xFFFFFFFF.
|
|
|
|
### AlwaysOnTop
|
|
|
|
Name: AlwaysOnTop
|
|
|
|
Type: bool
|
|
|
|
Indicates that the window should stay above other windows when losing focus.
|
|
|
|
### Assets
|
|
|
|
Name: Assets
|
|
|
|
Type: \*embed.FS
|
|
|
|
The frontend assets to be used by the application. Requires an `index.html` file.
|
|
|
|
### Menu
|
|
|
|
Name: Menu
|
|
|
|
Type: \*menu.Menu
|
|
|
|
The menu to be used by the application. More details about Menus in the [Menu Reference](/docs/reference/runtime/menu).
|
|
|
|
NOTE: On Mac, if no menu is specified, a default menu will be created.
|
|
|
|
### Logger
|
|
|
|
Name: Logger
|
|
|
|
Type: logger.Logger
|
|
|
|
Default: Logger to Stdout
|
|
|
|
The logger to be used by the application. More details about logging in the [Log Reference](/docs/reference/runtime/log).
|
|
|
|
### LogLevel
|
|
|
|
Name: LogLevel
|
|
|
|
Type: logger.LogLevel
|
|
|
|
Default: `Info` in dev mode, `Error` in production mode
|
|
|
|
The default log level. More details about logging in the [Log Reference](/docs/reference/runtime/log).
|
|
|
|
### OnStartup
|
|
|
|
Name: OnStartup
|
|
|
|
Type: func(ctx context.Context)
|
|
|
|
This callback is called after the frontend has been created, but before `index.html` has been loaded. It is given
|
|
the application context.
|
|
|
|
### OnDomReady
|
|
|
|
Name: OnDomReady
|
|
|
|
Type: func(ctx context.Context)
|
|
|
|
This callback is called after the frontend has loaded `index.html` and the DOM is ready. It is given
|
|
the application context.
|
|
|
|
### OnShutdown
|
|
|
|
Name: OnShutdown
|
|
|
|
Type: func(ctx context.Context)
|
|
|
|
This callback is called after the frontend has been destroyed, just before the application terminates. It is given
|
|
the application context.
|
|
|
|
### OnBeforeClose
|
|
|
|
Name: OnBeforeClose
|
|
|
|
Type: func(ctx context.Context) bool
|
|
|
|
If this callback is set, it will be called when the application is about to quit, either by clicking the window close
|
|
button or calling `runtime.Quit`. Returning true will cause the application to continue, false will continue shutdown
|
|
as normal. This is good for confirming with the user that they wish to exit the program.
|
|
|
|
Example:
|
|
```go title=windowsapp.go
|
|
func (b *App) beforeClose(ctx context.Context) (prevent bool) {
|
|
dialog, err := runtime.MessageDialog(ctx, runtime.MessageDialogOptions{
|
|
Type: runtime.QuestionDialog,
|
|
Title: "Quit?",
|
|
Message: "Are you sure you want to quit?",
|
|
})
|
|
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return dialog != "Yes"
|
|
}
|
|
```
|
|
|
|
### WindowStartState
|
|
|
|
Name: WindowStartState
|
|
|
|
Type: options.WindowStartState
|
|
|
|
Defines how the window should present itself at startup.
|
|
|
|
| Value | Win | Mac |
|
|
| --------------- | --- | --- |
|
|
| Fullscreen | ✅ | ✅ |
|
|
| Maximised | ✅ | ✅ |
|
|
| Minimised | ✅ | |
|
|
|
|
### Bind
|
|
|
|
Name: Bind
|
|
|
|
Type: []interface{}
|
|
|
|
A slice of struct instances defining methods that need to be bound to the frontend.
|
|
|
|
### Windows
|
|
|
|
Name: Windows
|
|
|
|
Type: \*windows.Options
|
|
|
|
This defines [Windows specific options](#windows-specific-options).
|
|
|
|
### Mac
|
|
|
|
Name: Mac
|
|
|
|
Type: \*mac.Options
|
|
|
|
This defines [Mac specific options](#mac-specific-options).
|
|
|
|
## Windows Specific Options
|
|
|
|
### WebviewIsTransparent
|
|
|
|
Name: WebviewIsTransparent
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will make the webview background transparent when an alpha value of `0` is used.
|
|
This means that if you use `rgba(0,0,0,0)`, the host window will show through.
|
|
Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications.
|
|
|
|
### WindowIsTranslucent
|
|
|
|
Name: WindowIsTranslucent
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will make the window background translucent. Often combined
|
|
with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications.
|
|
|
|
### DisableWindowIcon
|
|
|
|
Name: DisableWindowIcon
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will remove the icon in the top left corner of the title bar.
|
|
|
|
### EnableFramelessBorder
|
|
|
|
Name: EnableFramelessBorder
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will add a border around the window if [Frameless](#Frameless) has been activated.
|
|
This allows hiding the title bar but still having a border around the window.
|
|
|
|
### WebviewUserDataPath
|
|
|
|
Name: WebviewUserDataPath
|
|
|
|
Type: string
|
|
|
|
This defines the path where the WebView2 stores the user data. If empty `%APPDATA%\[BinaryName.exe]` will be used.
|
|
|
|
## Mac Specific Options
|
|
|
|
### TitleBar
|
|
|
|
Name: TitleBar
|
|
|
|
Type: [*mac.TitleBar](#titlebar-struct)
|
|
|
|
The TitleBar struct provides the ability to configure the look and feel of the title bar.
|
|
|
|
### Appearance
|
|
|
|
Name: Appearance
|
|
|
|
Type: [AppearanceType](#appearance-type)
|
|
|
|
Appearance is used to set the style of your app in accordance with Apple's [NSAppearance](https://developer.apple.com/documentation/appkit/nsappearancename?language=objc) names.
|
|
|
|
### WebviewIsTransparent
|
|
|
|
Name: WebviewIsTransparent
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will make the webview background transparent when an alpha value of `0` is used.
|
|
This means that if you use `rgba(0,0,0,0)`, the host window will show through.
|
|
Often combined with [WindowIsTranslucent](#WindowIsTranslucent) to make frosty-looking applications.
|
|
|
|
### WindowIsTranslucent
|
|
|
|
Name: WindowIsTranslucent
|
|
|
|
Type: bool
|
|
|
|
Setting this to `true` will make the window background translucent. Often combined
|
|
with [WebviewIsTransparent](#WebviewIsTransparent) to make frosty-looking applications.
|
|
|
|
### About
|
|
|
|
Name: About
|
|
|
|
Type: [About](#about-struct)
|
|
|
|
This configuration lets you set the title, message and icon for the "About" menu item in the app menu created by the "AppMenu" role.
|
|
|
|
#### Titlebar struct
|
|
|
|
The titlebar of the application can be customised by using the TitleBar options:
|
|
|
|
```go
|
|
type TitleBar struct {
|
|
TitlebarAppearsTransparent bool
|
|
HideTitle bool
|
|
HideTitleBar bool
|
|
FullSizeContent bool
|
|
UseToolbar bool
|
|
HideToolbarSeparator bool
|
|
}
|
|
```
|
|
|
|
| Name | Description |
|
|
| ---- | ----------- |
|
|
| TitlebarAppearsTransparent | Makes the titlebar transparent. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindow/1419167-titlebarappearstransparent?language=objc) |
|
|
| HideTitle | Hides the title of the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowtitlevisibility?language=objc) |
|
|
| HideTitleBar | Removes [NSWindowStyleMaskTitled](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemasktitled/) from the style mask |
|
|
| FullSizeContent | Makes the webview fill the entire window. [Apple Docs](https://developer.apple.com/documentation/appkit/nswindowstylemask/nswindowstylemaskfullsizecontentview)|
|
|
| UseToolbar | Adds a default toolbar to the window. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar?language=objc) |
|
|
| HideToolbarSeparator | Removes the line beneath the toolbar. [Apple Docs](https://developer.apple.com/documentation/appkit/nstoolbar/1516954-showsbaselineseparator?language=objc) |
|
|
|
|
Preconfigured titlebar settings are available:
|
|
|
|
| Setting | Example |
|
|
| ------- | ------- |
|
|
|`mac.TitleBarDefault()` |  |
|
|
|`mac.TitleBarHidden()` |  |
|
|
|`mac.TitleBarHiddenInset()` |  |
|
|
|
|
Example:
|
|
```go
|
|
Mac: &mac.Options{
|
|
TitleBar: mac.TitleBarHiddenInset(),
|
|
}
|
|
```
|
|
|
|
Click [here](https://github.com/lukakerr/NSWindowStyles) for some inspiration on customising the titlebar.
|
|
|
|
#### Appearance type
|
|
|
|
You can specify the application's [appearance](https://developer.apple.com/documentation/appkit/nsappearance?language=objc).
|
|
|
|
| Value | Description |
|
|
| --------------- | ------------------ |
|
|
| DefaultAppearance | DefaultAppearance uses the default system value |
|
|
| NSAppearanceNameAqua | The standard light system appearance |
|
|
| NSAppearanceNameDarkAqua | The standard dark system appearance |
|
|
| NSAppearanceNameVibrantLight | The light vibrant appearance |
|
|
| NSAppearanceNameAccessibilityHighContrastAqua | A high-contrast version of the standard light system appearance |
|
|
| NSAppearanceNameAccessibilityHighContrastDarkAqua | A high-contrast version of the standard dark system appearance |
|
|
| NSAppearanceNameAccessibilityHighContrastVibrantLight | A high-contrast version of the light vibrant appearance |
|
|
| NSAppearanceNameAccessibilityHighContrastVibrantDark | A high-contrast version of the dark vibrant appearance |
|
|
|
|
Example:
|
|
```go
|
|
Mac: &mac.Options{
|
|
Appearance: mac.NSAppearanceNameDarkAqua,
|
|
}
|
|
```
|
|
|
|
#### About struct
|
|
|
|
```go
|
|
type AboutInfo struct {
|
|
Title string
|
|
Message string
|
|
Icon []byte
|
|
}
|
|
```
|
|
If these settings are provided, an "About" menu item will appear in the app menu (when using the `AppMenu` role).
|
|
Given this configuration:
|
|
```go
|
|
//go:embed build/appicon.png
|
|
var icon []byte
|
|
|
|
func main() {
|
|
err := wails.Run(&options.App{
|
|
...
|
|
Mac: &mac.Options{
|
|
About: &mac.AboutInfo{
|
|
Title: "My Application",
|
|
Message: "© 2021 Me",
|
|
Icon: icon,
|
|
},
|
|
},
|
|
})
|
|
```
|
|
The "About" menu item will appear in the app menu:
|
|
|
|
<div class="text--center">
|
|
<img src="/img/reference/about-menu.png" style={{"box-shadow": "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px"}}/>
|
|
</div>
|
|
<br/>
|
|
|
|
When clicked, that will open an about message box:
|
|
|
|
<div class="text--center">
|
|
<img src="/img/reference/about-dialog.png" width="40%" style={{"box-shadow": "rgb(255 255 255 / 20%) 0px 4px 8px 0px, rgb(104 104 104) 0px 6px 20px 0px"}}/>
|
|
</div>
|
|
<br/>
|
|
|