Compare commits

...

426 Commits

Author SHA1 Message Date
Lea Anthony 0394bcaea7 mac keypress WIP 2023-09-20 20:35:35 +10:00
Lea Anthony 793191a479 Initial key binding support 2023-09-17 20:48:30 +10:00
Lea Anthony efc86c1056 Delete wails binary 2023-09-16 15:00:20 +10:00
Lea Anthony 39d44d2644 Merge latest website changes 2023-09-16 14:58:24 +10:00
Lea Anthony 9584a2ce5a Merge latest v2 changes 2023-09-16 14:56:23 +10:00
Lea Anthony 95b8ceb87a Merge remote-tracking branch 'origin/master' into v3-alpha 2023-09-16 14:44:57 +10:00
ALMAS 37b99b9cb8 Update webview_window.go (#2912) 2023-09-16 07:20:49 +10:00
Lea Anthony 3116c1a622 Update favicon.ico 2023-09-15 20:47:14 +10:00
Lea Anthony 86354e9fc0 Support IsDarkMode in application event context. Fix bug with event mapping. 2023-09-15 20:10:09 +10:00
Lea Anthony b49f135e31 Add context to application/common events 2023-09-15 17:12:35 +10:00
github-actions[bot] c26f3ad7d1 chore: update sponsors.svg (#2909)
Co-authored-by: leaanthony <leaanthony@users.noreply.github.com>
2023-09-15 16:35:00 +10:00
github-actions[bot] 40f645a864 chore: update sponsors.svg (#2903)
Co-authored-by: leaanthony <leaanthony@users.noreply.github.com>
2023-09-14 08:33:15 +10:00
Travis McLane fff266f50d [v3 linux] remove unused dialog callbacks
If it turns out these are needed in the future
we can add them back in then.
2023-09-13 13:12:22 -05:00
Travis McLane 7cfea7c22c [v3 linux] file/directory dialogs 2023-09-13 13:12:22 -05:00
Travis McLane 6141e5a8ce [linux v3] purego: updates
- file/directory chooser dialog logic
- add name + css so that menu isn't transparent
2023-09-13 13:12:22 -05:00
Lea Anthony ed58949d24 try logging in goroutine 2023-09-13 16:47:14 +10:00
Lea Anthony c1d85bd3d9 Add generate constants tool 2023-09-13 16:45:19 +10:00
Lea Anthony 8d3324465e Revert flags change 2023-09-13 16:11:23 +10:00
Lea Anthony 8c72746edb Update log plugin to have log levels. 2023-09-13 09:45:26 +10:00
Lea Anthony ea3509d2e7 Add LogLevel application option. Update log plugin to have log levels. 2023-09-13 09:44:37 +10:00
Lea Anthony bb3a0cc54f Add WebviewWindow.IsFocused() 2023-09-13 08:57:20 +10:00
Travis McLane d808654d99 [v3 linux] update purego replace 2023-09-11 17:27:21 -05:00
Travis McLane a6cfdbb403 [v3 linux] const -> var 2023-09-11 17:26:59 -05:00
Travis McLane 2f7c6834d0 [v3 linux] use invokeSync 2023-09-11 17:12:57 -05:00
Travis McLane ebdd57a7c4 remove cmd/wails/wails binary 2023-09-11 17:12:57 -05:00
Lea Anthony 4ff6d74054 Remove plain template 2023-09-09 20:08:26 +10:00
Lea Anthony 0d8b4aafd5 Better vanilla taskfile. Better asset generation at init. 2023-09-09 17:31:48 +10:00
Lea Anthony 0cca7e9189 Fix syso tests. Add precommit task 2023-09-09 16:27:51 +10:00
Lea Anthony a5812578c5 Add generate build-assets. Update Taskfile for vanilla template 2023-09-09 10:25:56 +10:00
Lea Anthony 350b411afe Update what's new section 2023-09-08 20:18:50 +10:00
Lea Anthony 9ca86c6093 Fix template versions 2023-09-08 18:51:39 +10:00
Lea Anthony 01729ae22a Add what's new section 2023-09-08 18:45:42 +10:00
Lea Anthony 9196dc2216 Remove ci flag 2023-09-08 14:49:50 +10:00
Lea Anthony b925335bbb Fix tests 2023-09-08 14:37:07 +10:00
Lea Anthony 965f939967 Fix parser/generator tests 2023-09-08 12:03:55 +10:00
Lea Anthony 00feccbb77 Add MACOSX_DEPLOYMENT_TARGET to taskfiles 2023-09-08 11:23:38 +10:00
Lea Anthony b6fc66ba0d Improve workflow 2023-09-08 11:09:32 +10:00
Lea Anthony c40debc0e9 Disable linux tests 2023-09-08 11:04:59 +10:00
Lea Anthony 3b31d70865 Update doc dependencies 2023-09-08 11:00:15 +10:00
Lea Anthony afa8b62de7 Update doc dependencies 2023-09-08 10:57:47 +10:00
Lea Anthony 70fd15de2d fix workflow 2023-09-08 10:42:13 +10:00
Lea Anthony c54d330f89 fix workflow 2023-09-08 10:39:29 +10:00
Lea Anthony 4028560d12 fix workflow 2023-09-08 10:37:45 +10:00
Lea Anthony 3c28c28623 fix workflow 2023-09-08 10:36:48 +10:00
Lea Anthony a958fa06e7 Update docs 2023-09-08 10:31:16 +10:00
Lea Anthony 4d39e9e15a Update v3-docs.yml 2023-09-08 10:27:32 +10:00
Lea Anthony 679ec49e64 add v3 docs workflow 2023-09-08 10:24:01 +10:00
Travis McLane d98e1d3693 [v3 linux] Packagemap -> packagemap 2023-09-07 12:16:20 -05:00
Lea Anthony be3b7d754e add netlify config 2023-09-07 21:55:45 +10:00
Lea Anthony ae524c4f84 add workflow for v3 alpha 2023-09-07 21:37:50 +10:00
Lea Anthony d390cac8db Fix EnableFraudulentWebsiteWarnings for mac 2023-09-07 21:33:11 +10:00
Lea Anthony 17e20ab029 [v3] Fix requirements.txt 2023-09-07 07:52:18 +10:00
Lea Anthony 34b9b9b508 Add status table to docs. 2023-09-06 20:59:45 +10:00
Lea Anthony 47fd06a445 More doc changes 2023-09-06 19:15:52 +10:00
Lea Anthony b140ce546f Add CPU detection in mac 2023-09-05 23:14:18 +10:00
Lea Anthony 08ec2beb7c Move menu to Windows window options. 2023-09-05 22:27:47 +10:00
Lea Anthony 5833f0f109 More docs. 2023-09-05 18:26:10 +10:00
Lea Anthony eb2ad258ed More docs. 2023-09-04 22:51:21 +10:00
ALMAS 708aef53e4 [v3] completing missing build tags (#2884)
* Update image.go

* Update popupmenu.go
2023-09-04 22:43:28 +10:00
Lea Anthony e893c1c205 More docs. 2023-09-04 22:40:40 +10:00
Lea Anthony 3e74255127 Update docs. 2023-09-04 21:27:59 +10:00
Lea Anthony b8d7eed607 Add awful CallByName method and update docs with warning. 2023-09-04 21:19:10 +10:00
Lea Anthony 8eb62fb483 Update bindings example 2023-09-04 21:01:00 +10:00
Lea Anthony ee67bff9e3 Docs update 2023-09-04 20:50:32 +10:00
Lea Anthony 21e47dcccf Fix version in debug build 2023-09-04 19:51:48 +10:00
Lea Anthony 38ddcf59f8 Support linux in doctor 2023-09-04 19:46:07 +10:00
Lea Anthony 4a62b6a5c7 Support Mac in wails doctor 2023-09-03 10:30:31 +10:00
Lea Anthony 6afbcb69f3 Improve doctor 2023-09-03 10:09:16 +10:00
Lea Anthony 4bb522d303 Add doctor. 2023-09-03 08:42:12 +10:00
Lea Anthony f107173a73 Update README.md 2023-09-03 06:53:10 +10:00
Lea Anthony eb5aff755f Update docs 2023-09-02 15:12:35 +10:00
Lea Anthony 2384ae0819 Improve docs tooling 2023-09-02 09:10:35 +10:00
Lea Anthony 4a5663c1cb Merge branch 'master' into v3-alpha 2023-09-02 08:38:48 +10:00
Travis McLane 9416e01042 [v3 linux] start_at_login initial implementation 2023-09-01 16:04:25 -05:00
Travis McLane 54fcacfed1 [v3 linux] correct transparency setting 2023-09-01 15:57:13 -05:00
Lea Anthony 69ac5caa4b Fix production build 2023-09-01 22:06:43 +10:00
Lea Anthony cecbc156d5 Update deps 2023-09-01 20:14:06 +10:00
Lea Anthony 8ca550cc9e [v3] Add swipe gesture support 2023-08-30 20:57:12 +10:00
Lea Anthony d44c8eba1c [v3] Use system logger instead of println 2023-08-28 20:30:40 +10:00
Lea Anthony 6edd667bdf [v3] Fix application runtime mappings 2023-08-28 20:29:25 +10:00
Vilsol 499ff50903 fix: use string formatting in gtk_message_dialog_new (#2865) 2023-08-28 19:34:24 +10:00
Lea Anthony 5e1f29eda3 [v3] Support //wails:methodID <uint32> directive in bound method comments. 2023-08-27 21:16:30 +10:00
Lea Anthony e5571defb7 [v3] Support bound methodID aliases. Support []any for bindings generation. Use CallByID in bindings. 2023-08-27 20:39:35 +10:00
Lea Anthony 125d8a6f78 [v3] Update Task to v3.29.1. 2023-08-27 17:14:36 +10:00
Lea Anthony 21790dc3ee [v3] Add CallByID method to runtime. 2023-08-27 16:59:18 +10:00
Lea Anthony cdf48e0589 [v3] Fix bindings 2023-08-27 15:54:01 +10:00
Travis McLane 2f9f63771b [v3 examples] add README 2023-08-25 09:39:24 -05:00
Lea Anthony 93335b3843 [v3] Support ANSI label on Mac. Update example. 2023-08-25 06:53:08 +10:00
Travis McLane f50c8f447e [v3 assetserver] cleanup logging
- remove type assertions
- update contentTypeSniffer to capture the status code
- move logic in ServeHTTP to serveHTTP
- wrap serveHTTP with ServeHTTP adding logging & duration calculation
2023-08-24 12:44:13 -05:00
Travis McLane bd9f7deb98 [v3 linux] correct minimum zoom 2023-08-23 14:10:22 -05:00
Travis McLane 2171192934 [v3 linux] noop: remove println 2023-08-23 14:09:44 -05:00
Lea Anthony 3352ebef6e [v3] Tidy up logging 2023-08-19 17:15:15 +10:00
Lea Anthony 2a51ddadfc [v3] Tidy up plugin init 2023-08-19 17:09:38 +10:00
Lea Anthony 0745aea4d6 [v3] Move to integer call ids for bound methods. 2023-08-19 14:25:36 +10:00
Travis McLane 4804b34208 [v3 linux] api changes (#2830) 2023-08-19 06:12:34 +10:00
Lea Anthony 841289f1d1 [v3 windows] Support isDarkMode. Add common application event mapping 2023-08-18 19:50:57 +10:00
Lea Anthony c367ef461e [v3 windows] Support isDarkMode 2023-08-18 19:45:59 +10:00
Lea Anthony ffed41553a [v3 mac] Add IsDarkMode to application and JS runtime. Add Common.ThemeChanged event 2023-08-18 17:36:14 +10:00
Lea Anthony 79deb37675 Fix return code in logging 2023-08-18 11:15:02 +10:00
Lea Anthony 77ca8fe9e6 Move webview2 options to application. Improve logging. 2023-08-18 11:06:25 +10:00
Lea Anthony 25e58edf28 [v3] Add dev example 2023-08-18 10:51:02 +10:00
Lea Anthony 0f2d19c56e Merge remote-tracking branch 'origin/v3-alpha' into v3-alpha
# Conflicts:
#	v3/internal/operatingsystem/os.go
#	v3/internal/operatingsystem/os_darwin.go
2023-08-18 10:36:01 +10:00
Lea Anthony 8bde3d7522 [v3 mac] Improved operating system detection 2023-08-18 10:34:32 +10:00
Lea Anthony c169d26d95 [v3] Port operating system detection 2023-08-18 10:24:45 +10:00
Lea Anthony 946a4c56a0 [v3 mac] Better logging 2023-08-18 09:58:43 +10:00
Lea Anthony 23e87e0ad7 Add dev tasks to Taskfile template 2023-08-15 21:48:04 +10:00
Lea Anthony 7d678154c6 Example prod/debug options 2023-08-15 21:40:50 +10:00
Lea Anthony 0b9fec3f87 Add checkport tool for checking open ports 2023-08-15 21:40:01 +10:00
Lea Anthony 763c7708f4 Fix HMR. Better logging. 2023-08-15 20:19:02 +10:00
Lea Anthony 5f2c1f4534 Remove optional prod options - use build tags instead 2023-08-15 20:19:02 +10:00
Lea Anthony 3ac557ccb1 [v3] plugin.toml -> plugin.yaml 2023-08-15 06:39:55 +10:00
Lea Anthony e6c691a376 Support external asset server 2023-08-14 20:49:09 +10:00
Lea Anthony ee8eb001c2 Merge branch 'master' into v3-alpha
# Conflicts:
#	v2/internal/frontend/desktop/windows/go-webview2/webviewloader/env_create.go
2023-08-14 18:08:52 +10:00
Lea Anthony db836b7a48 Move assetserver to internal 2023-08-14 08:31:55 +10:00
Lea Anthony 543b18dd54 Revert v3 changes in v2 asset server 2023-08-14 08:28:32 +10:00
Lea Anthony ec0731d5d8 Use slog.Logged in assethandler_external.go. Refactor runtime handler. 2023-08-14 08:28:31 +10:00
Lea Anthony cc5c7d1d29 Log git hash if using replaced module 2023-08-14 08:28:25 +10:00
Lea Anthony e79c1b7ea3 Merge remote-tracking branch 'origin/v3-alpha' into v3-alpha 2023-08-13 20:43:07 +10:00
Lea Anthony 6cbead5bfe Improved logging++ 2023-08-13 16:52:39 +10:00
Lea Anthony 429bb2bf17 Refactor application creation. Remove internal logger package. 2023-08-13 15:28:30 +10:00
Lea Anthony c03c41cb21 Add version command 2023-08-13 15:13:01 +10:00
Lea Anthony ee29faecbf Log if native Go webview loader is used 2023-08-12 16:36:08 +10:00
Lea Anthony d1d0105276 Remove jsonBindings option. Only add ipc in debug mode. 2023-08-12 14:57:01 +10:00
Lea Anthony 1059e36b52 Run go mod tidy on project creation. Use better method of relative module location. 2023-08-12 14:32:52 +10:00
Lea Anthony 15f602f867 Move v2 assetserver to v3 2023-08-12 14:16:53 +10:00
Lea Anthony 13be4a333f Move to slog logger for application and log plugin 2023-08-10 22:04:13 +10:00
Lea Anthony 2553fa1f74 Update templates to use Go 1.21 2023-08-10 21:32:18 +10:00
Lea Anthony f0f5011484 Remove log from runtime (there's a plugin for that) 2023-08-10 21:29:42 +10:00
Lea Anthony 5671f3527b Add ProductionOverrides option so any option can be overridden in production builds 2023-08-10 20:42:25 +10:00
Lea Anthony adb26fa99f Add Hook doc 2023-08-10 19:57:12 +10:00
Lea Anthony 805429a7c6 Support remote templates 2023-08-09 21:53:10 +10:00
Lea Anthony 39af86e59d Improve project creation.
Add `template.json` to templates.
Update dependencies.
2023-08-09 21:30:06 +10:00
Lea Anthony ecf970d6fe [v3 mac] ANSI systray label [WIP] 2023-08-05 14:04:49 +10:00
Lea Anthony c9ce17a4d5 [v3] Fix Assets options in templates 2023-07-21 08:24:38 +10:00
stffabi a6e279f0d3 [v3 panicHandler] Let the default go panic handler handle the panic if there's no panicHandler set in options 2023-07-15 23:57:19 +02:00
stffabi 842bc3733e [v3 windows] Fix missing panic stacktraces during message loop 2023-07-15 23:56:26 +02:00
Lea Anthony 5e76a5e76a [v3 mac] Fix event callback signatures 2023-07-12 21:29:01 +10:00
Lea Anthony 52c3c49f25 [v3] Add window close hook example 2023-07-12 21:27:58 +10:00
Lea Anthony 705239ad7d [v3] Use WindowEvent rather than WindowEventContext 2023-07-12 20:50:01 +10:00
Lea Anthony dc865404a9 [v3] Initial hooks implementation 2023-07-12 20:31:13 +10:00
Lea Anthony ba7ab2e607 [v3 windows] Fix translucency. Update example. 2023-07-11 23:04:22 +10:00
Lea Anthony d6cfe4414d [v3 Windows] Add WebviewWindow.Flash() 2023-07-11 20:10:18 +10:00
Lea Anthony ecbb135949 [v3] Update plugin.js 2023-07-10 20:56:07 +10:00
Lea Anthony fcb98e6523 [v3] Update docs 2023-07-10 20:46:08 +10:00
Lea Anthony e7e5597c95 [v3 mac] Fix right click. Slight refactor. 2023-07-10 20:44:30 +10:00
Lea Anthony 7f0479d8b4 [v3 mac] Fix right click menu when window attached. 2023-07-10 20:21:19 +10:00
Lea Anthony f5c78f365d [v3] Fix oauth bug. Added logout capability 2023-07-09 20:13:29 +10:00
Lea Anthony 1fc5f9b12d [v3] Update readme for oauth plugin 2023-07-09 12:33:57 +10:00
Lea Anthony 3f55ce6dfc [v3] Add provider methods, provide default login window, update readme for oauth plugin 2023-07-09 12:30:36 +10:00
Lea Anthony 1d562d3c27 [v3] Add oauth plugin 2023-07-08 22:56:25 +10:00
Lea Anthony f3974deb88 [v3] Add Get for application instance 2023-07-08 22:51:33 +10:00
Lea Anthony 1945616328 [v3 windows] Fix WindowClose defaults 2023-07-08 20:28:19 +10:00
Lea Anthony 7db6604227 [v3 windows] Add HideOnTaskbar flag to WebviewWindow 2023-07-08 11:27:36 +10:00
Lea Anthony 12ce6c5ac3 [v3] Add systray.AttachWindow 2023-07-06 20:43:08 +10:00
Lea Anthony 5d9bc4ca81 [v3 mac] Fix systray example toggle 2023-07-05 21:09:48 +10:00
Lea Anthony c0b4a3ff35 [v3] Fix generation of common events 2023-07-05 20:39:35 +10:00
Lea Anthony f0bf8cd827 [v3 windows] Refactor events + mappings. Fix app.Quit(). Make systray example work slightly better 2023-07-05 20:35:45 +10:00
Lea Anthony 10144adf61 [v3 windows] Fix window lose focus events. 2023-07-04 20:43:21 +10:00
Lea Anthony 3efab5ba23 [v3 windows] Prevent window close events when the window was just opened 2023-07-04 20:01:06 +10:00
Lea Anthony 3d323ab9d2 [v3] Fix systray example. PositionWindow now takes an offset. EventApplicationDidResignActive -> EventApplicationDidResignActiveNotification 2023-07-04 19:26:00 +10:00
Lea Anthony 16ce9e562f [v3 mac] Window alignment to systray 2023-07-03 20:15:45 +10:00
Lea Anthony 90e66a7ad4 [v3] Add PanicHandler application option. 2023-07-03 19:52:50 +10:00
Lea Anthony 6b59216b32 [v3] Better panic support for methods run on mainthread 2023-07-01 21:56:21 +10:00
Lea Anthony 9764ba6334 [v3] Add CHANGELOG.md. Add instructions for PRs in DEVELOPMENT.md. 2023-07-01 11:09:09 +10:00
Mohamed Gharib da5929ff34 [v3] Fix examples background color (#2750) 2023-07-01 10:55:10 +10:00
Mohamed Gharib e419822c77 [v3] Fix default context-menu in selected disabled inputs (#2753)
* [v3] Fix default context-menu in selected disabled inputs

* [v3] Update Task to v3.27.1. Add `wails3 task -version` and `wails3 task taskfile:update`.

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2023-07-01 10:52:55 +10:00
Lea Anthony b62ce4440e [v3 windows] Setup chromium sooner 2023-07-01 09:23:19 +10:00
Lea Anthony 3c81fb06e8 [v3 windows] Position window above systray 2023-06-30 21:17:50 +10:00
Lea Anthony c27366a270 [v3] rename cli to wails3 2023-06-29 18:26:04 +10:00
Lea Anthony 5b6f6c1bff [v3] Default context menu always shows in debug/dev 2023-06-28 18:47:39 +10:00
Lea Anthony 3fcac435b2 [v3] Support window events in JS. Fix ExecJS blocking issues. 2023-06-26 22:10:31 +10:00
Lea Anthony 03a3edcdc9 [v3] Create experimental plugin directory 2023-06-26 08:39:02 +10:00
Lea Anthony 5737b3cc7b [v3 mac] Fix merge issues 2023-06-25 10:13:20 +10:00
Lea Anthony b898b79aaf [v3 windows] Initial support for start_on_login plugin for windows 2023-06-24 21:12:24 +10:00
Lea Anthony 3827ca2d78 [v3] Move dialogs out of application 2023-06-24 13:57:51 +10:00
Lea Anthony 4de5e1b9f1 [v3] Add WindowUnFocus event 2023-06-24 13:23:50 +10:00
Travis McLane eb18f02fd2 Merge branch 'v3-alpha-linux' into v3-alpha 2023-06-23 21:51:21 -05:00
Travis McLane 1a7d105917 [v3 linux] GetAbsolutePosition 2023-06-23 21:50:51 -05:00
Travis McLane de5cff799e [v3 linux] setEnabled 2023-06-23 21:50:51 -05:00
Travis McLane 67cada78f6 [v3 linux] purego: windowGetRelativePosition 2023-06-23 21:50:51 -05:00
Travis McLane 5a40f25d03 [v3 linux] webview setAbsolutePosition 2023-06-23 21:50:51 -05:00
Travis McLane 1a09a8a4c8 [v3 linux/cgo] open/save file dialog stub 2023-06-23 21:50:51 -05:00
Travis McLane daa0cf83d9 [v3 linux] noop: remove fmt.Println 2023-06-23 21:50:51 -05:00
Travis McLane e92858f64d [v3 linux/purego] initial file/directory dialogs impl 2023-06-23 21:50:51 -05:00
Travis McLane d52c26e82f [v3 linux] implement missing functions 2023-06-23 21:50:51 -05:00
Travis McLane 83900b03d4 [v3 linux] purego cleanup + dialog images 2023-06-23 21:50:51 -05:00
Travis McLane c123430f22 [v3 linux] dialog fixes 2023-06-23 21:50:51 -05:00
Travis McLane 33e20cbc77 [v3 linux] allow menu setting on Linux 2023-06-23 21:50:51 -05:00
Travis McLane e942312c4c [v3 menuitem] bug: avoid setting if nil 2023-06-23 21:50:51 -05:00
Travis McLane de2e78b507 [v3 linux] purego implementation 2023-06-23 21:50:51 -05:00
Travis McLane da4a7ac64b [v2] assetserver/webview purego implementation 2023-06-23 21:50:51 -05:00
Travis McLane e44fbc26ba [v3 linux] STATUS.md 2023-06-23 21:50:51 -05:00
Travis McLane bef454f950 [v3 linux] initial linux implementation 2023-06-23 21:50:51 -05:00
Travis McLane 94e1ec91ad Revert "Merge branch 'v3-alpha_linux' into v3-alpha"
This reverts commit b317efaf2c, reversing
changes made to 29b9c5200f.
2023-06-23 21:50:51 -05:00
Lea Anthony 56d11ab419 [v3] Update Wails API 2023-06-24 12:11:48 +10:00
Lea Anthony c96cccab2e [v3] Add Window AbsolutePosition/SetAbsolutePosition 2023-06-23 21:14:26 +10:00
Lea Anthony 989ef1b4a8 [v3] Update STATUS.md 2023-06-23 20:50:54 +10:00
Lea Anthony 45cfbe917e [v3] Position/GetPosition -> RelativePosition/GetRelativePosition 2023-06-23 20:49:27 +10:00
Lea Anthony 2e313005e0 [v3] Add window attachment for open/save dialogs. Fix filter bug. 2023-06-23 20:33:35 +10:00
Lea Anthony 722c3a653c [v3] Allow message dialogs to be attached to windows. JS dialogs default attached. wml confirm dialog attached. 2023-06-23 20:19:29 +10:00
Lea Anthony 76672facfe [v3] Add window Enabled method. Fix dialog attachment 2023-06-23 19:48:04 +10:00
Lea Anthony 8f075b5d8d [v3] Fix merge issues 2023-06-22 19:56:35 +10:00
Lea Anthony b317efaf2c Merge branch 'v3-alpha_linux' into v3-alpha
# Conflicts:
#	v3/STATUS.md
#	v3/examples/menu/main.go
#	v3/go.mod
#	v3/pkg/application/application.go
#	v3/pkg/application/webview_window.go
2023-06-22 19:46:10 +10:00
Lea Anthony 29b9c5200f [v3] Update context menu example. Allow menu for disabled/read only iputs 2023-06-21 20:21:10 +10:00
Lea Anthony 4d2b4b4ee7 [v3] Update dev guide. Remove implLock. 2023-06-21 19:37:39 +10:00
Lea Anthony 9f8f095a78 [v3] Update dev guide. 2023-06-21 19:23:14 +10:00
Lea Anthony 59c09ebee1 [v3] Better default context menu. Started dev guide. 2023-06-21 19:21:41 +10:00
Lea Anthony 5f81a87912 [v3] Add smart context menu example 2023-06-20 21:35:41 +10:00
Lea Anthony 7f6151d573 [v3] Enable default context menu for certain elements. Use CSS to customise. 2023-06-20 21:11:37 +10:00
Lea Anthony 9816960995 [v3] Support "--default-contextmenu" style. Fix URL handling in Windows. 2023-06-20 19:44:01 +10:00
Lea Anthony 3355d5f0af [v3] Add EnableDevTools option 2023-06-20 08:49:25 +10:00
Lea Anthony ab38b20444 [v3] Status Update 2023-06-20 08:36:39 +10:00
Lea Anthony f278229179 Merge remote-tracking branch 'origin/v3-alpha' into v3-alpha 2023-06-20 08:12:42 +10:00
Lea Anthony 552390fb84 [v3 mac] Tidy up 2023-06-19 17:53:16 +10:00
Lea Anthony 68573cdc48 [v3 windows] Focus webview on Show/Restore/Maximise/FullScreen 2023-06-19 07:35:11 +10:00
Lea Anthony cdf397aaa9 [v3 mac] Implement print() 2023-06-19 07:15:53 +10:00
Lea Anthony ed27558011 [v3 windows] Add WebviewWindow.Print() 2023-06-18 17:13:07 +10:00
Lea Anthony 50387948df [v3 mac] Refactor drag to use common code 2023-06-18 12:24:44 +10:00
Lea Anthony 9b48cc1799 [v3 mac] Fix window drag example 2023-06-18 12:12:01 +10:00
Lea Anthony 86f2ac0e96 [v3 mac] Fix WindowShouldClose bug 2023-06-18 11:25:38 +10:00
Lea Anthony 1537a002cc [v3] Add ShouldClose window method. Remove hideOnClose flag. 2023-06-18 11:12:53 +10:00
Lea Anthony ae9b158b04 [v3 windows] improve main thread calls 2023-06-16 21:04:44 +10:00
Lea Anthony 72ec10b181 [v3 mac] Fix window close bug 2023-06-16 21:01:17 +10:00
Lea Anthony eed4002a4a [v3 mac] Fix GetPosition Y coordinate 2023-06-16 20:54:53 +10:00
Lea Anthony 155e34c7a8 [v3 mac] Better main thread calls 2023-06-16 20:48:57 +10:00
Lea Anthony 22cc649e81 [v3 mac] translate window position for SetPosition 2023-06-16 20:20:18 +10:00
Lea Anthony 367ca745c3 [v3 windows] Fix frameless window drag. Add better resize for corners. 2023-06-15 21:06:14 +10:00
Lea Anthony 01e2e46e0d [v3 windows] Support frameless drag. Add /wails/flags endpoint. 2023-06-15 19:08:08 +10:00
Lea Anthony c03078ca16 [v3] Add capabilities, move to app-region css for drag, support native drag on Windows 2023-06-14 18:12:37 +10:00
Lea Anthony 49e62aebe3 [v3 windows] Support frameless drag 2023-06-13 17:44:07 +10:00
Lea Anthony dc4daaebac [v3 windows] Support title bar button events 2023-06-13 17:42:14 +10:00
stffabi f855b30c9f [v3 windows] Consolidate WM_SIZE/WM_SIZING message handling 2023-06-12 08:26:09 +02:00
stffabi b614e2b100 [v3 windows] An initially hidden window should show chromium when it is getting unhidden 2023-06-12 05:41:55 +02:00
stffabi eafbbab233 [v3 windows] Do not Hide/Show chromium on every load of the frontend 2023-06-12 05:12:49 +02:00
Lea Anthony 72a4e9cf6e [v3] Update STATUS.md 2023-06-12 10:46:31 +10:00
Lea Anthony 1dbe100a43 [v3] Restore window example 2023-06-12 10:45:26 +10:00
Lea Anthony 287d3d066c [v3] Update WML demo to include restore 2023-06-12 10:45:03 +10:00
Lea Anthony 9387d18e88 [v3 windows] Change how chromium redraw works 2023-06-12 10:44:33 +10:00
Lea Anthony 1600bcb1d0 [v3] Add Restore to JS runtime 2023-06-12 10:44:05 +10:00
Lea Anthony 2b2defb7c0 [v3 windows] Fix chromium redraw bug 2023-06-12 10:28:35 +10:00
Lea Anthony 6d786902eb [v3] Add some common window events 2023-06-12 10:27:30 +10:00
Lea Anthony 286ce206f0 [v3 windows] Prevent crash when nulls in strings 2023-06-12 09:10:47 +10:00
Lea Anthony 7535f098bd [v3 windows] Fix clipboard example 2023-06-11 11:57:47 +10:00
Lea Anthony b517461fbe [v3 windows] Fix screen example 2023-06-11 11:54:32 +10:00
Lea Anthony ffbe67e21f [v3 windows] Fix clipboard js runtime call 2023-06-11 11:47:50 +10:00
Lea Anthony 833671d30c [v3 windows] Add clipboard support 2023-06-10 13:01:10 +10:00
Lea Anthony ae691b8e52 [v3 windows] Small icon updates 2023-06-10 10:19:33 +10:00
Lea Anthony 2b56b7b6b9 [v3] Update status and log plugin readme 2023-06-09 20:44:24 +10:00
Lea Anthony 81a5380f67 [v3 windows] Handle null result from callbacks. Call results should respond on main thread. 2023-06-09 20:34:11 +10:00
Lea Anthony 7c45e3ac13 [v3 mac] Fixed drag 2023-06-09 17:00:07 +10:00
Lea Anthony d1932c36ce Merge remote-tracking branch 'origin/v3-alpha' into v3-alpha
# Conflicts:
#	v2/internal/app/app_dev.go
#	v3/STATUS.md
#	v3/Taskfile.yaml
#	v3/examples/binding/go.mod
#	v3/examples/binding/go.sum
#	v3/examples/menu/main.go
#	v3/examples/window/main.go
#	v3/go.mod
#	v3/go.sum
#	v3/pkg/application/application_windows.go
#	v3/pkg/application/dialogs_windows.go
#	v3/pkg/application/menuitem_windows.go
#	v3/pkg/application/options_webview_window.go
#	v3/pkg/application/options_win.go
#	v3/pkg/application/popupmenu_windows.go
#	v3/pkg/application/systemtray_windows.go
#	v3/pkg/application/webview_window.go
#	v3/pkg/application/webview_window_windows.go
#	v3/pkg/events/events.go
#	v3/pkg/events/events.txt
#	v3/pkg/w32/constants.go
#	v3/pkg/w32/popupmenu.go
#	v3/pkg/w32/screen.go
#	v3/pkg/w32/typedef.go
#	v3/pkg/w32/user32.go
#	website/src/pages/changelog.mdx
2023-06-07 08:19:25 +10:00
Lea Anthony adb7ddf8d2 [v3] Update go mod for plugins examples 2023-06-06 21:07:28 +10:00
Lea Anthony 3b0a57ca6d [v3 plugins] Support single-instance on Windows 2023-06-06 21:06:52 +10:00
Lea Anthony 4ee75e93c9 [v3] Improve examples 2023-06-06 20:41:28 +10:00
Lea Anthony ff218e5323 [v3 windows] Support systray.Destroy() 2023-06-06 20:40:56 +10:00
Lea Anthony df0969d1c6 [v3 windows] Support About box. Improve app menu handling. 2023-06-06 20:40:38 +10:00
Lea Anthony 23d7ac0e58 [v3 windows] Add MessageBoxIndirect 2023-06-06 20:39:24 +10:00
Lea Anthony f9a87944cf [v3] icons.ico -> icon.ico 2023-06-06 20:38:45 +10:00
Lea Anthony eff456aa1a [v3 windows] Improve systray locking 2023-06-06 20:38:01 +10:00
Lea Anthony 1ce07cd67c [v3 windows] Update Taskfile in templates 2023-06-06 20:37:15 +10:00
Lea Anthony fc7952ff3b [v3 windows] Update examples. Add example table to STATUS.md 2023-06-05 20:34:52 +10:00
Lea Anthony bb28bdf565 [v3 windows] Fix resize bug when using setSize 2023-06-05 20:33:45 +10:00
Lea Anthony 04d5842124 [v3 windows] Add package:windows task 2023-06-05 19:57:40 +10:00
Lea Anthony 1a12890556 [v3 windows] Add Webview2NavigationCompleted event. Support CSS + JS injection 2023-06-05 08:58:53 +10:00
Lea Anthony d021d885ca [v3 windows] Update STATUS.md 2023-06-04 14:08:27 +10:00
Lea Anthony 3433b8ce8f [v3 windows] Support context menus 2023-06-04 14:05:19 +10:00
Lea Anthony 6092730acc [v3 windows] Support Close and take into account HideOnClose option 2023-06-03 15:23:10 +10:00
Lea Anthony ba4ffe4ecc [v3 windows] Support devtools on startup 2023-06-03 15:19:38 +10:00
Lea Anthony 55b3e2d35a [v3 windows] Update STATUS.md 2023-06-03 15:08:50 +10:00
Lea Anthony 6b926ec463 [v3 windows] Support setURL, execJS, reload, zoomIn/Out/Reset, get/setZoom, setHTML, 2023-06-03 15:03:26 +10:00
Lea Anthony 9b686b5417 [v3 windows] Support Application Menu, hiding menu items 2023-06-01 22:52:04 +10:00
Lea Anthony 82ec56bc7d [v3 windows] Support GetScreens and GetPrimaryScreen 2023-06-01 22:52:03 +10:00
Lea Anthony 798e51d4d3 [v3 windows] Fix window ID processing 2023-06-01 22:52:02 +10:00
Lea Anthony 35c41552de [v3 mac] Basic common event support. Taskfile refactor 2023-06-01 22:51:25 +10:00
Lea Anthony 19be7f61ac [v3 windows] Fix resizing. Add resize debouncing 2023-05-30 16:36:00 +08:00
Misite Bao bbf0e8cdad chore: split Taskfile (#2654) 2023-05-30 16:35:59 +08:00
Lea Anthony 7e2d2a29a1 [v3 windows] Initial webview2 working 2023-05-30 16:33:34 +08:00
Lea Anthony 671dc2aa3a [v3 windows] Implement start x/y + parent window for dialogs 2023-05-30 16:33:34 +08:00
Lea Anthony 294a2c701e [v3] Update esbuild 2023-05-30 16:33:34 +08:00
Lea Anthony 01f03c552d [v3] Improve invoke 2023-05-30 16:33:33 +08:00
Lea Anthony dc46154d94 [v3 mac] Support drag 2023-05-30 16:33:33 +08:00
Lea Anthony 87737c23eb [v3 mac] DisableWindowShadow -> DisableShadow 2023-05-30 16:33:33 +08:00
Lea Anthony 6e6f099a99 [v3 mac] Basic common event support. Taskfile refactor 2023-05-30 16:33:32 +08:00
Lea Anthony 4cb3321c39 [v3 mac] Update README 2023-05-30 16:32:02 +08:00
Lea Anthony 6a2343a1a0 [v3 mac] Add DisableWindowShadow option 2023-05-30 16:32:01 +08:00
Lea Anthony f2d6dba2cf [v3 windows] initial dialog support. Refactor button callback name 2023-05-30 16:32:01 +08:00
stffabi dd1ef7fae9 [v3 darwin] Add darwin identifier darwin only file 2023-05-30 16:32:01 +08:00
stffabi 527cff9ec3 [v3 darwin] Add darwin identifier to all C files of darwin 2023-05-30 16:32:00 +08:00
stffabi ba150eccae [v3 windows] Add close handling: HideOnClose, QuitOnLastWindowClosed and DisableQuitOnLastWindowClosed 2023-05-30 16:32:00 +08:00
Travis McLane fa74986f1e [v3 example] menu text toggle 2023-05-30 16:32:00 +08:00
Travis McLane d1085b5bea [v3 example] add menuitem.Hidden / setHidden example 2023-05-30 16:31:59 +08:00
Travis McLane 4d0a14d2eb [v3 darwin] menuitem.setHidden implementation 2023-05-30 16:31:59 +08:00
Travis McLane 8c3439b733 [dialogs] remove default title
without this removal a user would have to call `SetTitle("")` in order to
erase the default if they desire a title-less dialog.
2023-05-30 16:31:59 +08:00
stffabi a0534d527a [v3 application] Fix race conditions between starting a window/systray and starting the application
Make sure a window is never run before the windowCreated hooks have been executed.
2023-05-30 16:31:59 +08:00
Lea Anthony a5b52f2795 [v3 windows] initial systray support 2023-05-30 16:31:58 +08:00
Lea Anthony b526ebd679 [v3 mac] Update api. New template icon. 2023-05-30 16:31:58 +08:00
Lea Anthony 51b9315ae9 [v3 windows] update status 2023-05-30 16:31:58 +08:00
Lea Anthony 8edf44dc31 [v3 windows] New icons 2023-05-30 16:31:57 +08:00
Lea Anthony 9b7626e59e [v3 windows] Move icons to own package, systray dark mode icon, window.Focus(), 2023-05-30 16:31:57 +08:00
Lea Anthony 6dd092c7a9 [v3 windows] Rename systray callback handlers 2023-05-30 16:31:57 +08:00
Lea Anthony 46a0d467c0 [v3 windows] Dialogs to use invokeSync 2023-05-30 16:31:56 +08:00
Lea Anthony e3b164ae93 [v3 windows] Systray callback handlers 2023-05-30 16:31:56 +08:00
stffabi d8f58ab20f [v3 windows] Fix wndproc default case with WMMessageToString 2023-05-30 16:31:56 +08:00
stffabi 0de2bccd28 [v3 windows] Do not disable WndProc messaging for systray when updating icon 2023-05-30 16:31:55 +08:00
Lea Anthony 2eaf724710 [v3 windows] Fix systray icon size 2023-05-30 16:31:55 +08:00
Lea Anthony 58138ac09b [v3 windows] Initial systray support 2023-05-30 16:31:55 +08:00
Lea Anthony 143f090422 [v3] Use invokeSync for systray methods 2023-05-30 16:31:55 +08:00
Lea Anthony f8f466ba7e [v3 windows] Support irregular shaped windows. Centered option. 2023-05-30 16:31:54 +08:00
Lea Anthony cb28de47f8 [v3 windows] Support irregular shaped windows 2023-05-30 16:31:54 +08:00
stffabi 4ad2475ed6 [v3] Add some missing methods for darwin and windows 2023-05-30 16:31:54 +08:00
Travis McLane 0172078536 [w32] move windows specific code to impl file 2023-05-30 16:31:53 +08:00
Travis McLane 0bb1fb512a [w32] add missing build constraint 2023-05-30 16:31:53 +08:00
Lea Anthony b6940d95a2 [v3 windows] Add frameless resize 2023-05-30 16:31:53 +08:00
stffabi 75f0457375 [v3 windows] Add HiDPI awareness 2023-05-30 16:31:52 +08:00
stffabi ffe31b6265 [v3 windows] Add frameless support 2023-05-30 16:31:52 +08:00
Lea Anthony 8963610722 [v3 windows] Implement getScreen 2023-05-30 16:31:52 +08:00
Lea Anthony 66bfcf0e36 [v3] Ensure impl calls from WebvieWindow are on the main thread. Support size. 2023-05-30 16:31:52 +08:00
Lea Anthony 0b3559abfe [v3] Fix examples 2023-05-30 16:31:51 +08:00
Lea Anthony 773389ee5e [v3] Update examples to use correct options. 2023-05-30 16:31:51 +08:00
Lea Anthony 4c04991d4d [v3] Change WebviewWindow options to be a value, not a pointer. Support Un/Fullscreen. Remove main thread switching. Use parent options instead of local variables. 2023-05-30 16:31:51 +08:00
Lea Anthony d56bb59b72 [v3 Windows] Support application hide/show. Add WebviewWindow.IsVisible(). 2023-05-30 16:31:50 +08:00
Lea Anthony 6e92a4f71e [v3 Windows] Support setMin/MaxSize, setPosition 2023-05-30 16:31:50 +08:00
Lea Anthony 1f6217c0d8 [v3 Windows] Add Support for SetTitle, Center, Un/Minimise/Maximise, IsMin/Maximised, IsNormal, Show/Hide 2023-05-30 16:31:50 +08:00
Lea Anthony 17204bebd0 [v3 Breaking Change] Add NativeWindowHandle method to WebviewWindow. 2023-05-30 16:31:49 +08:00
Lea Anthony 728e2019d8 [v3 windows] Moved w32 from internal to pkg so it may be used by applications 2023-05-30 16:31:49 +08:00
Lea Anthony 7f3fdd6977 [v3 windows] Add WndProcInterceptor for custom message processing 2023-05-30 16:31:49 +08:00
Lea Anthony e8798f8371 [v3 windows] Rename options_windows.go -> options_win.go 2023-05-30 16:31:48 +08:00
Lea Anthony 402b743553 [v3 windows] Add APM Events 2023-05-30 16:31:48 +08:00
Lea Anthony f08ae2fc62 [v3] Update application.On and window.On to return functions that unregister the listener. WebviewWindow.onApplicationEvent is a helper which will manage the unregistering for you on window destroy. 2023-05-30 16:31:48 +08:00
Lea Anthony 178ea9c8c5 [windows] Split out wndProc. Generate windows events, support per-window themes 2023-05-30 16:31:48 +08:00
Lea Anthony 7c63cee9e8 [windows] Support AlwaysOnTop, EnableResize at runtime. Added Solid/Transparent/Translucent options. 2023-05-30 16:31:47 +08:00
stffabi 4a60dfc373 [v3, windows] Add MainThread dispatching and fixes the blocking window 2023-05-30 16:31:47 +08:00
Lea Anthony 829a829cb4 [windows] WIP 2023-05-30 16:31:47 +08:00
Travis McLane 34896ccb4e [darwin] add getPrimaryScreen/getScreens to impl (#2618) 2023-05-30 16:31:46 +08:00
Lea Anthony 5df5eb6a04 Fix module path for non-modified repo 2023-05-30 16:31:46 +08:00
Lea Anthony 31ba36baf3 [windows] Initial commit 2023-05-30 16:31:46 +08:00
Lea Anthony bf10f71760 [windows] Fix paths for wails init 2023-05-30 16:31:45 +08:00
Lea Anthony 8aa61fff6d Intial STATUS.md commit 2023-05-30 16:31:45 +08:00
Lea Anthony f645b530da [v3] Update esbuild 2023-05-19 07:58:25 +10:00
Lea Anthony 27573d191e [v3] Improve invoke 2023-05-18 19:18:20 +10:00
Lea Anthony d6b4fdf979 [v3 mac] Support drag 2023-05-17 21:09:27 +10:00
Lea Anthony 39c834b83f [v3 mac] DisableWindowShadow -> DisableShadow 2023-05-17 08:13:05 +10:00
Lea Anthony f210357bfe [v3 mac] Basic common event support. Taskfile refactor 2023-05-17 07:58:40 +10:00
Lea Anthony 3094c19cf3 [v3 mac] Update README 2023-05-16 18:00:17 +10:00
Lea Anthony 225437f1e8 [v3 mac] Add DisableWindowShadow option 2023-05-16 17:54:34 +10:00
Lea Anthony a23bb1e350 [v3 windows] initial dialog support. Refactor button callback name 2023-05-12 20:56:22 +10:00
stffabi 2fbb21a84e [v3 darwin] Add darwin identifier darwin only file 2023-05-12 11:02:15 +02:00
stffabi 5c08fcb43e [v3 darwin] Add darwin identifier to all C files of darwin 2023-05-12 09:25:50 +02:00
stffabi cc59655cb1 [v3 windows] Add close handling: HideOnClose, QuitOnLastWindowClosed and DisableQuitOnLastWindowClosed 2023-05-12 08:06:05 +02:00
Travis McLane 8ff0a2b0ff [v3 example] menu text toggle 2023-05-11 11:10:17 -05:00
Travis McLane fe549af784 [v3 example] add menuitem.Hidden / setHidden example 2023-05-11 10:56:19 -05:00
Travis McLane a4549c94c1 [v3 darwin] menuitem.setHidden implementation 2023-05-11 10:51:52 -05:00
Travis McLane 706256d3f0 [dialogs] remove default title
without this removal a user would have to call `SetTitle("")` in order to
erase the default if they desire a title-less dialog.
2023-05-11 08:54:38 -05:00
stffabi 3049773e7f [v3 application] Fix race conditions between starting a window/systray and starting the application
Make sure a window is never run before the windowCreated hooks have been executed.
2023-05-11 07:00:42 +02:00
Travis McLane 9da5df354e make it compilable again 2023-05-10 09:10:03 -05:00
Travis McLane 54ba6d47f4 Revert "[linux] dispatchOnMainThread"
This reverts commit 346517a185640aa40bc8710b815cf3e5ff7dc4a8.
2023-05-10 09:10:03 -05:00
Travis McLane 17647e2c2f [linux/cgo] hide/show implementation 2023-05-10 09:10:03 -05:00
Travis McLane 9da5cea88d [linux/cgo] bugfix 2023-05-10 09:10:03 -05:00
Travis McLane 3784746ddb [linux] STATUS.md 2023-05-10 09:10:03 -05:00
Travis McLane 281f6335c1 [linux] dispatchOnMainThread 2023-05-10 09:10:03 -05:00
Travis McLane 5129c0f4e2 [fixup] remove 'activate' 2023-05-10 09:10:03 -05:00
Travis McLane 5078e89a71 [darwin] implement isNormal 2023-05-10 09:10:03 -05:00
Travis McLane 41aef27631 [linux] use getNativeApplication 2023-05-10 09:10:03 -05:00
Travis McLane 754d0934bf [darwin] systray basic darkmode implementation 2023-05-10 09:10:03 -05:00
Travis McLane be2d616190 [linux] getNativeApplication 2023-05-10 09:10:03 -05:00
Travis McLane ba34e47c4b [linux/purego] updates 2023-05-10 09:10:03 -05:00
Travis McLane a485b188b3 [linux/cgo] updates 2023-05-10 09:10:03 -05:00
Travis McLane 718e89ad1e [core/menu] prevent nil impl crash 2023-05-10 09:10:03 -05:00
Travis McLane 9453a60254 [linux] window registration + default menu 2023-05-10 09:10:03 -05:00
Travis McLane f87ec9d401 [purego] 2023-05-10 09:10:03 -05:00
Travis McLane cb1859a710 [cgo] registerWindow 2023-05-10 09:10:03 -05:00
Travis McLane 1ed95164db [purego] 2023-05-10 09:10:03 -05:00
Travis McLane ac5d0e54f0 [purego] assethandler updates 2023-05-10 09:10:03 -05:00
Travis McLane b1e79411e7 [examples] update label on click 2023-05-10 09:10:03 -05:00
Travis McLane a9d834d715 [examples] update label on click 2023-05-10 09:10:03 -05:00
Travis McLane 68cfd130d3 [linux/cgo] initial implementation 2023-05-10 09:10:03 -05:00
Travis McLane 93a4b823c8 [linux/purego] initial port 2023-05-10 09:10:03 -05:00
Travis McLane 769662d77a [v2] assetserver/webview purego implementation 2023-05-10 09:10:03 -05:00
Lea Anthony 7fd627f169 [v3 windows] initial systray support 2023-05-10 19:35:40 +10:00
Lea Anthony b91468b6f2 [v3 mac] Update api. New template icon. 2023-05-09 21:55:17 +10:00
Lea Anthony 0b9cd4be5d [v3 windows] update status 2023-05-09 21:47:22 +10:00
Lea Anthony 4c587ee1b8 [v3 windows] New icons 2023-05-09 19:53:01 +10:00
Lea Anthony 19e1e8b8a6 [v3 windows] Move icons to own package, systray dark mode icon, window.Focus(), 2023-05-09 19:52:33 +10:00
Lea Anthony 67e9522c67 [v3 windows] Rename systray callback handlers 2023-05-08 20:16:25 +10:00
Lea Anthony a829b38a34 [v3 windows] Dialogs to use invokeSync 2023-05-08 20:11:51 +10:00
Lea Anthony c8dae94b5b [v3 windows] Systray callback handlers 2023-05-08 19:43:58 +10:00
stffabi 87267758ac [v3 windows] Fix wndproc default case with WMMessageToString 2023-05-07 22:17:43 +02:00
stffabi 5f72df81fb [v3 windows] Do not disable WndProc messaging for systray when updating icon 2023-05-07 21:40:40 +02:00
Lea Anthony 1ed270fe05 [v3 windows] Fix systray icon size 2023-05-07 20:19:37 +10:00
Lea Anthony 19a654a2b1 [v3 windows] Initial systray support 2023-05-07 19:13:07 +10:00
Lea Anthony f9bbc11711 [v3] Use invokeSync for systray methods 2023-05-07 10:34:08 +10:00
Lea Anthony 42b1807c36 [v3 windows] Support irregular shaped windows. Centered option. 2023-05-06 20:22:28 +10:00
Lea Anthony 647982de1a [v3 windows] Support irregular shaped windows 2023-05-06 15:05:00 +10:00
Lea Anthony f5557c612a Merge remote-tracking branch 'origin/v3-alpha' into v3-alpha 2023-05-05 06:41:04 +10:00
stffabi f4749db8b3 [v3] Add some missing methods for darwin and windows 2023-05-02 21:56:40 +02:00
Travis McLane 86a1de6788 [w32] move windows specific code to impl file 2023-05-02 10:52:21 -05:00
Travis McLane 792c5e2d95 [w32] add missing build constraint 2023-05-02 10:52:09 -05:00
Lea Anthony 6758580be9 [v3 windows] Add frameless resize 2023-05-02 23:18:22 +10:00
stffabi 6f246eed4a [v3 windows] Add HiDPI awareness 2023-05-02 09:45:21 +02:00
stffabi fc3725d3f4 [v3 windows] Add frameless support 2023-05-02 09:29:47 +02:00
Lea Anthony 00c6f0dfdb [v3 windows] Implement getScreen 2023-05-01 21:11:40 +10:00
Lea Anthony cf7b4e2458 [v3] Ensure impl calls from WebvieWindow are on the main thread. Support size. 2023-05-01 20:28:46 +10:00
Lea Anthony f682e44367 [v3] Fix examples 2023-05-01 18:24:24 +10:00
Lea Anthony 9d1f86c410 [v3] Update examples to use correct options. 2023-05-01 18:21:22 +10:00
Lea Anthony dac281ac32 [v3] Change WebviewWindow options to be a value, not a pointer. Support Un/Fullscreen. Remove main thread switching. Use parent options instead of local variables. 2023-05-01 18:20:28 +10:00
Lea Anthony 29a58086a3 [v3 Windows] Support application hide/show. Add WebviewWindow.IsVisible(). 2023-05-01 11:34:06 +10:00
Lea Anthony cb8eb755a7 [v3 Windows] Support setMin/MaxSize, setPosition 2023-05-01 10:52:46 +10:00
Lea Anthony 1e8fc29ee4 [v3 Windows] Add Support for SetTitle, Center, Un/Minimise/Maximise, IsMin/Maximised, IsNormal, Show/Hide 2023-04-30 20:55:51 +10:00
Lea Anthony 9a05b49e3d [v3 Breaking Change] Add NativeWindowHandle method to WebviewWindow. 2023-04-30 10:17:03 +10:00
Lea Anthony 79f8d92084 [v3 windows] Moved w32 from internal to pkg so it may be used by applications 2023-04-30 10:02:00 +10:00
Lea Anthony 6e56542586 [v3 windows] Add WndProcInterceptor for custom message processing 2023-04-30 09:49:50 +10:00
Lea Anthony c53443b62b [v3 windows] Rename options_windows.go -> options_win.go 2023-04-30 09:10:00 +10:00
Lea Anthony 1128662c89 [v3 windows] Add APM Events 2023-04-29 20:33:33 +10:00
Lea Anthony 676787417f [v3] Update application.On and window.On to return functions that unregister the listener. WebviewWindow.onApplicationEvent is a helper which will manage the unregistering for you on window destroy. 2023-04-29 19:39:05 +10:00
Lea Anthony 57422dccf3 [windows] Split out wndProc. Generate windows events, support per-window themes 2023-04-29 12:14:12 +10:00
Lea Anthony 7f3f51e36b [windows] Support AlwaysOnTop, EnableResize at runtime. Added Solid/Transparent/Translucent options. 2023-04-28 21:11:49 +10:00
stffabi ef184ec8bf [v3, windows] Add MainThread dispatching and fixes the blocking window 2023-04-26 21:06:54 +02:00
Lea Anthony 9bfe3094dd [windows] WIP 2023-04-26 21:07:04 +10:00
stffabi 3547b4d010 [v2, darwin] Add some missing default shortcuts (#2586)
* [v2, darwin] Add "Hide, Hide Others, Show All“ to appmenu

This also includes shortcuts support for those commands.
Arrange the menu items in the well known MacOS order.

* [v2, darwin] Add Window menu with well known shortcuts Minimize, Full-Screen and Zoom.
2023-04-26 21:07:04 +10:00
stffabi 1222e3aa1b [v2, dev] Use custom schemes for in-app dev mode (#2610)
This fixes some long-standing inconsistencies between
dev mode builds and production builds but is a breaking
change. Dev mode uses custom scheme for Vite versions >= 3.0.0
and for older it still behaves in the old way.
2023-04-26 21:07:03 +10:00
stffabi cff3ee5079 [assetServer] Improve release/close handling of webview requests (#2612) 2023-04-26 21:07:03 +10:00
Travis McLane c91aa462aa [darwin] add getPrimaryScreen/getScreens to impl (#2618) 2023-04-24 09:34:44 +10:00
Lea Anthony 62b3775e2f Fix module path for non-modified repo 2023-04-19 08:22:58 +10:00
Lea Anthony 54bf8c1142 [windows] Initial commit 2023-04-18 21:27:09 +10:00
Lea Anthony c4f613e4c5 [windows] Fix paths for wails init 2023-04-18 20:41:59 +10:00
Lea Anthony a66d9ab0b1 Intial STATUS.md commit 2023-04-18 18:53:39 +10:00
844 changed files with 76255 additions and 33 deletions
+120
View File
@@ -0,0 +1,120 @@
name: Build + Test v3 alpha
on:
push:
branches: [v3-alpha]
paths-ignore:
- 'mkdocs-website/**/*'
workflow_dispatch:
jobs:
test_go:
name: Run Go Tests
if: github.repository == 'wailsapp/wails'
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, macos-latest]
go-version: [1.21]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install linux dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
- name: Run tests (mac)
if: matrix.os == 'macos-latest'
env:
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
working-directory: ./v3
run: go test -v ./...
- name: Run tests (!mac)
if: matrix.os != 'macos-latest'
working-directory: ./v3
run: go test -v ./...
test_js:
name: Run JS Tests
if: github.repository == 'wailsapp/wails'
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
working-directory: v2/internal/frontend/runtime
- name: Run tests
run: npm test
working-directory: v2/internal/frontend/runtime
test_templates:
name: Test Templates
needs: test_go
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
template:
[
svelte,
svelte-ts,
vue,
vue-ts,
react,
react-ts,
preact,
preact-ts,
lit,
lit-ts,
vanilla,
vanilla-ts,
]
go-version: [1.21]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
- name: Build Wails3 CLI
run: |
cd ./v3/cmd/wails3
go install
wails3 -help
- name: Install linux dependencies
if: matrix.os == 'ubuntu-latest'
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
- name: Generate template '${{ matrix.template }}'
run: |
go install github.com/go-task/task/v3/cmd/task@latest
mkdir -p ./test-${{ matrix.template }}
cd ./test-${{ matrix.template }}
wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }}
cd ${{ matrix.template }}
wails3 build
+35
View File
@@ -0,0 +1,35 @@
name: v3 docs
on:
push:
branches:
- v3-alpha
paths:
- 'mkdocs-website/**/*'
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
if: github.event.repository.fork == false
defaults:
run:
working-directory: ./mkdocs-website
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v3
with:
key: mkdocs-material-${{ env.cache_id }}
path: .cache
restore-keys: |
mkdocs-material-
- run: sudo apt-get install pngquant
- run: pip install pillow cairosvg
- run: pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git
- run: mkdocs build --config-file mkdocs.insiders.yml
- run: mkdocs gh-deploy --force
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
+5
View File
@@ -16,6 +16,11 @@ includes:
dir: v3
optional: true
docs:
taskfile: mkdocs-website
dir: mkdocs-website
optional: true
tasks:
contributors:check:
cmds:
+43
View File
@@ -0,0 +1,43 @@
# v3 Docs
This is the documentation for Wails v3. It is currently a work in progress.
If you do not wish to build it locally, it is available online at [https://wailsapp.github.io/wails/](https://wailsapp.github.io/wails/).
## Recommended Setup Steps
Install the wails3 CLI if you haven't already:
```shell
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
```
The documentation uses mkdocs, so you will need to install [Python](https://www.python.org/). Once installed,
you can setup the documentation by running the following command:
```bash
wails3 task docs:setup
```
This will install the required dependencies for you.
If you have installed the wails3 CLI, you can run the following command to build the documentation and serve it locally:
```bash
wails3 task docs:serve
```
### Manual Setup
To install manually, you will need to do the following:
- Install [Python](https://www.python.org/)
- Run `pip install -r requirements.txt` to install the required dependencies
- Run `mkdocs serve` to serve the documentation locally
- Run `mkdocs build` to build the documentation
## Contributing
If you would like to contribute to the documentation, please feel free to open a PR!
+53
View File
@@ -0,0 +1,53 @@
# https://taskfile.dev
version: '3'
tasks:
setup:
summary: Setup the project
preconditions:
- sh: python{{exeExt}} --version
msg: "Looks like Python isn't installed. Python is required to build the documentation: https://www.python.org/downloads/"
cmds:
- python -m pip install -r requirements.txt --user
setup:insiders:
summary: Setup the project (insiders)
preconditions:
- sh: python{{exeExt}} --version
msg: "Looks like Python isn't installed. Python is required to build the documentation: https://www.python.org/downloads/"
cmds:
- python -m pip install -r requirements.insiders.txt --user
upgrade:insiders:
summary: Upgrade the project (insiders)
preconditions:
- sh: python{{exeExt}} --version
msg: "Looks like Python isn't installed. Python is required to build the documentation: https://www.python.org/downloads/"
cmds:
- python -m pip install -r requirements.insiders.txt --upgrade --user
build:
summary: Builds the documentation
preconditions:
- sh: mkdocs --version
msg: "Looks like mkdocs isn't installed. Run `wails3 task setup` or `task setup` in the documentation directory to install it."
cmds:
- mkdocs build
serve:
summary: Builds the documentation and serves it locally
preconditions:
- sh: mkdocs --version
msg: "Looks like mkdocs isn't installed. Run `wails3 task setup` or `task setup` in the documentation directory to install it."
cmds:
- mkdocs serve
serve:insiders:
summary: Builds the documentation and serves it locally
preconditions:
- sh: mkdocs --version
msg: "Looks like mkdocs isn't installed. Run `wails3 task setup` or `task setup` in the documentation directory to install it."
cmds:
- mkdocs serve --config-file mkdocs.insiders.yml
+36
View File
@@ -0,0 +1,36 @@
# Changelog
<!--
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- `Added` for new features.
- `Changed` for changes in existing functionality.
- `Deprecated` for soon-to-be removed features.
- `Removed` for now removed features.
- `Fixed` for any bug fixes.
- `Security` in case of vulnerabilities.
-->
## [Unreleased]
### Added
* [darwin] add getPrimaryScreen/getScreens to impl by @tmclane in https://github.com/wailsapp/wails/pull/2618
### Fixed
- 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
### Removed
### Deprecated
### Security
+359
View File
@@ -0,0 +1,359 @@
# Changes for v3
!!! note
This is currently an unsorted brain dump of changes. It will be organised into a more readable format soon.
## Options
The application options have been revised since v2.
## Events
In v3, there are 3 types of events:
- Application Events
- Window Events
- Custom Events
### Application Events
Application events are events that are emitted by the application. These events include native events such as `ApplicationDidFinishLaunching` on macOS.
### Window Events
Window events are events that are emitted by a window. These events include native events such as `WindowDidBecomeMain` on macOS. Common events are also defined, so they work cross-platform, e.g. `WindowClosing`.
### Custom Events
Events that the user defines are called `WailsEvents`. This is to differentiate them from the `Event` object that is used to communicate with the browser. WailsEvents are now objects that encapsulate all the details of an event. This includes the event name, the data, and the source of the event.
The data associated with a WailsEvent is now a single value. If multiple values are required, then a struct can be used.
### Event callbacks and `Emit` function signature
The signatures events callbacks (as used by `On`, `Once` & `OnMultiple`) have changed. In v2, the callback function received optional data. In v3, the callback function receives a `WailsEvent` object that contains all data related to the event.
Similarly, the `Emit` function has changed. Instead of taking a name and optional data, it now takes a single `WailsEvent` object that it will emit.
### `Off` and `OffAll`
In v2, `Off` and `OffAll` calls would remove events in both JS and Go. Due to the multi-window nature of v3, this has been changed so that these methods only apply to the context they are called in. For example, if you call `Off` in a window, it will only remove events for that window. If you use `Off` in Go, it will only remove events for Go.
### Hooks
Event Hooks are a new feature in v3. They allow you to hook into the event system and perform actions when certain events are emitted. For example, you can hook into the `WindowClosing` event and perform some cleanup before the window closes.
Hooks can be registered at the application level or at the window level using `RegisterHook`. Application level are for application events. Window level hooks will only be called for the window they are registered with.
### Logging
Logging in v2 was confusing as both application logs and system (internal) logs were using the same logger. We have simplified this as follows:
- Internal logs are now handled using the standard Go `slog` logger. This is configured using the `logger` option in the application options. By default, this uses the [tint](https://github.com/lmittmann/tint) logger.
- Application logs can now be achieved through the new `log` plugin which utilises `slog` under the hood. This plugin provides a simple API for logging to the console. It is available in both Go and JS.
### Developer notes
When emitting an event in Go, it will dispatch the event to local Go listeners and also each window in the application.
When emitting an event in JS, it now sends the event to the application. This will be processed as if it was emitted in Go, however the sender ID will be that of the window.
## Window
The Window API has largely remained the same, however the methods are now on an instance of a window rather than the runtime.
Some notable differences are:
- Windows now have a Name that identifies them. This is used to identify the window when emitting events.
- Windows have even more methods on the that were previously unavailable, such as `AbsolutePosition` and `ToggleDevTools`.
- Windows can now accept files via native drag and drop. See the Drag and Drop section for more details.
## ClipBoard
The clipboard API has been simplified. There is now a single `Clipboard` object that can be used to read and write to the clipboard. The `Clipboard` object is available in both Go and JS. `SetText()` to set the text and `Text()` to get the text.
## Bindings
Bindings work in a similar way to v2, by providing a means to bind struct methods to the frontend.
These can be called in the frontend using the binding wrappers generated by the `wails3 generate bindings` command:
```javascript
// @ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import {main} from './models';
window.go = window.go || {};
window.go.main = {
GreetService: {
/**
* GreetService.Greet
* Greet greets a person
* @param name {string}
* @returns {Promise<string>}
**/
Greet: function(name) { wails.CallByID(1411160069, ...Array.prototype.slice.call(arguments, 0)); },
/**
* GreetService.GreetPerson
* GreetPerson greets a person
* @param person {main.Person}
* @returns {Promise<string>}
**/
GreetPerson: function(person) { wails.CallByID(4021313248, ...Array.prototype.slice.call(arguments, 0)); },
},
};
```
Bound methods are obfuscated by default, and are identified using uint32 IDs, calculated using the [FNV hashing algorithm](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function). This is to prevent the method name from being exposed in production builds.
In debug mode, the method IDs are logged along with the calculated ID of the method to aid in debugging. If you wish to add an extra layer of obfuscation, you can use the `BindAliases` option. This allows you to specify a map of alias IDs to method IDs. When the frontend calls a method using an ID, the method ID will be looked up in the alias map first for a match. If it does not find it, it assumes it's a standard method ID and tries to find the method in the usual way.
Example:
```go
app := application.New(application.Options{
Bind: []any{
&GreetService{},
},
BindAliases: map[uint32]uint32{
1: 1411160069,
2: 4021313248,
},
Assets: application.AssetOptions{
FS: assets,
},
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
```
We can now call using this alias in the frontend: `wails.Call(1, "world!")`.
### Insecure calls
If you don't mind your calls being available in plain text in your binary and have no intention of using [garble](https://github.com/burrowers/garble),
then you can use the insecure `wails.CallByName()` method. This method takes the fully qualified name of the method to call and the arguments to pass to it.
Example:
```go
wails.CallByName("main.GreetService.Greet", "world!")
```
!!! danger
This is only provided as a convenience method for development. It is not recommended to use this in production.
## Dialogs
Dialogs are now available in JavaScript!
### Windows
Dialog buttons in Windows are not configurable and are constant depending on the type of dialog. To trigger a callback when a button is pressed, create a button with the same name as the button you wish to have the callback attached to.
Example: Create a button with the label `Ok` and use `OnClick()` to set the callback method:
```go
dialog := app.QuestionDialog().
SetTitle("Update").
SetMessage("The cancel button is selected when pressing escape")
ok := dialog.AddButton("Ok")
ok.OnClick(func() {
// Do something
})
no := dialog.AddButton("Cancel")
dialog.SetDefaultButton(ok)
dialog.SetCancelButton(no)
dialog.Show()
```
## Drag and Drop
Native drag and drop can be enabled per-window. Simply set the `EnableDragAndDrop` window config option to `true` and the window will allow files to be dragged onto it. When this happens, the `events.FilesDropped` event will be emitted. The filenames can then be retrieved from the `WindowEvent.Context()` using the `DroppedFiles()` method. This returns a slice of strings containing the filenames.
## Context Menus
Context menus are contextual menus that are shown when the user right-clicks on an element. Creating a context menu is the same as creating a standard menu , by using `app.NewMenu()`. To make the context menu available to a window, call `window.RegisterContextMenu(name, menu)`. The name will be the id of the context menu and used by the frontend.
To indicate that an element has a context menu, add the `data-contextmenu` attribute to the element. The value of this attribute should be the name of a context menu previously registered with the window.
It is possible to register a context menu at the application level, making it available to all windows. This can be done using `app.RegisterContextMenu(name, menu)`. If a context menu cannot be found at the window level, the application context menus will be checked. A demo of this can be found in `v3/examples/contextmenus`.
## Wails Markup Language (WML)
The Wails Markup Language is a simple markup language that allows you to add functionality to standard HTML elements without the use of Javascript.
The following tags are currently supported:
### `data-wml-event`
This specifies that a Wails event will be emitted when the element is clicked. The value of the attribute should be the name of the event to emit.
Example:
```html
<button data-wml-event="myevent">Click Me</button>
```
Sometimes you need the user to confirm an action. This can be done by adding the `data-wml-confirm` attribute to the element. The value of this attribute will be the message to display to the user.
Example:
```html
<button data-wml-event="delete-all-items" data-wml-confirm="Are you sure?">Delete All Items</button>
```
### `data-wml-window`
Any `wails.window` method can be called by adding the `data-wml-window` attribute to an element. The value of the attribute should be the name of the method to call. The method name should be in the same case as the method.
```html
<button data-wml-window="Close">Close Window</button>
```
### `data-wml-trigger`
This attribute specifies which javascript event should trigger the action. The default is `click`.
```html
<button data-wml-event="hover-box" data-wml-trigger="mouseover">Hover over me!</button>
```
## Systray
Wails 3 comes with a built-in systray. This is a fully featured systray that has been designed to be as simple as possible to use.
It is possible to set the icon, tooltip and menu of the systray. It is possible to also "attach" a window to the systray. Doing this will provide the following functionality:
- Clicking the systray icon with toggle the window visibility
- Right-clicking the systray will open the menu, if there is one
On macOS, if there is no attached window, the systray will use the default method of displaying the menu (any button).
If there is an attached window but no menu, the systray will toggle the window regardless of the button pressed.
## Plugins
Plugins are a way to extend the functionality of your Wails application.
### Creating a plugin
Plugins are standard Go structure that adhere to the following interface:
```go
type Plugin interface {
Name() string
Init(*application.App) error
Shutdown()
CallableByJS() []string
InjectJS() string
}
```
The `Name()` method returns the name of the plugin. This is used for logging purposes.
The `Init(*application.App) error` method is called when the plugin is loaded. The `*application.App`
parameter is the application that the plugin is being loaded into. Any errors will prevent
the application from starting.
The `Shutdown()` method is called when the application is shutting down.
The `CallableByJS()` method returns a list of exported functions that can be called from
the frontend. These method names must exactly match the names of the methods exported
by the plugin.
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.
### Tips
#### Enums
In Go, enums are often defined as a type and a set of constants. For example:
```go
type MyEnum int
const (
MyEnumOne MyEnum = iota
MyEnumTwo
MyEnumThree
)
```
Due to incompatibility between Go and JavaScript, custom types cannot be used in this way. The best strategy is to use a type alias for float64:
```go
type MyEnum = float64
const (
MyEnumOne MyEnum = iota
MyEnumTwo
MyEnumThree
)
```
In Javascript, you can then use the following:
```js
const MyEnum = {
MyEnumOne: 0,
MyEnumTwo: 1,
MyEnumThree: 2
}
```
- Why use `float64`? Can't we use `int`?
- Because JavaScript doesn't have a concept of `int`. Everything is a `number`, which translates to `float64` in Go. There are also restrictions on casting types in Go's reflection package, which means using `int` doesn't work.
### BackgroundColour
In v2, this was a pointer to an `RGBA` struct. In v3, this is an `RGBA` struct value.
### WindowIsTranslucent
This flag has been removed. Now there is a `BackgroundType` flag that can be used to set the type of background the window should have.
This flag can be set to any of the following values:
- `BackgroundTypeSolid` - The window will have a solid background
- `BackgroundTypeTransparent` - The window will have a transparent background
- `BackgroundTypeTranslucent` - The window will have a translucent background
On Windows, if the `BackgroundType` is set to `BackgroundTypeTranslucent`, the type of translucency can be set using the
`BackdropType` flag in the `WindowsWindow` options. This can be set to any of the following values:
- `Auto` - The window will use an effect determined by the system
- `None` - The window will have no background
- `Mica` - The window will use the Mica effect
- `Acrylic` - The window will use the acrylic effect
- `Tabbed` - The window will use the tabbed effect
## Windows Application Options
### WndProcInterceptor
If this is set, the WndProc will be intercepted and the function will be called. This allows you to handle Windows
messages directly. The function should have the following signature:
```go
func(hwnd uintptr, msg uint32, wParam, lParam uintptr) (returnValue uintptr, shouldReturn)
```
The `shouldReturn` value should be set to `true` if the returnValue should be returned by the main wndProc method.
If it is set to `false`, the return value will be ignored and the message will continue to be processed by the main
wndProc method.
## Hide Window on Close + OnBeforeClose
In v2, there was the `HideWindowOnClose` flag to hide the window when it closed. There was a logical overlap between
this flag and the `OnBeforeClose` callback. In v3, the `HideWindowOnClose` flag has been removed and the `OnBeforeClose`
callback has been renamed to `ShouldClose`. The `ShouldClose` callback is called when the user attempts to close a
window. If the callback returns `true`, the window will close. If it returns `false`, the window will not close.
This can be used to hide the window instead of closing it.
## Window Drag
In v2, the `--wails-drag` attribute was used to indicate that an element could be used to drag the window.
In v3, this has been replaced with `--webkit-app-region` to be more in line with the way other frameworks
handle this. The `--webkit-app-region` attribute can be set to any of the following values:
- `drag` - The element can be used to drag the window
- `no-drag` - The element cannot be used to drag the window
We would have ideally liked to use `app-region`, however this is not supported by the `getComputedStyle` call on
webkit on macOS.
@@ -0,0 +1,174 @@
# Introduction
!!! 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.
## Getting Started
- Git clone this repository. Checkout the `v3-alpha` branch.
- Install the CLI: `cd v3/cmd/wails3 && go install`
- Optional: If you are wanting to use the build system to build frontend code, you will need to install [npm](https://nodejs.org/en/download).
## Building
For simple programs, you can use the standard `go build` command. It's also possible to use `go run`.
Wails also comes with a build system that can be used to build more complex projects. It utilises the awesome [Task](https://taskfile.dev) build system.
For more information, check out the task homepage or run `wails task --help`.
## Project layout
The project has the following structure:
```
v3
├── cmd/wails3 // CLI
├── examples // Examples of Wails apps
├── internal // Internal packages
| ├── runtime // The Wails JS runtime
| └── templates // The supported project templates
├── pkg
| ├── application // The core Wails library
| └── events // The event definitions
| └── mac // macOS specific code used by plugins
| └── w32 // Windows specific code
├── plugins // Supported plugins
├── tasks // General tasks
└── Taskfile.yaml // Development tasks configuration
```
## Development
### Adding window functionality
The preferred way to add window functionality is to add a new function to the `pkg/application/webview_window.go` file. This should implement all the functionality required for all platforms. Any platform specific code should be called via a `webviewWindowImpl` interface method. This interface is implemented by each of the target platforms to provide the platform specific functionality. In some cases, this may do nothing.
Once you've added the interface method, ensure each platform implements it. A good example of this is the `SetMinSize` method.
- Mac: `webview_window_darwin.go`
- Windows: `webview_window_windows.go`
- Linux: `webview_window_linux.go`
Most, if not all, of the platform specific code should be run on the main thread. To simplify this, there are a number of `invokeSync` methods defined in `application.go`.
### Updating the runtime
The runtime is located in `v3/internal/runtime`. When the runtime is updated, the following steps need to be taken:
```shell
wails3 task runtime:build
```
### Events
Events are defined in `v3/pkg/events`. When adding a new event, the following steps need to be taken:
- Add the event to the `events.txt` file
- Run `wails3 task events:generate`
There are a number of types of events: platform specific application and window events + common events. The common events are useful for cross-platform event handling, but you aren't limited to the "lowest common denominator". You can use the platform specific events if you need to.
When adding a common event, ensure that the platform specific events are mapped. An example of this is in `window_webview_darwin.go`:
```go
// Translate ShouldClose to common WindowClosing event
w.parent.On(events.Mac.WindowShouldClose, func(_ *WindowEventContext) {
w.parent.emit(events.Common.WindowClosing)
})
```
NOTE: We may try to automate this in the future by adding the mapping to the event definition.
### Plugins
Plugins are a way to extend the functionality of your Wails application.
#### Creating a plugin
Plugins are standard Go structure that adhere to the following interface:
```go
type Plugin interface {
Name() string
Init(*application.App) error
Shutdown()
CallableByJS() []string
InjectJS() string
}
```
The `Name()` method returns the name of the plugin. This is used for logging purposes.
The `Init(*application.App) error` method is called when the plugin is loaded. The `*application.App`
parameter is the application that the plugin is being loaded into. Any errors will prevent
the application from starting.
The `Shutdown()` method is called when the application is shutting down.
The `CallableByJS()` method returns a list of exported functions that can be called from
the frontend. These method names must exactly match the names of the methods exported
by the plugin.
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.
## Misc Tasks
### Upgrading Taskfile
The Wails CLI uses the [Task](https://taskfile.dev) build system. It is imported as a library and used to run the tasks defined in `Taskfile.yaml`.
The main interfacing with Task happens in `v3/internal/commands/task.go`.
To check if there's an upgrade for Taskfile, run `wails3 task -version` and check against the Task website.
To upgrade the version of Taskfile used, run:
```shell
wails3 task taskfile:upgrade
```
If there are incompatibilities then they should appear in the `v3/internal/commands/task.go` file.
Usually the best way to fix incompatibilities is to clone the task repo at `https://github.com/go-task/task` and look at the git history to determine what has changed and why.
To check all changes have worked correctly, re-install the CLI and check the version again:
```shell
wails3 task cli:install
wails3 task -version
```
## Opening a PR
Make sure that all PRs have a ticket associated with them providing context to the change. If there is no ticket, please create one first.
Ensure that all PRs have updated the CHANGELOG.md file with the changes made. The CHANGELOG.md file is located in the `v3` directory.
## Misc Tasks
### Upgrading Taskfile
The Wails CLI uses the [Task](https://taskfile.dev) build system. It is imported as a library and used to run the tasks defined in `Taskfile.yaml`.
The main interfacing with Task happens in `v3/internal/commands/task.go`.
To check if there's an upgrade for Taskfile, run `wails3 task -version` and check against the Task website.
To upgrade the version of Taskfile used, run:
```shell
wails3 task taskfile:upgrade
```
If there are incompatibilities then they should appear in the `v3/internal/commands/task.go` file.
Usually the best way to fix incompatibilities is to clone the task repo at `https://github.com/go-task/task` and look at the git history to determine what has changed and why.
To check all changes have worked correctly, re-install the CLI and check the version again:
```shell
wails3 task cli:install
wails3 task -version
```
+413
View File
@@ -0,0 +1,413 @@
# Status
Status of features in v3.
!!! note
This list is a mixture of public and internal API support.<br/>
It is not complete and probably not up to date.
## Known Issues
- Linux is not yet up to feature parity with Windows/Mac
## Application
Application interface methods
| Method | Windows | Linux | Mac | Notes |
|---------------------------------------------------------------|---------|-------|-----|-------|
| run() error | Y | Y | Y | |
| destroy() | | Y | Y | |
| setApplicationMenu(menu *Menu) | Y | Y | Y | |
| name() string | | Y | Y | |
| getCurrentWindowID() uint | Y | Y | Y | |
| showAboutDialog(name string, description string, icon []byte) | | Y | Y | |
| setIcon(icon []byte) | - | Y | Y | |
| on(id uint) | | | Y | |
| dispatchOnMainThread(fn func()) | Y | Y | Y | |
| hide() | Y | Y | Y | |
| show() | Y | Y | Y | |
| getPrimaryScreen() (*Screen, error) | | Y | Y | |
| getScreens() ([]*Screen, error) | | Y | Y | |
## Webview Window
Webview Window Interface Methods
| Method | Windows | Linux | Mac | Notes |
|----------------------------------------------------|---------|-------|-----|------------------------------------------|
| center() | Y | Y | Y | |
| close() | y | Y | Y | |
| destroy() | | Y | Y | |
| execJS(js string) | y | Y | Y | |
| focus() | Y | Y | | |
| forceReload() | | Y | Y | |
| fullscreen() | Y | Y | Y | |
| getScreen() (*Screen, error) | y | Y | Y | |
| getZoom() float64 | | Y | Y | |
| height() int | Y | Y | Y | |
| hide() | Y | Y | Y | |
| isFullscreen() bool | Y | Y | Y | |
| isMaximised() bool | Y | Y | Y | |
| isMinimised() bool | Y | Y | Y | |
| maximise() | Y | Y | Y | |
| minimise() | Y | Y | Y | |
| nativeWindowHandle() (uintptr, error) | Y | Y | | |
| on(eventID uint) | y | | Y | |
| openContextMenu(menu *Menu, data *ContextMenuData) | y | | Y | |
| relativePosition() (int, int) | Y | Y | Y | |
| reload() | y | Y | Y | |
| run() | Y | Y | Y | |
| setAlwaysOnTop(alwaysOnTop bool) | Y | Y | Y | |
| setBackgroundColour(color RGBA) | Y | Y | Y | |
| setEnabled(bool) | | Y | Y | |
| setFrameless(bool) | | Y | Y | |
| setFullscreenButtonEnabled(enabled bool) | - | Y | Y | There is no fullscreen button in Windows |
| setHTML(html string) | Y | Y | Y | |
| setMaxSize(width, height int) | Y | Y | Y | |
| setMinSize(width, height int) | Y | Y | Y | |
| setRelativePosition(x int, y int) | Y | Y | Y | |
| setResizable(resizable bool) | Y | Y | Y | |
| setSize(width, height int) | Y | Y | Y | |
| setTitle(title string) | Y | Y | Y | |
| setURL(url string) | Y | Y | Y | |
| setZoom(zoom float64) | Y | Y | Y | |
| show() | Y | Y | Y | |
| size() (int, int) | Y | Y | Y | |
| toggleDevTools() | Y | Y | Y | |
| unfullscreen() | Y | Y | Y | |
| unmaximise() | Y | Y | Y | |
| unminimise() | Y | Y | Y | |
| width() int | Y | Y | Y | |
| zoom() | | Y | Y | |
| zoomIn() | Y | Y | Y | |
| zoomOut() | Y | Y | Y | |
| zoomReset() | Y | Y | Y | |
## Runtime
### Application
| Feature | Windows | Linux | Mac | Notes |
|---------|---------|-------|-----|-------|
| Quit | Y | Y | Y | |
| Hide | Y | | Y | |
| Show | Y | | Y | |
### Dialogs
| Feature | Windows | Linux | Mac | Notes |
|----------|---------|-------|-----|-------|
| Info | Y | Y | Y | |
| Warning | Y | Y | Y | |
| Error | Y | Y | Y | |
| Question | Y | Y | Y | |
| OpenFile | Y | | Y | |
| SaveFile | Y | | Y | |
### 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 | | | |
The default context menu is enabled by default for all elements that are `contentEditable: true`, `<input>`
or `<textarea>` tags or have the `--default-contextmenu: true` style set.
The `--default-contextmenu: show` style will always show the context menu
The `--default-contextmenu: hide` style will always hide the context menu
Anything nested under a tag with `--default-contextmenu: hide` style will not show the context menu unless it is
explicitly set with `--default-contextmenu: show`.
### Screens
| Feature | Windows | Linux | Mac | Notes |
|------------|---------|-------|-----|-------|
| GetAll | Y | Y | Y | |
| GetPrimary | Y | Y | Y | |
| GetCurrent | Y | Y | Y | |
### System
| Feature | Windows | Linux | Mac | Notes |
|------------|---------|-------|-----|-------|
| IsDarkMode | | | Y | |
### Window
Y = Supported
U = Untested
- = Not available
| Feature | Windows | Linux | Mac | Notes |
|---------------------|---------|-------|-----|--------------------------------------------------------------------------------------|
| Center | Y | Y | Y | |
| Focus | Y | Y | | |
| FullScreen | Y | Y | Y | |
| GetZoom | Y | Y | Y | Get current view scale |
| Height | Y | Y | Y | |
| Hide | Y | Y | Y | |
| Maximise | Y | Y | Y | |
| Minimise | Y | Y | Y | |
| RelativePosition | Y | Y | Y | |
| Screen | Y | Y | Y | Get screen for window |
| SetAlwaysOnTop | Y | Y | Y | |
| SetBackgroundColour | Y | Y | Y | https://github.com/MicrosoftEdge/WebView2Feedback/issues/1621#issuecomment-938234294 |
| SetEnabled | Y | U | U | Set the window to be enabled/disabled |
| SetMaxSize | Y | Y | Y | |
| SetMinSize | Y | Y | Y | |
| SetRelativePosition | Y | Y | Y | |
| SetResizable | Y | Y | Y | |
| SetSize | Y | Y | Y | |
| SetTitle | Y | Y | Y | |
| SetZoom | Y | Y | Y | Set view scale |
| Show | Y | Y | Y | |
| Size | Y | Y | Y | |
| UnFullscreen | Y | Y | Y | |
| UnMaximise | Y | Y | Y | |
| UnMinimise | Y | Y | Y | |
| Width | Y | Y | Y | |
| ZoomIn | Y | Y | Y | Increase view scale |
| ZoomOut | Y | Y | Y | Decrease view scale |
| ZoomReset | Y | Y | Y | Reset view scale |
### Window Options
A 'Y' in the table below indicates that the option has been tested and is 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 |
| CSS | Y | Y | | |
| DevToolsEnabled | Y | Y | Y | |
| DisableResize | Y | Y | | |
| EnableDragAndDrop | | Y | | |
| EnableFraudulentWebsiteWarnings | | | | |
| Focused | Y | Y | | |
| Frameless | Y | Y | | |
| FullscreenButtonEnabled | Y | | | |
| Height | Y | Y | | |
| Hidden | Y | Y | | |
| HTML | Y | Y | | |
| JS | Y | Y | | |
| Mac | - | - | | |
| MaxHeight | Y | Y | | |
| MaxWidth | Y | Y | | |
| MinHeight | Y | Y | | |
| MinWidth | Y | Y | | |
| Name | Y | Y | | |
| OpenInspectorOnStartup | | | | |
| StartState | Y | | | |
| Title | Y | Y | | |
| URL | Y | Y | | |
| Width | Y | Y | | |
| Windows | Y | - | - | |
| X | Y | Y | | |
| Y | Y | Y | | |
| Zoom | | | | |
| ZoomControlEnabled | | | | |
### Log
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) | - | | | |
| Menu | Y | | Y | |
### Methods
| Method | Windows | Linux | Mac | Notes |
|-------------------------------|---------|-------|-----|-------|
| setLabel(label string) | - | | Y | |
| run() | Y | | Y | |
| setIcon(icon []byte) | Y | | Y | |
| setMenu(menu *Menu) | Y | | Y | |
| setIconPosition(position int) | - | | Y | |
| setTemplateIcon(icon []byte) | - | | Y | |
| destroy() | Y | | Y | |
| setDarkModeIcon(icon []byte) | Y | | Y | |
## Cross Platform Events
Mapping native events to cross-platform events.
| Event | Windows | Linux | Mac | Notes |
|--------------------------|---------|-------|-----------------|-------|
| WindowWillClose | | | WindowWillClose | |
| WindowDidClose | | | | |
| WindowDidResize | | | | |
| WindowDidHide | | | | |
| ApplicationWillTerminate | | | | |
... Add more
## Bindings Generation
Working well.
## Models Generation
Working well.
## Task file
Contains a lot needed for development.
## Theme
| Mode | Windows | Linux | Mac | Notes |
|--------|---------|-------|-----|-------|
| Dark | Y | | | |
| Light | Y | | | |
| System | Y | | | |
## NSIS Installer
TBD
## Templates
All templates are working.
## Plugins
Built-in plugin support:
| Plugin | Windows | Linux | Mac | Notes |
|-----------------|---------|-------|-----|-------|
| Browser | Y | | Y | |
| KV Store | Y | Y | Y | |
| Log | Y | Y | Y | |
| Single Instance | Y | | Y | |
| SQLite | Y | Y | Y | |
| Start at login | Y | | Y | |
| Server | | | | |
TODO:
- Ensure each plugin has a JS wrapper that can be injected into the window.
## Packaging
| | Windows | Linux | Mac | Notes |
|-----------------|---------|-------|-----|-------|
| Icon Generation | Y | | Y | |
| Icon Embedding | Y | | Y | |
| Info.plist | - | | Y | |
| NSIS Installer | | | - | |
| Mac bundle | - | | Y | |
| Windows exe | Y | | - | |
## Frameless Windows
| Feature | Windows | Linux | Mac | Notes |
|---------|---------|-------|-----|------------------------------------------------|
| Resize | Y | | Y | |
| Drag | Y | Y | Y | Linux - can always drag with `Meta`+left mouse |
## Mac Specific
- [x] Translucency
### Mac Options
| Feature | Default | Notes |
|-------------------------|-------------------|------------------------------------------------------|
| Backdrop | MacBackdropNormal | Standard solid window |
| DisableShadow | false | |
| TitleBar | | Standard window decorations by default |
| Appearance | DefaultAppearance | |
| InvisibleTitleBarHeight | 0 | Creates an invisible title bar for frameless windows |
| DisableShadow | false | Disables the window drop shadow |
## Windows Specific
- [x] Translucency
- [x] Custom Themes
### Windows Options
| Feature | Default | Notes |
|-----------------------------------|---------------|---------------------------------------------|
| BackdropType | Solid | |
| DisableIcon | false | |
| Theme | SystemDefault | |
| CustomTheme | nil | |
| DisableFramelessWindowDecorations | false | |
| WindowMask | nil | Makes the window the contents of the bitmap |
## Linux Specific
Implementation details for the functions utilized by the `*_linux.go` files are located in the following files:
- linux_cgo.go: CGo implementation
- linux_purego.go: PureGo implementation
### CGO
By default CGO is utilized to compile the Linux port. This prevents easy cross-compilation and so the PureGo
implementation is also being simultaneously developed.
### Purego
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
## Examples
| Example | Windows | Linux | Mac |
|--------------|----------------------|-------|-----|
| binding | NO | | |
| build | Yes (Debug + Prod) | | |
| clipboard | Yes | | |
| contextmenus | Yes | | |
| dialogs | Almost | | |
| drag-n-drop | NO | | |
| events | NO | | |
| frameless | Yes | | |
| kitchensink | Yes | | |
| menu | Yes | | |
| plain | Yes | | |
| plugins | Yes | | |
| screen | Yes | | |
| systray | Yes | | Yes |
| window | Yes | | |
| windowjs | Example not complete | | |
| wml | Yes | | |
# Alpha Release TODO
- [ ] Check all runtime methods are available in the JS runtime
# Beta Release TODO
- [ ] Make better looking examples
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

@@ -0,0 +1,56 @@
# Feedback
We welcome (and encourage) your feedback! Here are the different ways to provide feedback:
=== "Bugs"
If you find a bug, please let us know by posting into the [v3 Alpha Feedback](https://discord.gg/3mgVyGua) channel on Discord:
- The post should clearly state what the bug is and have a simple reproducible example. If the docs are unclear what *should* happen, please include that in the post.
- The post should be given the `Bug` tag.
- Please include the output of `wails doctor` in your post.
- *Remember* unexpected behaviour isn't necessarily a bug - it might just not do what you expect it to do. Use [Suggestions](#suggestions) for this.
=== "Fixes"
If you have a fix for a bug or an update for documentation, please do the following:
- Open a pull request on the [Wails repository](https://github.com/wailsapp/wails). The title of the PR should start with `[v3]`.
- Create a post in the [v3 Alpha Feedback](https://discord.gg/3mgVyGua) channel.
- The post should be given the `PR` tag.
- Please include a link to the PR in your post.
=== "Suggestions"
If you have a suggestion, please let us know by posting into the [v3 Alpha Feedback](https://discord.gg/3mgVyGua) channel on Discord:
- The post should be given the `Suggestion` tag.
Please feel free to reach out to us on [Discord](https://discord.gg/3mgVyGua) if you have any questions.
=== "Upvoting"
- Posts can be "upvoted" by using the :thumbsup: emoji. Please apply to any posts that are a priority for you.
- 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 ....."
Things we are looking for feedback on:
- The API
- Is it easy to use?
- Does it do what you expect?
- Is it missing anything?
- Is there anything that should be removed?
- Is it consistent between Go and JS?
- The build system
- Is it easy to use?
- Can we improve it?
- The examples
- Are they clear?
- Do they cover the basics?
- Features
- What features are missing?
- What features are not needed?
- Documentation
- What could be clearer?
@@ -0,0 +1,74 @@
# Installation
To install the Wails CLI, ensure you have [Go 1.21+](https://go.dev/dl/) installed and run:
```shell
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
```
## Supported Platforms
- Windows 10/11 AMD64/ARM64
- MacOS 10.13+ AMD64
- MacOS 11.0+ ARM64
- Linux AMD64/ARM64
## Dependencies
Wails has a number of common dependencies that are required before installation:
=== "Go 1.21+"
Download Go from the [Go Downloads Page](https://go.dev/dl/).
Ensure that you follow the official [Go installation instructions](https://go.dev/doc/install). You will also need to ensure that your `PATH` environment variable also includes the path to your `~/go/bin` directory. Restart your terminal and do the following checks:
- Check Go is installed correctly: `go version`
- Check `~/go/bin` is in your PATH variable: `echo $PATH | grep go/bin`
=== "npm (Optional)"
Although Wails doesn't require npm to be installed, it is needed if you want to use the bundled templates.
Download the latest node installer from the [Node Downloads Page](https://nodejs.org/en/download/). It is best to use the latest release as that is what we generally test against.
Run `npm --version` to verify.
=== "Task (Optional)"
The Wails CLI embeds a task runner called [Task](https://taskfile.dev/#/installation). It is optional, but recommended. If you do not wish to install Task, you can use the `wails3 task` command instead of `task`.
Installing Task will give you the greatest flexibility.
## Platform Specific Dependencies
You will also need to install platform specific dependencies:
=== "Mac"
Wails requires that the xcode command line tools are installed. This can be
done by running:
```
xcode-select --install
```
=== "Windows"
Wails requires that the [WebView2 Runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/) is installed. Some Windows installations will already have this installed. You can check using the `wails doctor` command.
=== "Linux"
Linux requires the standard `gcc` build tools plus `libgtk3` and `libwebkit`. Rather than list a ton of commands for different distros, Wails can try to determine what the installation commands are for your specific distribution. Run <code>wails doctor</code> after installation to be shown how to install the dependencies. If your distro/package manager is not supported, please let us know on discord.
## System Check
Running `wails3 doctor` will check if you have the correct dependencies installed. If not, it will advise on what is missing and help on how to rectify any problems.
## The `wails3` command appears to be missing?
If your system is reporting that the `wails3` command is missing, check the following:
- Make sure you have followed the Go installation guide correctly.
- Check that the `go/bin` directory is in the `PATH` environment variable.
- Close/Reopen current terminals to pick up the new `PATH` variable.
@@ -0,0 +1,33 @@
# Next Steps
Now that you have Wails installed, you can start exploring the alpha version.
The best place to start is the `examples` directory in the Wails repository. This contains a number of examples that you can run and play with.
## Running an example
To run an example, you can simply use:
```shell
go run .
```
in the example directory.
## Creating a new project
To create a new project, you can use the `wails3 init` command. This will create a new project in the current directory.
Wails3 uses [Task](https://taskfile.dev) as its build system by default, although there is no reason why you can't
use your own build system, or use `go build` directly. Wails has the task build system built in and can be run using `wails3 task`.
If you look through the `Taskfile.yaml` file, you will see that there are a number of tasks defined. The most important
one is the `build` task. This is the task that is run when you use `wails3 build`.
The task file is unlikely to be complete and is subject to change over time.
## Building a project
To build a project, you can use the `wails3 build` command. This is a shortcut for `wails3 task build`.
+5
View File
@@ -0,0 +1,5 @@
---
template: home.html
---
Welcome to The Wails Project
+22
View File
@@ -0,0 +1,22 @@
[data-md-color-scheme="slate"] {
--md-hue: 208;
--md-primary-fg-color--light: #ECB7B7;
--md-primary-fg-color--dark: #90030C;
--md-accent-fg-color: #ff4646;
--md-primary-fg-color: #2a2a2a;
--md-default-bg-color: #191919;
--md-footer-bg-color--dark: #2a2a2a;
--md-default-fg-color: #e0e0e0;
}
.md-header__button.md-logo img, .md-header__button.md-logo svg {
fill: currentcolor;
display: block;
height: 2rem;
width: auto;
}
.md-typeset {
font-weight: 100;
}
+309
View File
@@ -0,0 +1,309 @@
# What's new in v3?
!!! note
The features that will be included in the v3 release may change from this list.
## Multiple Windows
It's now possible to create multiple windows and configure each one independently.
```go
package main
import (
_ "embed"
"log"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed assets/*
var assets embed.FS
func main() {
app := application.New(application.Options{
Name: "Multi Window Demo",
Assets: application.AssetOptions{
FS: assets,
},
})
window1 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "Window 1",
})
window2 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "Window 2",
})
// load the embedded html from the embed.FS
window1.SetURL("/")
window1.Center()
// Load an external URL
window2.SetURL("https://wails.app")
err := app.Run()
if err != nil {
log.Fatal(err.Error())
}
}
```
## Systrays
Systrays allow you to add an icon in the system tray area of your desktop and have the following features:
- Attach window (the window will be centered to the systray icon)
- Full menu support
- Light/Dark mode icons
```go
package main
import (
_ "embed"
"log"
"runtime"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/icons"
)
func main() {
app := application.New(application.Options{
Name: "Systray Demo",
Mac: application.MacOptions{
ActivationPolicy: application.ActivationPolicyAccessory,
},
})
window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Width: 500,
Height: 800,
Frameless: true,
AlwaysOnTop: true,
Hidden: true,
Windows: application.WindowsWindow{
HiddenOnTaskbar: true,
},
})
systemTray := app.NewSystemTray()
// Support for template icons on macOS
if runtime.GOOS == "darwin" {
systemTray.SetTemplateIcon(icons.SystrayMacTemplate)
} else {
// Support for light/dark mode icons
systemTray.SetDarkModeIcon(icons.SystrayDark)
systemTray.SetIcon(icons.SystrayLight)
}
// Support for menu
myMenu := app.NewMenu()
myMenu.Add("Hello World!").OnClick(func(_ *application.Context) {
println("Hello World!")
})
systemTray.SetMenu(myMenu)
// This will center the window to the systray icon with a 5px offset
// It will automatically be shown when the systray icon is clicked
// and hidden when the window loses focus
systemTray.AttachWindow(window).WindowOffset(5)
err := app.Run()
if err != nil {
log.Fatal(err)
}
}
```
## Plugins
Plugins allow you to extend the functionality of the Wails system. Not only can plugin methods be used in Go, but also called from Javascript. Included plugins:
- kvstore - A key/value store
- browser - open links in a browser
- log - custom logger
- oauth - handles oauth authentication and supports 60 providers
- single_instance - only allow one copy of your app to be run
- sqlite - add a sqlite db to your app. Uses the modernc pure go library
- start_at_login - Register/Unregister your application to start at login
## Improved bindings generation
v3 uses a new static analyser to generate bindings. This makes it extremely fast and maintains comments and parameter names in your bindings.
By default, bindings are generated with calls using IDs instead of strings. This provides a performance boost and allows
for using obfuscation tools such as [garble](https://github.com/burrowers/garble).
Bindings are generated by simply running `wails3 generate bindings` in the project directory.
```js
// @ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import {main} from './models';
window.go = window.go || {};
window.go.main = {
GreetService: {
/**
* GreetService.Greet
* Greet greets a person
* @param name {string}
* @returns {Promise<string>}
**/
Greet: function(name) { wails.CallByID(1411160069, ...Array.prototype.slice.call(arguments, 0)); },
/**
* GreetService.GreetPerson
* GreetPerson greets a person
* @param person {main.Person}
* @returns {Promise<string>}
**/
GreetPerson: function(person) { wails.CallByID(4021313248, ...Array.prototype.slice.call(arguments, 0)); },
},
};
```
## Improved build system
In v2, the build system was completely opaque and hard to customise.
In v3, it's possible to build everything using standard Go tooling.
All the heavy lifting that the v2 build system did, such as icon generation, have been added as tool commands in the CLI.
We have incorporated [Taskfile](https://taskfile.dev) into the CLI to orchestrate these calls to bring the same developer experience as v2.
However, this approach brings the ultimate balance of flexibility and ease of use as you can now customise the build process to your needs.
You can even use make if that's your thing!
```yaml title="Snippet from Taskfile.yml"
build:darwin:
summary: Builds the application
platforms:
- darwin
cmds:
- task: pre-build
- task: build-frontend
- go build -gcflags=all="-N -l" -o bin/{{.APP_NAME}}
- task: post-build
env:
CGO_CFLAGS: "-mmacosx-version-min=10.13"
CGO_LDFLAGS: "-mmacosx-version-min=10.13"
MACOSX_DEPLOYMENT_TARGET: "10.13"
```
## Improved events
Events are now emitted for a lot of the runtime operations, allowing you to hook into application/system events. Cross-platform (common) events are also emitted where there are common platform events, allowing you to write the same event handling methods cross platform.
Event hooks can also be registered. These are like the `On` method but are synchronous and allow you to cancel the event. An example of this would be to show a confirmation dialog before closing a window.
```go
package main
import (
_ "embed"
"log"
"time"
"github.com/wailsapp/wails/v3/pkg/application"
"github.com/wailsapp/wails/v3/pkg/events"
)
//go:embed assets
var assets embed.FS
func main() {
app := application.New(application.Options{
Name: "Events Demo",
Description: "A demo of the Events API",
Assets: application.AssetOptions{
FS: assets,
},
Mac: application.MacOptions{
ApplicationShouldTerminateAfterLastWindowClosed: true,
},
})
// Custom event handling
app.Events.On("myevent", func(e *application.WailsEvent) {
log.Printf("[Go] WailsEvent received: %+v\n", e)
})
// OS specific application events
app.On(events.Mac.ApplicationDidFinishLaunching, func(event *application.Event) {
println("events.Mac.ApplicationDidFinishLaunching fired!")
})
// Platform agnostic events
app.On(events.Common.ApplicationStarted, func(event *application.Event) {
println("events.Common.ApplicationStarted fired!")
})
win1 := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "Takes 3 attempts to close me!",
})
var countdown = 3
// Register a hook to cancel the window closing
win1.RegisterHook(events.Common.WindowClosing, func(e *application.WindowEvent) {
countdown--
if countdown == 0 {
println("Closing!")
return
}
println("Nope! Not closing!")
e.Cancel()
})
win1.On(events.Common.WindowFocus, func(e *application.WindowEvent) {
println("[Event] Window focus!")
})
err := app.Run()
if err != nil {
log.Fatal(err.Error())
}
}
```
## Wails Markup Language (wml)
An experimental feature to call runtime methods using plain html, similar to [htmx](https://htmx.org).
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Wails ML Demo</title>
</head>
<body style="margin-top:50px; color: white; background-color: #191919">
<h2>Wails ML Demo</h2>
<p>This application contains no Javascript!</p>
<button data-wml-event="button-pressed">Press me!</button>
<button data-wml-event="delete-things" data-wml-confirm="Are you sure?">Delete all the things!</button>
<button data-wml-window="Close" data-wml-confirm="Are you sure?">Close the Window?</button>
<button data-wml-window="Center">Center</button>
<button data-wml-window="Minimise">Minimise</button>
<button data-wml-window="Maximise">Maximise</button>
<button data-wml-window="UnMaximise">UnMaximise</button>
<button data-wml-window="Fullscreen">Fullscreen</button>
<button data-wml-window="UnFullscreen">UnFullscreen</button>
<button data-wml-window="Restore">Restore</button>
<div style="width: 200px; height: 200px; border: 2px solid white;" data-wml-event="hover" data-wml-trigger="mouseover">Hover over me</div>
</body>
</html>
```
+5
View File
@@ -0,0 +1,5 @@
INHERIT: mkdocs.yml
plugins:
- search
- social
- tags
+115
View File
@@ -0,0 +1,115 @@
site_name: "alpha"
site_description: The Wails Project - Build beautiful cross-platform applications using Go
repo_url: https://github.com/wailsapp/wails
edit_uri: edit/v3-alpha/mkdocs-website/docs/
theme:
name: material
custom_dir: overrides
logo: assets/images/wails-logo-horizontal-dark.svg
icon:
repo: fontawesome/brands/github
favicon: /favicon.ico
features:
- navigation.tabs
- navigation.sections
- navigation.expand
- navigation.instant
- navigation.instant.prefetch
- navigation.top
- navigation.footer
- navigation.path
- navigation.prune
- toc.integrate
- toc.follow
- search.suggest
- search.highlight
- search.share
- content.tabs.link
- content.tabs.annotation
- content.tabs.copy
- content.code.copy
- content.action.edit
language: en
palette:
# Palette toggle for light mode
- media: "(prefers-color-scheme: light)"
scheme: default
toggle:
icon: material/toggle-switch-off-outline
name: Switch to dark mode
# Palette toggle for dark mode
- media: "(prefers-color-scheme: dark)"
scheme: slate
toggle:
icon: material/toggle-switch
name: Switch to light mode
extra:
social:
- icon: fontawesome/brands/github-alt
link: https://github.com/wailsapp/wails
- icon: fontawesome/brands/twitter
link: https://twitter.com/wailsapp
- icon: fontawesome/brands/discord
link: https://discord.gg/JDdSxwjhGf
extra_css:
- stylesheets/extra.css
nav:
- Home: index.md
- Getting started:
# - Introduction: introduction.md
- Installation: getting-started/installation.md
# - Creating a Project: getting-started/creating-a-project.md
# - How does it work: how-does-it-work.md
# - Developing your Application: getting-started/developing-your-application.md
# - Compiling your Project: getting-started/compiling-your-project.md
# - API Reference:
# - Runtime:
# - Introduction: reference/runtime/introduction.md
# - CLI: reference/cli.md
# - Community:
# - Template: community/templates.md
# - Guides:
# - Angular: guides/angular.md
# - Showcase:
# - Emaillit: community/showcase/emailit.md
# - Contributing: community/contributing.md
# - Links: community/links.md
- Next Steps: getting-started/next-steps.md
- Feedback: getting-started/feedback.md
- What's New in v3?: whats-new.md
- Development:
- Introduction: development/introduction.md
- Status: development/status.md
- v3 Changes: development/changes.md
- Change Log: changelog.md
- Sponsor❤️: https://github.com/sponsors/leaanthony
markdown_extensions:
- pymdownx.tabbed:
alternate_style: true
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.inlinehilite
- pymdownx.snippets
- pymdownx.details
- pymdownx.superfences
- pymdownx.mark
- attr_list
- admonition
- footnotes
- pymdownx.emoji:
emoji_index: !!python/name:materialx.emoji.twemoji
emoji_generator: !!python/name:materialx.emoji.to_svg
copyright:
Copyright © 2023 Lea Anthony
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

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