## Summary of Refactoring
### 1. **Common File** (`jumplist.go`)
- Contains all shared structs: `JumpListItemType`, `JumpListItem`, `JumpListCategory`, and `JumpList`
- Implements common methods: `AddCategory()`, `ClearCategories()`, and `Apply()`
- The `Apply()` method calls the platform-specific `applyPlatform()` method
### 2. **Platform-Specific Files**
- **Windows** (`jumplist_windows.go`): Contains only Windows-specific implementation
- COM interface definitions and implementations
- `CreateJumpList()` method for windowsApp
- `applyPlatform()` method with the actual Windows jumplist logic
- **macOS** (`jumplist_darwin.go`): Minimal stub implementation
- `CreateJumpList()` method for darwinApp
- `applyPlatform()` method that returns nil (no-op)
- **Linux** (`jumplist_linux.go`): Minimal stub implementation
- `CreateJumpList()` method for linuxApp
- `applyPlatform()` method that returns nil (no-op)
### Benefits
- **No code duplication**: All common structs and logic are in one place
- **Cleaner platform files**: Platform-specific files only contain platform-specific code
- **Easier maintenance**: Changes to the API only need to be made in one place
- **Type safety**: The common interface ensures all platforms implement the required methods
The API remains exactly the same for users, but the implementation is now much cleaner and more maintainable.
I've successfully implemented Windows Jumplists for Wails v3 with the following features:
### 1. **Windows Implementation** (`jumplist_windows.go`)
- Full COM interface implementation for ICustomDestinationList, IShellLink, IPropertyStore, and IObjectCollection
- Support for custom categories and tasks
- Runtime configuration capabilities
- Proper error handling and cleanup
### 2. **Cross-Platform Stubs**
- Created stub implementations for macOS (`jumplist_darwin.go`) and Linux (`jumplist_linux.go`)
- These are no-ops that prevent compilation errors on non-Windows platforms
### 3. **API Integration**
- Added `CreateJumpList()` method to the main App struct
- Platform-specific dispatch to the correct implementation
### 4. **Example Application**
- Created a complete example in `v3/examples/jumplist/`
- Demonstrates custom categories, tasks, and runtime configuration
- Includes comprehensive documentation
### Key Features:
- **Custom Categories**: Applications can create named categories like "Recent Documents"
- **Tasks**: Common application tasks that appear at the bottom of the jump list
- **Runtime Configuration**: Jump lists can be updated at any time during application execution
- **Cross-Platform Safe**: The API gracefully handles non-Windows platforms
### Usage Example:
```go
jumpList := app.CreateJumpList()
jumpList.AddCategory(application.JumpListCategory{
Name: "Recent Files",
Items: []application.JumpListItem{
{
Type: application.JumpListItemTypeTask,
Title: "Document.txt",
FilePath: "path/to/app.exe",
Arguments: "--open Document.txt",
},
},
})
jumpList.Apply()
```
The implementation follows Windows jumplist specifications and integrates seamlessly with the existing Wails v3 architecture.
- disable output of `import <model> from models` line
- update README to generate bindings in usable location for HTML
- update HTML to reference bindings correctly
- update javascript to call and process the bound Greet function
* Fixes doctor bug for apt package manager
* Actually fix it
* Pad the text " all"
Adding a space to ensure checking against "all" doesn't always catch "install" or "not-installed" etc
* Update changelog.md
Doctor Apt Verify
---------
Co-authored-by: atterpac <michael@atterpac.dev>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
* [v3 linux/systray] dbus generation
* [v3 linux] systemtray dbus implementation
* [v3] add 'id' for MenuSeparator
This is needed in order to have a unique value for all
menuItem(s) such that the Linux implementation doesn't have to
generate new identifiers.
Allowing the reuse keeps a 1-1 mapping in place without any extra effort.
* [v3 example/systray] add radio group to example
* [v3 linux] stub out ExportStatusNotifierItem callbacks
Can only seem to get the `SecondaryActivate` to fire when doing a
3-finger click! I was expecting a right-click interaction to trigger it.