Update parser and bindings generation

Update tests
This commit is contained in:
Lea Anthony
2023-11-05 18:06:11 +11:00
parent 075eb1fa3f
commit 857bf40072
25 changed files with 1526 additions and 1504 deletions
+2 -1
View File
@@ -1,6 +1,7 @@
# Application
The application API assists in creating an application using the Wails framework.
The application API assists in creating an application using the Wails
framework.
### New
File diff suppressed because it is too large Load Diff
+13 -7
View File
@@ -19,16 +19,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- [darwin] add Event ApplicationShouldHandleReopen to able handle dock icon click by @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
- [darwin] add getPrimaryScreen/getScreens to impl by @tmclane in [#2618](https://github.com/wailsapp/wails/pull/2618)
- [darwin] add Event ApplicationShouldHandleReopen to able handle dock icon
click by @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
- [darwin] add getPrimaryScreen/getScreens to impl by @tmclane in
[#2618](https://github.com/wailsapp/wails/pull/2618)
### Fixed
- Fixed Doctor apt package verify by [Atterpac](https://github.com/Atterpac) in [#2972](https://github.com/wailsapp/wails/pull/2972).
- Fixed application frozen when quit (Darwin) by @5aaee9 in [#2982](https://github.com/wailsapp/wails/pull/2982)
- Fixed background colours of examples on Windows by [mmgvh](https://github.com/mmghv) in [#2750](https://github.com/wailsapp/wails/pull/2750).
- Fixed default context menus by [mmgvh](https://github.com/mmghv) in [#2753](https://github.com/wailsapp/wails/pull/2753).
- Fixed Doctor apt package verify by [Atterpac](https://github.com/Atterpac) in
[#2972](https://github.com/wailsapp/wails/pull/2972).
- Fixed application frozen when quit (Darwin) by @5aaee9 in
[#2982](https://github.com/wailsapp/wails/pull/2982)
- Fixed background colours of examples on Windows by
[mmgvh](https://github.com/mmghv) in
[#2750](https://github.com/wailsapp/wails/pull/2750).
- Fixed default context menus by [mmgvh](https://github.com/mmghv) in
[#2753](https://github.com/wailsapp/wails/pull/2753).
### Changed
@@ -1,7 +1,7 @@
# Changes for v3
!!! note
This is currently an unsorted brain dump of changes. It will be organised into a more readable format soon.
!!! note This is currently an unsorted brain dump of changes. It will be
organised into a more readable format soon.
## Options
@@ -1,7 +1,6 @@
# Introduction
!!! note
This guide is a work in progress.
!!! note This guide is a work in progress.
Thanks for wanting to help out with development of Wails! This guide will help
you get started.
@@ -48,8 +47,10 @@ The project has the following structure:
### Alpha Todo List
We are currently tracking known issues and tasks in the [Alpha Todo List](https://github.com/orgs/wailsapp/projects/6).
If you want to help out, please check this list and follow the instructions in the [Feedback](../getting-started/feedback.md) page.
We are currently tracking known issues and tasks in the
[Alpha Todo List](https://github.com/orgs/wailsapp/projects/6). If you want to
help out, please check this list and follow the instructions in the
[Feedback](../getting-started/feedback.md) page.
### Adding window functionality
@@ -140,8 +141,8 @@ The `InjectJS()` method returns JavaScript that should be injected into all
windows as they are created. This is useful for adding custom JavaScript
functions that complement the plugin.
The built-in plugins can be found in the `v3/plugins` directory.
Check them out for inspiration.
The built-in plugins can be found in the `v3/plugins` directory. Check them out
for inspiration.
## Tasks
+20 -21
View File
@@ -16,7 +16,7 @@ Status of features in v3.
Application interface methods
| Method | Windows | Linux | Mac | Notes |
|---------------------------------------------------------------|---------|-------|-----|-------|
| ------------------------------------------------------------- | ------- | ----- | --- | ----- |
| run() error | Y | Y | Y | |
| destroy() | | Y | Y | |
| setApplicationMenu(menu \*Menu) | Y | Y | Y | |
@@ -36,7 +36,7 @@ Application interface methods
Webview Window Interface Methods
| Method | Windows | Linux | Mac | Notes |
|----------------------------------------------------|---------|-------|-----|------------------------------------------|
| -------------------------------------------------- | ------- | ----- | --- | ---------------------------------------- |
| center() | Y | Y | Y | |
| close() | y | Y | Y | |
| destroy() | | Y | Y | |
@@ -90,7 +90,7 @@ Webview Window Interface Methods
### Application
| Feature | Windows | Linux | Mac | Notes |
|---------|---------|-------|-----|-------|
| ------- | ------- | ----- | --- | ----- |
| Quit | Y | Y | Y | |
| Hide | Y | | Y | |
| Show | Y | | Y | |
@@ -98,7 +98,7 @@ Webview Window Interface Methods
### Dialogs
| Feature | Windows | Linux | Mac | Notes |
|----------|---------|-------|-----|-------|
| -------- | ------- | ----- | --- | ----- |
| Info | Y | Y | Y | |
| Warning | Y | Y | Y | |
| Error | Y | Y | Y | |
@@ -109,14 +109,14 @@ Webview Window Interface Methods
### Clipboard
| Feature | Windows | Linux | Mac | Notes |
|---------|---------|-------|-----|-------|
| ------- | ------- | ----- | --- | ----- |
| SetText | Y | | Y | |
| Text | Y | | Y | |
### ContextMenu
| Feature | Windows | Linux | Mac | Notes |
|------------------|---------|-------|-----|-------|
| ---------------- | ------- | ----- | --- | ----- |
| OpenContextMenu | Y | | Y | |
| On By Default | | | | |
| Control via HTML | Y | | | |
@@ -134,7 +134,7 @@ show the context menu unless it is explicitly set with
### Screens
| Feature | Windows | Linux | Mac | Notes |
|------------|---------|-------|-----|-------|
| ---------- | ------- | ----- | --- | ----- |
| GetAll | Y | Y | Y | |
| GetPrimary | Y | Y | Y | |
| GetCurrent | Y | Y | Y | |
@@ -142,7 +142,7 @@ show the context menu unless it is explicitly set with
### System
| Feature | Windows | Linux | Mac | Notes |
|------------|---------|-------|-----|-------|
| ---------- | ------- | ----- | --- | ----- |
| IsDarkMode | | | Y | |
### Window
@@ -152,7 +152,7 @@ Y = Supported U = Untested
- = Not available
| Feature | Windows | Linux | Mac | Notes |
|---------------------|---------|-------|-----|--------------------------------------------------------------------------------------|
| ------------------- | ------- | ----- | --- | ------------------------------------------------------------------------------------ |
| Center | Y | Y | Y | |
| Focus | Y | Y | | |
| FullScreen | Y | Y | Y | |
@@ -190,7 +190,7 @@ applied when the window is created. An 'X' indicates that the option is not
supported by the platform.
| Feature | Windows | Linux | Mac | Notes |
|---------------------------------|---------|-------|-----|--------------------------------------------|
| ------------------------------- | ------- | ----- | --- | ------------------------------------------ |
| AlwaysOnTop | Y | | | |
| BackgroundColour | Y | Y | | |
| BackgroundType | | | | Acrylic seems to work but the others don't |
@@ -230,13 +230,13 @@ To log or not to log? System logger vs custom logger.
## Menu
| Event | Windows | Linux | Mac | Notes |
|--------------------------|---------|-------|-----|-------|
| ------------------------ | ------- | ----- | --- | ----- |
| Default Application Menu | Y | Y | Y | |
## Tray Menus
| Feature | Windows | Linux | Mac | Notes |
|--------------------|---------|-------|-----|----------------------------------------------------------------------|
| ------------------ | ------- | ----- | --- | -------------------------------------------------------------------- |
| Icon | Y | | Y | Windows has default icons for light/dark mode & supports PNG or ICO. |
| Label | - | | Y | |
| Label (ANSI Codes) | - | | | |
@@ -245,7 +245,7 @@ To log or not to log? System logger vs custom logger.
### Methods
| Method | Windows | Linux | Mac | Notes |
|-------------------------------|---------|-------|-----|-------|
| ----------------------------- | ------- | ----- | --- | ----- |
| setLabel(label string) | - | | Y | |
| run() | Y | | Y | |
| setIcon(icon []byte) | Y | | Y | |
@@ -260,7 +260,7 @@ To log or not to log? System logger vs custom logger.
Mapping native events to cross-platform events.
| Event | Windows | Linux | Mac | Notes |
|--------------------------|---------|-------|-----------------|-------|
| ------------------------ | ------- | ----- | --------------- | ----- |
| WindowWillClose | | | WindowWillClose | |
| WindowDidClose | | | | |
| WindowDidResize | | | | |
@@ -284,7 +284,7 @@ Contains a lot needed for development.
## Theme
| Mode | Windows | Linux | Mac | Notes |
|--------|---------|-------|-----|-------|
| ------ | ------- | ----- | --- | ----- |
| Dark | Y | | | |
| Light | Y | | | |
| System | Y | | | |
@@ -302,7 +302,7 @@ All templates are working.
Built-in plugin support:
| Plugin | Windows | Linux | Mac | Notes |
|-----------------|---------|-------|-----|-------|
| --------------- | ------- | ----- | --- | ----- |
| Browser | Y | | Y | |
| KV Store | Y | Y | Y | |
| Log | Y | Y | Y | |
@@ -318,7 +318,7 @@ TODO:
## Packaging
| | Windows | Linux | Mac | Notes |
|-----------------|---------|-------|-----|-------|
| --------------- | ------- | ----- | --- | ----- |
| Icon Generation | Y | | Y | |
| Icon Embedding | Y | | Y | |
| Info.plist | - | | Y | |
@@ -329,7 +329,7 @@ TODO:
## Frameless Windows
| Feature | Windows | Linux | Mac | Notes |
|---------|---------|-------|-----|------------------------------------------------|
| ------- | ------- | ----- | --- | ---------------------------------------------- |
| Resize | Y | | Y | |
| Drag | Y | Y | Y | Linux - can always drag with `Meta`+left mouse |
@@ -340,7 +340,7 @@ TODO:
### Mac Options
| Feature | Default | Notes |
|-------------------------|-------------------|------------------------------------------------------|
| ----------------------- | ----------------- | ---------------------------------------------------- |
| Backdrop | MacBackdropNormal | Standard solid window |
| DisableShadow | false | |
| TitleBar | | Standard window decorations by default |
@@ -356,7 +356,7 @@ TODO:
### Windows Options
| Feature | Default | Notes |
|-----------------------------------|---------------|---------------------------------------------|
| --------------------------------- | ------------- | ------------------------------------------- |
| BackdropType | Solid | |
| DisableIcon | false | |
| Theme | SystemDefault | |
@@ -385,4 +385,3 @@ The examples can be compiled using the following command:
CGO_ENABLED=0 go build -tags purego
Note: things are currently not working after the refactor
@@ -1,7 +1,7 @@
# Feedback
We welcome (and encourage) your feedback! Please search for existing tickets or posts before creating new ones.
Here are the different ways to provide feedback:
We welcome (and encourage) your feedback! Please search for existing tickets or
posts before creating new ones. Here are the different ways to provide feedback:
=== "Bugs"
@@ -35,7 +35,8 @@ Here are the different ways to provide feedback:
- Please *don't* just add comments like "+1" or "me too".
- Please feel free to comment if there is more to add to the post, such as "this bug also affect ARM builds" or "Another option would be to ....."
There is a list of known issues & work in progress can be found [here](https://github.com/orgs/wailsapp/projects/6).
There is a list of known issues & work in progress can be found
[here](https://github.com/orgs/wailsapp/projects/6).
## Things we are looking for feedback on
+11 -8
View File
@@ -1,7 +1,8 @@
**# Roadmap
\*\*# Roadmap
The roadmap is a living document and is subject to change. If you have any suggestions, please open an issue.
Each milestone will have a set of goals that we are aiming to achieve. These are subject to change.
The roadmap is a living document and is subject to change. If you have any
suggestions, please open an issue. Each milestone will have a set of goals that
we are aiming to achieve. These are subject to change.
## Alpha milestones
@@ -9,8 +10,9 @@ Each milestone will have a set of goals that we are aiming to achieve. These are
#### Goals
Alpha 1 is the initial release. It is intended to get feedback on the new API and to get people experimenting with it.
The main goal is to get most of the examples working on all platforms.
Alpha 1 is the initial release. It is intended to get feedback on the new API
and to get people experimenting with it. The main goal is to get most of the
examples working on all platforms.
#### Status
@@ -20,15 +22,16 @@ The main goal is to get most of the examples working on all platforms.
{{ read_csv("status.csv") }}
- Mac Dialogs work, however the file dialogs issue a warning that needs to be fixed.
- Mac Dialogs work, however the file dialogs issue a warning that needs to be
fixed.
#### TODO:
- [ ] Fix `+[CATransaction synchronize] called within transaction` warnings on Mac
- [ ] Fix `+[CATransaction synchronize] called within transaction` warnings on
Mac
- [ ] When hiding window, application terminates
### Alpha 2
- [ ] Most examples working on Linux
- [ ] Project creation via `wails init`
+2 -2
View File
@@ -1,7 +1,7 @@
# What's new in v3?
!!! note
The features that will be included in the v3 release may change from this list.
!!! note The features that will be included in the v3 release may change from
this list.
## Multiple Windows
+35 -18
View File
@@ -6,7 +6,8 @@
API`New(appOptions Options) *App`
`New(appOptions Options)` 使用给定的应用程序选项创建一个新的应用程序。它对未指定的选项应用默认值,将其与提供的选项合并,然后初始化并返回应用程序的实例。
`New(appOptions Options)` 使用给定的应用程序选项创建一个新的应用程序。它对未指定
的选项应用默认值,将其与提供的选项合并,然后初始化并返回应用程序的实例。
如果在初始化过程中出现错误,应用程序将停止,并显示提供的错误消息。
@@ -40,7 +41,8 @@ func main() {
API`Capabilities() capabilities.Capabilities`
`Capabilities()` 返回应用程序当前具有的功能的映射。这些功能可以是操作系统提供的不同功能,如 webview 功能。
`Capabilities()` 返回应用程序当前具有的功能的映射。这些功能可以是操作系统提供的
不同功能,如 webview 功能。
```go
// 获取应用程序的功能
@@ -92,7 +94,8 @@ API`Quit()`
API`IsDarkMode() bool`
`IsDarkMode()` 检查应用程序是否在暗模式下运行。它返回一个布尔值,指示是否启用了暗模式。
`IsDarkMode()` 检查应用程序是否在暗模式下运行。它返回一个布尔值,指示是否启用了
暗模式。
```go
// 检查是否启用了暗模式
@@ -138,7 +141,8 @@ API`NewWebviewWindow() *WebviewWindow`
API`NewWebviewWindowWithOptions(windowOptions WebviewWindowOptions) *WebviewWindow`
`NewWebviewWindowWithOptions()` 使用自定义选项创建一个新的 Webview 窗口。新创建的窗口将添加到应用程序管理的窗口映射中。
`NewWebviewWindowWithOptions()` 使用自定义选项创建一个新的 Webview 窗口。新创建
的窗口将添加到应用程序管理的窗口映射中。
```go
// 使用自定义选项创建一个新的 Webview 窗口
@@ -178,7 +182,8 @@ API`GetWindowByName(name string) *WebviewWindow`
API`CurrentWindow() *WebviewWindow`
`CurrentWindow()` 获取并返回应用程序中当前活动窗口的指针。如果没有窗口,则返回 nil。
`CurrentWindow()` 获取并返回应用程序中当前活动窗口的指针。如果没有窗口,则返回
nil。
```go
// 获取当前窗口
@@ -189,7 +194,8 @@ API`CurrentWindow() *WebviewWindow`
API`RegisterContextMenu(name string, menu *Menu)`
`RegisterContextMenu()` 注册具有给定名称的上下文菜单。稍后可以在应用程序中使用该菜单。
`RegisterContextMenu()` 注册具有给定名称的上下文菜单。稍后可以在应用程序中使用该
菜单。
```go
@@ -204,7 +210,8 @@ API`RegisterContextMenu(name string, menu *Menu)`
API`SetMenu(menu *Menu)`
`SetMenu()` 设置应用程序的菜单。在 Mac 上,这将是全局菜单。对于 Windows 和 Linux,这将是任何新窗口的默认菜单。
`SetMenu()` 设置应用程序的菜单。在 Mac 上,这将是全局菜单。对于 Windows 和
Linux,这将是任何新窗口的默认菜单。
```go
// 创建一个新的菜单
@@ -229,55 +236,64 @@ API`ShowAboutDialog()`
API`InfoDialog()`
`InfoDialog()` 创建并返回一个具有 `InfoDialogType``MessageDialog` 的新实例。此对话框通常用于向用户显示信息消息。
`InfoDialog()` 创建并返回一个具有 `InfoDialogType``MessageDialog` 的新实例。
此对话框通常用于向用户显示信息消息。
### Question
API`QuestionDialog()`
`QuestionDialog()` 创建并返回一个具有 `QuestionDialogType``MessageDialog`新实例。此对话框通常用于向用户提问并期望回应。
`QuestionDialog()` 创建并返回一个具有 `QuestionDialogType``MessageDialog`
新实例。此对话框通常用于向用户提问并期望回应。
### Warning
API`WarningDialog()`
`WarningDialog()` 创建并返回一个具有 `WarningDialogType``MessageDialog` 的新实例。如其名称所示,此对话框主要用于向用户显示警告消息。
`WarningDialog()` 创建并返回一个具有 `WarningDialogType``MessageDialog` 的新
实例。如其名称所示,此对话框主要用于向用户显示警告消息。
### Error
API`ErrorDialog()`
`ErrorDialog()` 创建并返回一个具有 `ErrorDialogType``MessageDialog` 的新实例。此对话框设计用于在需要向用户显示错误消息时使用。
`ErrorDialog()` 创建并返回一个具有 `ErrorDialogType``MessageDialog` 的新实
例。此对话框设计用于在需要向用户显示错误消息时使用。
### OpenFile
API`OpenFileDialog()`
`OpenFileDialog()` 创建并返回一个新的 `OpenFileDialogStruct`。此对话框提示用户从其文件系统中选择一个或多个文件。
`OpenFileDialog()` 创建并返回一个新的 `OpenFileDialogStruct`。此对话框提示用户从
其文件系统中选择一个或多个文件。
### SaveFile
API`SaveFileDialog()`
`SaveFileDialog()` 创建并返回一个新的 `SaveFileDialogStruct`。此对话框提示用户选择其文件系统上的位置以保存文件。
`SaveFileDialog()` 创建并返回一个新的 `SaveFileDialogStruct`。此对话框提示用户选
择其文件系统上的位置以保存文件。
### OpenDirectory
API`OpenDirectoryDialog()`
`OpenDirectoryDialog()` 创建并返回一个具有 `OpenDirectoryDialogType` `MessageDialog` 的新实例。此对话框使用户能够从其文件系统中选择目录。
`OpenDirectoryDialog()` 创建并返回一个具有 `OpenDirectoryDialogType`
`MessageDialog` 的新实例。此对话框使用户能够从其文件系统中选择目录。
### On
API`On(eventType events.ApplicationEventType, callback func(event *Event)) func()`
`On()` 注册特定应用程序事件的事件侦听器。提供的回调函数将在相应事件发生时触发。该函数返回一个可调用的函数,用于删除侦听器。
`On()` 注册特定应用程序事件的事件侦听器。提供的回调函数将在相应事件发生时触发。
该函数返回一个可调用的函数,用于删除侦听器。
### RegisterHook
API`RegisterHook(eventType events.ApplicationEventType, callback func(event *Event)) func()`
`RegisterHook()` 注册要在特定事件期间作为钩子运行的回调函数。这些钩子在使用 `On()` 附加的侦听器之前运行。该函数返回一个可调用的函数,用于删除钩子。
`RegisterHook()` 注册要在特定事件期间作为钩子运行的回调函数。这些钩子在使用
`On()` 附加的侦听器之前运行。该函数返回一个可调用的函数,用于删除钩子。
### GetPrimaryScreen
@@ -291,7 +307,8 @@ API`GetScreens() ([]*Screen, error)`
`GetScreens()` 返回有关连接到系统的所有屏幕的信息。
这是提供的 `App` 结构中导出的方法的简要摘要。请注意,有关更详细的功能或注意事项,请参考实际的 Go 代码或进一步的内部文档。
这是提供的 `App` 结构中导出的方法的简要摘要。请注意,有关更详细的功能或注意事
项,请参考实际的 Go 代码或进一步的内部文档。
## Options
@@ -315,4 +332,4 @@ API`GetScreens() ([]*Screen, error)`
--8<--
../v3/pkg/application/options_application_mac.go
--8<--
```
```
+15 -7
View File
@@ -1,28 +1,34 @@
# 主线程函数
这些方法是在主线程上运行代码的实用函数。当您想要在UI线程上运行自定义代码时,这是必需的。
这些方法是在主线程上运行代码的实用函数。当您想要在UI线程上运行自定义代码时,这是
必需的。
### InvokeSync
API: `InvokeSync(fn func())`
此函数以同步方式运行传入的函数(`fn`)。它使用一个`WaitGroup``wg`)确保主线程`fn`函数完成之前等待,然后才继续执行。如果在`fn`内部发生恐慌,它将传递给应用程序选项中定义的处理程序函数`PanicHandler`
此函数以同步方式运行传入的函数(`fn`)。它使用一个`WaitGroup``wg`)确保主线程
`fn`函数完成之前等待,然后才继续执行。如果在`fn`内部发生恐慌,它将传递给应用程
序选项中定义的处理程序函数`PanicHandler`
### InvokeSyncWithResult
API: `InvokeSyncWithResult[T any](fn func() T) (res T)`
此函数与`InvokeSync(fn func())`类似,但它返回一个结果。可用于调用具有单个返回值的任何函数。
此函数与`InvokeSync(fn func())`类似,但它返回一个结果。可用于调用具有单个返回值
的任何函数。
### InvokeSyncWithError
API: `InvokeSyncWithError(fn func() error) (err error)`
此函数同步运行`fn`并返回`fn`产生的任何错误。请注意,如果在`fn`执行期间发生恐慌,此函数将从恢复。
此函数同步运行`fn`并返回`fn`产生的任何错误。请注意,如果在`fn`执行期间发生恐慌,
此函数将从恢复。
### InvokeSyncWithResultAndError
API: `InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err error)`
API:
`InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err error)`
此函数同步运行`fn`并返回类型为`T`的结果和一个错误。
@@ -30,8 +36,10 @@ API: `InvokeSyncWithResultAndError[T any](fn func() (T, error)) (res T, err erro
API: `InvokeAsync(fn func())`
此函数以异步方式运行`fn`。它在主线程上运行给定的函数。如果在`fn`内部发生恐慌,它将传递给应用程序选项中定义的处理程序函数`PanicHandler`
此函数以异步方式运行`fn`。它在主线程上运行给定的函数。如果在`fn`内部发生恐慌,它
将传递给应用程序选项中定义的处理程序函数`PanicHandler`
---
注意:这些函数将阻塞执行,直到`fn`完成。确保`fn`不会阻塞至关重要。如果需要运行阻塞函数,请改用`InvokeAsync`
注意:这些函数将阻塞执行,直到`fn`完成。确保`fn`不会阻塞至关重要。如果需要运行阻
塞函数,请改用`InvokeAsync`
+13 -7
View File
@@ -1,6 +1,7 @@
# 菜单
可以创建菜单并添加到应用程序中。它们可以用于创建上下文菜单、系统托盘菜单和应用程序菜单。
可以创建菜单并添加到应用程序中。它们可以用于创建上下文菜单、系统托盘菜单和应用程
序菜单。
要创建一个新菜单,请调用:
@@ -15,7 +16,8 @@
API`Add(label string) *MenuItem`
此方法以 `string` 类型的 `label` 作为输入,并将具有给定标签的新 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`
此方法以 `string` 类型的 `label` 作为输入,并将具有给定标签的新 `MenuItem` 添加
到菜单中。它返回添加的 `MenuItem`
### 添加分隔符
@@ -27,13 +29,15 @@ API`AddSeparator()`
API`AddCheckbox(label string, enabled bool) *MenuItem`
此方法以 `string` 类型的 `label``bool` 类型的 `enabled` 作为输入,并将具有给定标签和启用状态的新复选框 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`
此方法以 `string` 类型的 `label``bool` 类型的 `enabled` 作为输入,并将具有给
定标签和启用状态的新复选框 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`
### 添加单选按钮
API`AddRadio(label string, enabled bool) *MenuItem`
此方法以 `string` 类型的 `label``bool` 类型的 `enabled` 作为输入,并将具有给定标签和启用状态的新单选按钮 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`
此方法以 `string` 类型的 `label``bool` 类型的 `enabled` 作为输入,并将具有给
定标签和启用状态的新单选按钮 `MenuItem` 添加到菜单中。它返回添加的 `MenuItem`
### 更新
@@ -45,16 +49,18 @@ API`Update()`
API`AddSubmenu(s string) *Menu`
此方法以 `string` 类型的 `s` 作为输入,并将具有给定标签的新子菜单 `MenuItem`加到菜单中。它返回添加的子菜单。
此方法以 `string` 类型的 `s` 作为输入,并将具有给定标签的新子菜单 `MenuItem`
加到菜单中。它返回添加的子菜单。
### 添加角色
API`AddRole(role Role) *Menu`
此方法以 `Role` 类型的 `role` 作为输入,如果不为 `nil`,则将其添加到菜单中,并返`Menu`
此方法以 `Role` 类型的 `role` 作为输入,如果不为 `nil`,则将其添加到菜单中,并返
`Menu`
### 设置标签
API`SetLabel(label string)`
此方法设置 `Menu``label`
此方法设置 `Menu``label`
+3 -2
View File
@@ -93,10 +93,11 @@ API`WindowOffset(offset int) *SystemTray`
API`WindowDebounce(debounce time.Duration) *SystemTray`
`WindowDebounce` 方法设置防抖时间。在 Windows 上,它用于指定在响应通知图标上的鼠标松开事件之前等待多长时间。
`WindowDebounce` 方法设置防抖时间。在 Windows 上,它用于指定在响应通知图标上的鼠
标松开事件之前等待多长时间。
### OpenMenu
API`OpenMenu()`
`OpenMenu` 方法打开与系统托盘关联的菜单。
`OpenMenu` 方法打开与系统托盘关联的菜单。
+10 -5
View File
@@ -1,6 +1,8 @@
# 窗口
要创建一个窗口,可以使用[Application.NewWebviewWindow](application.md#newwebviewwindow)或[Application.NewWebviewWindowWithOptions](application.md#newwebviewwindowwithoptions)。前者创建一个具有默认选项的窗口,而后者允许您指定自定义选项。
要创建一个窗口,可以使
用[Application.NewWebviewWindow](application.md#newwebviewwindow)或[Application.NewWebviewWindowWithOptions](application.md#newwebviewwindowwithoptions)。
前者创建一个具有默认选项的窗口,而后者允许您指定自定义选项。
这些方法可在返回的WebviewWindow对象上调用:
@@ -20,7 +22,8 @@ API: `Name() string`
API: `SetSize(width, height int) *WebviewWindow`
此方法将WebviewWindow的大小设置为提供的宽度和高度参数。如果提供的尺寸超过约束条件,它们将被相应调整。
此方法将WebviewWindow的大小设置为提供的宽度和高度参数。如果提供的尺寸超过约束条
件,它们将被相应调整。
### SetAlwaysOnTop
@@ -32,7 +35,8 @@ API: `SetAlwaysOnTop(b bool) *WebviewWindow`
API: `Show() *WebviewWindow`
`Show`方法用于使窗口可见。如果窗口未运行,它首先调用`run`方法启动窗口,然后使其可见。
`Show`方法用于使窗口可见。如果窗口未运行,它首先调用`run`方法启动窗口,然后使其
可见。
### Hide
@@ -68,7 +72,8 @@ API: `GetScreen() (*Screen, error)`
API: `SetFrameless(frameless bool) *WebviewWindow`
此函数用于移除窗口边框和标题栏。它根据提供的布尔值(true表示无边框,false表示有边框)切换窗口的无边框状态。
此函数用于移除窗口边框和标题栏。它根据提供的布尔值(true表示无边框,false表示有
边框)切换窗口的无边框状态。
#### RegisterContextMenu
@@ -98,4 +103,4 @@ API: `SetEnabled(enabled bool)`
API: `SetAbsolutePosition(x int, y int)`
此函数设置窗口在屏幕上的绝对位置。
此函数设置窗口在屏幕上的绝对位置。
+14 -9
View File
@@ -1,6 +1,6 @@
# 更新日志
<!--
<!--
此项目的所有重要更改将在此文件中记录。
格式基于[保持一个更改日志](https://keepachangelog.com/en/1.0.0/)
@@ -19,16 +19,21 @@
### Added
- [darwin] 添加Event ApplicationShouldHandleReopen以处理单击dock图标的功能 @5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
- [darwin] 添加getPrimaryScreen/getScreens的实现 @tmclane in [#2618](https://github.com/wailsapp/wails/pull/2618)
- [darwin] 添加Event ApplicationShouldHandleReopen以处理单击dock图标的功能
@5aaee9 in [#2991](https://github.com/wailsapp/wails/pull/2991)
- [darwin] 添加getPrimaryScreen/getScreens的实现 @tmclane in
[#2618](https://github.com/wailsapp/wails/pull/2618)
### Fixed
- 修复Doctor apt软件包验证问题 [Atterpac](https://github.com/Atterpac) in [#2972](https://github.com/wailsapp/wails/pull/2972)。
- 修复应用程序在退出时冻结的问题 (Darwin) @5aaee9 in [#2982](https://github.com/wailsapp/wails/pull/2982)
- 修复Windows上示例的背景颜色问题 [mmgvh](https://github.com/mmghv) in [#2750](https://github.com/wailsapp/wails/pull/2750)。
- 修复默认上下文菜单问题 [mmgvh](https://github.com/mmghv) in [#2753](https://github.com/wailsapp/wails/pull/2753)
- 修复Doctor apt软件包验证问题 [Atterpac](https://github.com/Atterpac) in
[#2972](https://github.com/wailsapp/wails/pull/2972)
- 修复应用程序在退出时冻结的问题 (Darwin) @5aaee9 in
[#2982](https://github.com/wailsapp/wails/pull/2982)
- 修复Windows上示例的背景颜色问题 [mmgvh](https://github.com/mmghv) in
[#2750](https://github.com/wailsapp/wails/pull/2750)。
- 修复默认上下文菜单问题 [mmgvh](https://github.com/mmghv) in
[#2753](https://github.com/wailsapp/wails/pull/2753)。
### Changed
@@ -36,4 +41,4 @@
### Deprecated
### Security
### Security
+101 -40
View File
@@ -1,7 +1,6 @@
# v3的更改
!!! note
这是当前的无序更改脑升级。很快它将组织成一个更易读的格式。
!!! note这是当前的无序更改脑升级。很快它将组织成一个更易读的格式。
## 选项
@@ -17,46 +16,63 @@
### 应用程序事件
应用程序事件是由应用程序发出的事件。这些事件包括macOS上`ApplicationDidFinishLaunching`等本机事件。
应用程序事件是由应用程序发出的事件。这些事件包括macOS上
`ApplicationDidFinishLaunching`等本机事件。
### 窗口事件
窗口事件是由窗口发出的事件。这些事件包括macOS上的`WindowDidBecomeMain`等本机事件。还定义了常见事件,以便它们在跨平台上工作,例如`WindowClosing`
窗口事件是由窗口发出的事件。这些事件包括macOS上的`WindowDidBecomeMain`等本机事
件。还定义了常见事件,以便它们在跨平台上工作,例如`WindowClosing`
### 自定义事件
用户定义的事件称为`WailsEvents`。这是为了将它们与用于与浏览器通信的`Event`对象区分开来。WailsEvents现在是封装事件的对象。这包括事件名称,数据和事件的源。
用户定义的事件称为`WailsEvents`。这是为了将它们与用于与浏览器通信的`Event`对象区
分开来。WailsEvents现在是封装事件的对象。这包括事件名称,数据和事件的源。
与WailsEvent关联的数据现在是单个值。如果需要多个值,则可以使用struct。
### 事件回调和`Emit`函数签名
事件回调的签名(由`On``Once``OnMultiple`使用)已更改。在v2中,回调函数接收可选数据。在v3中,回调函数接收包含与事件相关的所有数据的`WailsEvent`对象。
事件回调的签名(由`On``Once``OnMultiple`使用)已更改。在v2中,回调函数接收可
选数据。在v3中,回调函数接收包含与事件相关的所有数据的`WailsEvent`对象。
类似地,`Emit`函数已更改。它现在不再接受名称和可选数据,而是接受一`WailsEvent`对象,它将发出该对象。
类似地,`Emit`函数已更改。它现在不再接受名称和可选数据,而是接受一
`WailsEvent`对象,它将发出该对象。
### `Off``OffAll`
在v2中,`Off``OffAll`调用将删除JS和Go中的事件。由于v3具有多窗口的特性,因此已更改为这些方法仅适用于调用它们的上下文。例如,如果你在一个窗口中调用`Off`,它仅会删除该窗口的事件。如果你在Go中使用`Off`,它只会删除Go的事件。
在v2中,`Off``OffAll`调用将删除JS和Go中的事件。由于v3具有多窗口的特性,因此已
更改为这些方法仅适用于调用它们的上下文。例如,如果你在一个窗口中调用`Off`,它仅
会删除该窗口的事件。如果你在Go中使用`Off`,它只会删除Go的事件。
### Hooks
事件钩子是v3中的新功能。它们允许您钩入事件系统,并在发出某些事件时执行操作。例如,您可以钩入`WindowClosing`事件,在窗口关闭之前执行一些清理操作。钩子可以在应用程序级别或窗口级别使用`RegisterHook`进行注册。应用程序级别适用于应用程序事件。仅当窗口级别钩子与其注册的窗口一起调用。
事件钩子是v3中的新功能。它们允许您钩入事件系统,并在发出某些事件时执行操作。例
如,您可以钩入`WindowClosing`事件,在窗口关闭之前执行一些清理操作。钩子可以在应
用程序级别或窗口级别使用`RegisterHook`进行注册。应用程序级别适用于应用程序事件。
仅当窗口级别钩子与其注册的窗口一起调用。
### 日志记录
在v2中,日志记录会混淆,因为应用程序日志和系统(内部)日志都使用相同的记录器。我们已经对此进行了简化:
在v2中,日志记录会混淆,因为应用程序日志和系统(内部)日志都使用相同的记录器。我
们已经对此进行了简化:
- 内部日志现在使用标准的Go `slog`记录器处理。这是通过应用程序选项中的`logger`项进行配置的。默认情况下,这使用[tint](https://github.com/lmittmann/tint)记录器。
- 现在可以通过新的`log`插件进行应用程序日志记录,它在底层使用`slog`。此插件提供了一个简单的用于记录到控制台的API。它在Go和JS中都可用。
- 内部日志现在使用标准的Go `slog`记录器处理。这是通过应用程序选项中的`logger`
项进行配置的。默认情况下,这使用[tint](https://github.com/lmittmann/tint)记录
器。
- 现在可以通过新的`log`插件进行应用程序日志记录,它在底层使用`slog`。此插件提供
了一个简单的用于记录到控制台的API。它在Go和JS中都可用。
### 开发人员注意事项
在Go中发出事件时,它会将事件分派到本地的Go侦听器以及应用程序中的每个窗口。在JS中发出事件时,它现在会将事件发送到应用程序。这将被处理,就好像它是在Go中发出的,但是发送者ID将是窗口的ID。
在Go中发出事件时,它会将事件分派到本地的Go侦听器以及应用程序中的每个窗口。在JS中
发出事件时,它现在会将事件发送到应用程序。这将被处理,就好像它是在Go中发出的,但
是发送者ID将是窗口的ID。
## 窗口
Window API在很大程度上保持不变,但方法现在是在窗口实例而不是运行时上。一些值得注意的变化是:
Window API在很大程度上保持不变,但方法现在是在窗口实例而不是运行时上。一些值得注
意的变化是:
- 窗口现在具有标识它们的名称。用于在发出事件时标识窗口。
- 窗口上现在有更多以前不可用的方法,例如`AbsolutePosition``ToggleDevTools`
@@ -64,11 +80,14 @@ Window API在很大程度上保持不变,但方法现在是在窗口实例而
## 剪切板
剪贴板API已经简化。现在有一个单独的`Clipboard`对象,可以用于读取和写入剪贴板。`Clipboard`对象在Go和JS中都可用。`SetText()`用于设置文本,`Text()`用于获取文本。
剪贴板API已经简化。现在有一个单独的`Clipboard`对象,可以用于读取和写入剪贴
板。`Clipboard`对象在Go和JS中都可用。`SetText()`用于设置文本,`Text()`用于获取文
本。
## 绑定
绑定的工作方式与v2类似,通过提供一种将结构方法绑定到前端的方式。这些可以在前端使用由`wails3 generate bindings`命令生成的绑定包装器来调用:
绑定的工作方式与v2类似,通过提供一种将结构方法绑定到前端的方式。这些可以在前端使
用由`wails3 generate bindings`命令生成的绑定包装器来调用:
```javascript
// @ts-check
@@ -103,7 +122,12 @@ window.go.main = {
};
```
默认情况下,绑定的方法是混淆的,并使用uint32 ID进行标识,该ID是使用[FNV哈希算法](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)计算的。这是为了防止方法名称在生产构建中被暴露出来。在调试模式下,方法ID与计算的方法ID一起记录,以帮助调试。如果您希望增加额外的混淆层,可以使用`BindAliases`选项。这允许您指定别名ID与方法ID的映射。当前端使用ID调用方法时,方法ID将首先在别名映射中查找匹配项。如果找不到,它将假定是标准方法ID,并尝试以通常的方式查找方法。
默认情况下,绑定的方法是混淆的,并使用uint32 ID进行标识,该ID是使
用[FNV哈希算法](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function)计
算的。这是为了防止方法名称在生产构建中被暴露出来。在调试模式下,方法ID与计算的方
法ID一起记录,以帮助调试。如果您希望增加额外的混淆层,可以使用`BindAliases`
项。这允许您指定别名ID与方法ID的映射。当前端使用ID调用方法时,方法ID将首先在别名
映射中查找匹配项。如果找不到,它将假定是标准方法ID,并尝试以通常的方式查找方法。
示例:
@@ -129,7 +153,10 @@ window.go.main = {
### 不安全调用
如果您不介意在二进制文件中以明文形式提供调用,并且不打算使用[garble](https://github.com/burrowers/garble),那么可以使用不安全的`wails.CallByName()`方法。此方法接受要调用的方法的完全限定名称和要传递给它的参数。示例:
如果您不介意在二进制文件中以明文形式提供调用,并且不打算使
用[garble](https://github.com/burrowers/garble),那么可以使用不安全
`wails.CallByName()`方法。此方法接受要调用的方法的完全限定名称和要传递给它的参
数。示例:
```go
wails.CallByName("main.GreetService.Greet", "world!")
@@ -145,7 +172,9 @@ window.go.main = {
### Windows
Windows中的对话框按钮是不可配置的,根据对话框的类型是恒定的。要在按下按钮时触发回调,请创建一个具有与您希望附加回调的按钮相同名称的按钮。示例:创建一个标签为“确定”的按钮,并使用`OnClick()`方法设置回调方法:
Windows中的对话框按钮是不可配置的,根据对话框的类型是恒定的。要在按下按钮时触发
回调,请创建一个具有与您希望附加回调的按钮相同名称的按钮。示例:创建一个标签为“
确定”的按钮,并使用`OnClick()`方法设置回调方法:
```go
dialog := app.QuestionDialog().
@@ -163,19 +192,29 @@ Windows中的对话框按钮是不可配置的,根据对话框的类型是恒
## 拖放
可以按窗口启用本机拖放。只需将`EnableDragAndDrop`窗口配置选项设置为`true`,窗口将允许将文件拖放到其上。当这种情况发生时,将发出`events.FilesDropped`事件。然后可以使用`WindowEvent.Context()`中的`DroppedFiles()`方法检索文件名。这将返回一个包含文件名的字符串切片。
可以按窗口启用本机拖放。只需将`EnableDragAndDrop`窗口配置选项设置为`true`,窗口
将允许将文件拖放到其上。当这种情况发生时,将发出`events.FilesDropped`事件。然后
可以使用`WindowEvent.Context()`中的`DroppedFiles()`方法检索文件名。这将返回一个
包含文件名的字符串切片。
## 上下文菜单
上下文菜单是当用户右键单击元素时显示的上下文菜单。创建上下文菜单与创建标准菜单相同,使用`app.NewMenu()`。要使上下文菜单对窗口可用,请调用`window.RegisterContextMenu(name, menu)`。名称将是上下文菜单的ID,并由前端使用。
上下文菜单是当用户右键单击元素时显示的上下文菜单。创建上下文菜单与创建标准菜单相
同,使用`app.NewMenu()`。要使上下文菜单对窗口可用,请调
`window.RegisterContextMenu(name, menu)`。名称将是上下文菜单的ID,并由前端使
用。
要指示元素具有上下文菜单,请将`data-contextmenu`属性添加到元素。此属性的值应为先前在窗口中注册的上下文菜单的名称。
要指示元素具有上下文菜单,请将`data-contextmenu`属性添加到元素。此属性的值应为先
前在窗口中注册的上下文菜单的名称。
可以在应用程序级别注册上下文菜单,使其对所有窗口可用。可以使`app.RegisterContextMenu(name, menu)`完成此操作。如果在窗口级别找不到上下文菜单,则将检查应用程序上下文菜单。`v3/examples/contextmenus`中可以找到此演示。
可以在应用程序级别注册上下文菜单,使其对所有窗口可用。可以使
`app.RegisterContextMenu(name, menu)`完成此操作。如果在窗口级别找不到上下文菜
单,则将检查应用程序上下文菜单。`v3/examples/contextmenus`中可以找到此演示。
## Wails标记语言(WML
Wails标记语言是一种简单的标记语言,允许您在没有JavaScript的情况下向标准HTML元素添加功能。
Wails标记语言是一种简单的标记语言,允许您在没有JavaScript的情况下向标准HTML元素
添加功能。
当前支持以下标签:
@@ -189,7 +228,8 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
<button data-wml-event="myevent">Click Me</button>
```
有时您需要用户确认操作。可以通过向元素添加`data-wml-confirm`属性来完成。此属性的值将是要显示给用户的消息。
有时您需要用户确认操作。可以通过向元素添加`data-wml-confirm`属性来完成。此属性的
值将是要显示给用户的消息。
示例:
@@ -201,7 +241,8 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
### `data-wml-window`
可以通过将`data-wml-window`属性添加到元素中来调用任何`wails.window`方法。属性的值应为要调用的方法的名称。方法名称应与导出的方法的名称完全匹配。
可以通过将`data-wml-window`属性添加到元素中来调用任何`wails.window`方法。属性的
值应为要调用的方法的名称。方法名称应与导出的方法的名称完全匹配。
```html
<button data-wml-window="Close">Close Window</button>
@@ -219,12 +260,15 @@ Wails标记语言是一种简单的标记语言,允许您在没有JavaScript
## 系统托盘
Wails 3附带了一个内置的系统托盘。这是一个完全功能的系统托盘,旨在尽可能简单地使用。可以设置托盘的图标、工具提示和菜单。还可以“附加”窗口到系统托盘。这样做将提供以下功能:
Wails 3附带了一个内置的系统托盘。这是一个完全功能的系统托盘,旨在尽可能简单地使
用。可以设置托盘的图标、工具提示和菜单。还可以“附加”窗口到系统托盘。这样做将提供
以下功能:
- 单击托盘图标会切换窗口可见性
- 右键单击托盘将打开菜单(如果有)
在macOS上,如果没有附加的窗口,则托盘将使用显示菜单的默认方法(任何按钮)。如果有附加的窗口但没有菜单,则托盘将切换窗口,而不管按下的按钮如何。
在macOS上,如果没有附加的窗口,则托盘将使用显示菜单的默认方法(任何按钮)。如果
有附加的窗口但没有菜单,则托盘将切换窗口,而不管按下的按钮如何。
## 插件
@@ -246,13 +290,16 @@ type Plugin interface {
`Name()`方法返回插件的名称。这用于记录目的。
`Init(*application.App) error`方法在加载插件时调用。`*application.App`参数是加载插件的应用程序。任何错误都将阻止应用程序启动。
`Init(*application.App) error`方法在加载插件时调用。`*application.App`参数是加载
插件的应用程序。任何错误都将阻止应用程序启动。
`Shutdown()`方法在应用程序关闭时调用。
`CallableByJS()`方法返回可以从前端调用的导出函数列表。这些方法名称必须与插件导出的方法名称完全匹配。
`CallableByJS()`方法返回可以从前端调用的导出函数列表。这些方法名称必须与插件导出
的方法名称完全匹配。
`InjectJS()`方法返回应注入到创建的所有窗口中的JavaScript。这对于添加与插件补充的自定义JavaScript函数很有用。
`InjectJS()`方法返回应注入到创建的所有窗口中的JavaScript。这对于添加与插件补充的
自定义JavaScript函数很有用。
### 提示
@@ -270,7 +317,8 @@ const (
)
```
由于Go和JavaScript之间的不兼容性,无法以这种方式使用自定义类型。最好的策略是为float64使用类型别名:
由于Go和JavaScript之间的不兼容性,无法以这种方式使用自定义类型。最好的策略是为
float64使用类型别名:
```go
type MyEnum = float64
@@ -293,7 +341,8 @@ const MyEnum = {
```
- 为什么使用`float64`?不能使用`int`吗?
- 因为JavaScript没有“int”的概念。一切都是`number`,在Go中会转换为`float64`。Go的反射包中还有类型转换的限制,这意味着使用`int`是行不通的。
- 因为JavaScript没有“int”的概念。一切都是`number`,在Go中会转换为`float64`。Go
的反射包中还有类型转换的限制,这意味着使用`int`是行不通的。
### BackgroundColour
@@ -301,13 +350,16 @@ const MyEnum = {
### WindowIsTranslucent
已删除此标志。现在有一个`BackgroundType`标志,可用于设置窗口应具有的背景类型。此标志可以设置为以下任何值:
已删除此标志。现在有一个`BackgroundType`标志,可用于设置窗口应具有的背景类型。此
标志可以设置为以下任何值:
- `BackgroundTypeSolid` - 窗口将具有实心背景
- `BackgroundTypeTransparent` - 窗口将具有透明背景
- `BackgroundTypeTranslucent` - 窗口将具有半透明背景
在Windows上,如果`BackgroundType`设置为`BackgroundTypeTranslucent`,则可以使`WindowsWindow`选项中的`BackdropType`标志设置透明度的类型。这可以设置为以下任何值:
在Windows上,如果`BackgroundType`设置为`BackgroundTypeTranslucent`,则可以使
`WindowsWindow`选项中的`BackdropType`标志设置透明度的类型。这可以设置为以下任
何值:
- `Auto` - 窗口将使用系统确定的效果
- `None` - 窗口没有背景
@@ -319,23 +371,32 @@ const MyEnum = {
### WndProcInterceptor
如果设置了此标志,将拦截WndProc并调用该函数。这允许您直接处理Windows消息。该函数应具有以下签名:
如果设置了此标志,将拦截WndProc并调用该函数。这允许您直接处理Windows消息。该函数
应具有以下签名:
```go
func(hwnd uintptr, msg uint32, wParam, lParam uintptr) (returnValue uintptr, shouldReturn)
```
如果`shouldReturn`值设置为`true`,则`returnValue`将由主wndProc方法返回。如果设置`false`,将忽略返回值,并且消息将继续由主wndProc方法处理。
如果`shouldReturn`值设置为`true`,则`returnValue`将由主wndProc方法返回。如果设置
`false`,将忽略返回值,并且消息将继续由主wndProc方法处理。
## 在关闭时隐藏窗口+OnBeforeClose
在v2中,有一个`HideWindowOnClose`标志,用于在关闭窗口时隐藏窗口。`HideWindowOnClose`标志与`OnBeforeClose`回调之间存在逻辑重叠。在v3中,已删除`HideWindowOnClose`标志,并将`OnBeforeClose`回调重命名为`ShouldClose`。当用户尝试关闭窗口时,将调用`ShouldClose`回调。如果回调返回`true`,窗口将关闭。如果返回`false`,窗口将不会关闭。这可以用于隐藏窗口而不是关闭窗口。
在v2中,有一个`HideWindowOnClose`标志,用于在关闭窗口时隐藏窗
口。`HideWindowOnClose`标志与`OnBeforeClose`回调之间存在逻辑重叠。在v3中,已删
`HideWindowOnClose`标志,并将`OnBeforeClose`回调重命名为`ShouldClose`。当用户
尝试关闭窗口时,将调用`ShouldClose`回调。如果回调返回`true`,窗口将关闭。如果返
`false`,窗口将不会关闭。这可以用于隐藏窗口而不是关闭窗口。
## 窗口拖动
在v2中,使用`--wails-drag`属性来指示可以使用元素拖动窗口。在v3中,已将其替换`--webkit-app-region`,以更符合其他框架处理方式。`--webkit-app-region`属性可以设置为以下任何值:
在v2中,使用`--wails-drag`属性来指示可以使用元素拖动窗口。在v3中,已将其替换
`--webkit-app-region`,以更符合其他框架处理方式。`--webkit-app-region`属性可以
设置为以下任何值:
- `drag` - 可使用该元素拖动窗口
- `no-drag` - 该元素无法用于拖动窗口
我们本来希望使用`app-region`,但是在webkit在macOS上的`getComputedStyle`调用不支持它。
我们本来希望使用`app-region`,但是在webkit在macOS上的`getComputedStyle`调用不支
持它。
@@ -9,13 +9,16 @@
- Git 克隆此存储库。切换到 `v3-alpha` 分支。
- 安装 CLI`cd v3/cmd/wails3 && go install`
- 可选:如果您想要使用构建系统构建前端代码,您需要安装 [npm](https://nodejs.org/en/download)。
- 可选:如果您想要使用构建系统构建前端代码,您需要安装
[npm](https://nodejs.org/en/download)。
## 构建
对于简单的程序,您可以使用标准的 `go build` 命令。也可以使用 `go run`
Wails 还配备了一个构建系统,可用于构建更复杂的项目。它使用了强大的 [Task](https://taskfile.dev) 构建系统。要了解更多信息,请查看任务主页或运行 `wails task --help`
Wails 还配备了一个构建系统,可用于构建更复杂的项目。它使用了强大的
[Task](https://taskfile.dev) 构建系统。要了解更多信息,请查看任务主页或运行
`wails task --help`
## 项目结构
@@ -42,13 +45,18 @@ Wails 还配备了一个构建系统,可用于构建更复杂的项目。它
### 添加窗口功能
添加窗口功能的首选方法是在 `pkg/application/webview_window.go` 文件中添加一个新函数。这应该实现所有平台所需的功能。任何特定于平台的代码都应通过 `webviewWindowImpl` 接口方法调用。该接口由每个目标平台实现,以提供平台特定的功能。在某些情况下,这可能不执行任何操作。添加接口方法后,请确保每个平台都实现了它。一个很好的例子是 `SetMinSize` 方法。
添加窗口功能的首选方法是在 `pkg/application/webview_window.go` 文件中添加一个新
函数。这应该实现所有平台所需的功能。任何特定于平台的代码都应通过
`webviewWindowImpl` 接口方法调用。该接口由每个目标平台实现,以提供平台特定的功
能。在某些情况下,这可能不执行任何操作。添加接口方法后,请确保每个平台都实现了
它。一个很好的例子是 `SetMinSize` 方法。
- Mac: `webview_window_darwin.go`
- Windows: `webview_window_windows.go`
- Linux: `webview_window_linux.go`
大多数,如果不是全部,特定于平台的代码应在主线程上运行。为了简化这一点,在 `application.go` 中定义了一些 `invokeSync` 方法。
大多数,如果不是全部,特定于平台的代码应在主线程上运行。为了简化这一点,在
`application.go` 中定义了一些 `invokeSync` 方法。
### 更新运行时
@@ -65,9 +73,12 @@ wails3 task runtime:build
- 将事件添加到 `events.txt` 文件中
- 运行 `wails3 task events:generate`
有几种类型的事件:特定于平台的应用程序和窗口事件 + 通用事件。通用事件对于跨平台事件处理很有用,但您不必局限于“最低公共分母”。如果需要,可以使用特定于平台的事件。
有几种类型的事件:特定于平台的应用程序和窗口事件 + 通用事件。通用事件对于跨平台
事件处理很有用,但您不必局限于“最低公共分母”。如果需要,可以使用特定于平台的事
件。
添加通用事件时,请确保映射了特定于平台的事件。一个示例是在 `window_webview_darwin.go` 中:
添加通用事件时,请确保映射了特定于平台的事件。一个示例是在
`window_webview_darwin.go` 中:
```go
// 将 ShouldClose 转化为通用的 WindowClosing 事件
@@ -98,19 +109,24 @@ type Plugin interface {
`Name()` 方法返回插件的名称。这用于日志记录。
`Init(*application.App) error` 方法在加载插件时调用。`*application.App` 参数是加载插件的应用程序。任何错误都将阻止应用程序启动。
`Init(*application.App) error` 方法在加载插件时调用。`*application.App` 参数是加
载插件的应用程序。任何错误都将阻止应用程序启动。
`Shutdown()` 方法在应用程序关闭时调用。
`CallableByJS()` 方法返回可以从前端调用的导出函数列表。这些方法的名称必须与插件导出的方法的名称完全匹配。
`CallableByJS()` 方法返回可以从前端调用的导出函数列表。这些方法的名称必须与插件
导出的方法的名称完全匹配。
`InjectJS()` 方法返回应注入到所有窗口中的 JavaScript。这对于添加与插件相补充的自定义 JavaScript 函数非常有用。
`InjectJS()` 方法返回应注入到所有窗口中的 JavaScript。这对于添加与插件相补充的自
定义 JavaScript 函数非常有用。
内置插件可以在 `v3/plugins` 目录中找到。参考它们以获得灵感。
## 任务
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行 `Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在 `v3/internal/commands/task.go` 中。
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行
`Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在
`v3/internal/commands/task.go` 中。
### 升级 Taskfile
@@ -124,7 +140,8 @@ wails3 task taskfile:upgrade
如果存在不兼容性,则应在 `v3/internal/commands/task.go` 文件中显示。
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存储库,并查看 git 历史记录以确定发生了什么变化以及原因。
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存
储库,并查看 git 历史记录以确定发生了什么变化以及原因。
要检查所有更改是否正确工作,请重新安装 CLI 并再次检查版本:
@@ -135,13 +152,17 @@ wails3 task -version
## 打开 PR
确保所有 PR 都有与之关联的工单,以提供更改的上下文。如果没有工单,请先创建一个。确保所有 PR 都已使用所做的更改更新了 CHANGELOG.md 文件。CHANGELOG.md 文件位于 `mkdocs-website/docs` 目录中。
确保所有 PR 都有与之关联的工单,以提供更改的上下文。如果没有工单,请先创建一个。
确保所有 PR 都已使用所做的更改更新了 CHANGELOG.md 文件。CHANGELOG.md 文件位于
`mkdocs-website/docs` 目录中。
## 其他任务
### 升级 Taskfile
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行 `Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在 `v3/internal/commands/task.go` 中。
Wails CLI 使用 [Task](https://taskfile.dev) 构建系统。它作为库导入并用于运行
`Taskfile.yaml` 中定义的任务。与 Task 的主要交互发生在
`v3/internal/commands/task.go` 中。
要检查是否有 Taskfile 的升级,请运行 `wails3 task -version` 并检查 Task 网站。
@@ -153,11 +174,12 @@ wails3 task taskfile:upgrade
如果存在不兼容性,则应在 `v3/internal/commands/task.go` 文件中显示。
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存储库,并查看 git 历史记录以确定发生了什么变化以及原因。
通常,修复不兼容性的最佳方法是克隆 `https://github.com/go-task/task` 上的任务存
储库,并查看 git 历史记录以确定发生了什么变化以及原因。
要检查所有更改是否正确工作,请重新安装 CLI 并再次检查版本:
```shell
wails3 task cli:install
wails3 task -version
```
```
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,7 @@
# 反馈
我们欢迎(并鼓励)您的反馈!在创建新的反馈之前,请先搜索现有的票据或帖子。
以下是提供反馈的不同方式:
我们欢迎(并鼓励)您的反馈!在创建新的反馈之前,请先搜索现有的票据或帖子。以下是
提供反馈的不同方式:
=== "错误"
@@ -35,7 +35,8 @@
- 请*不要*只添加"+1"或"me too"等评论。
- 如果帖子还有更多内容可补充,请随时发表评论,例如"此错误也影响ARM构建"或"另一种选项是......"
已知问题和正在进行的工作列表可以在[此处](https://github.com/orgs/wailsapp/projects/6)找到。
已知问题和正在进行的工作列表可以
在[此处](https://github.com/orgs/wailsapp/projects/6)找到。
## 我们寻求反馈的内容
@@ -55,4 +56,4 @@
- 哪些功能缺失?
- 哪些功能是不需要的?
- 文档
- 有什么可以更清晰的地方?
- 有什么可以更清晰的地方?
@@ -65,7 +65,8 @@ go install
## 系统检查
运行`wails3 doctor`将检查您是否安装了正确的依赖项。如果没有安装,它将提供缺失的内容,并帮助您解决任何问题。
运行`wails3 doctor`将检查您是否安装了正确的依赖项。如果没有安装,它将提供缺失的
内容,并帮助您解决任何问题。
## 看起来缺少`wails3`命令?
@@ -73,4 +74,4 @@ go install
- 确保您已正确按照Go安装指南进行操作。
- 检查`go/bin`目录是否在`PATH`环境变量中。
- 关闭/重新打开当前终端以使用新的`PATH`变量。
- 关闭/重新打开当前终端以使用新的`PATH`变量。

Some files were not shown because too many files have changed in this diff Show More