Skip to content

Commit

Permalink
Significant updates to mac menu items. More roles. More fixes to come.
Browse files Browse the repository at this point in the history
  • Loading branch information
leaanthony committed Sep 12, 2024
1 parent ef8c886 commit 6787ce9
Show file tree
Hide file tree
Showing 18 changed files with 743 additions and 559 deletions.
6 changes: 4 additions & 2 deletions mkdocs-website/docs/en/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [linux] Fixed linux compile error introduced by IgnoreMouseEvents addition by [atterpac](https://github.com/atterpac) in [#3721](https://github.com/wailsapp/wails/pull/3721)
- [windows] Fixed syso icon file generation bug by [atterpac](https://github.com/atterpac) in [#3675](https://github.com/wailsapp/wails/pull/3675)
- [linux] Fix to run natively in wayland incorporated from [#1811](https://github.com/wailsapp/wails/pull/1811) in [#3614](https://github.com/wailsapp/wails/pull/3614) by [@stendler](https://github.com/stendler)
- Do not bind internal service methods in [#3720](https://github.com/wailsapp/wails/pull/3720)
by [leaanthony](https://github.com/leaanthony)
- Do not bind internal service methods in [#3720](https://github.com/wailsapp/wails/pull/3720) by [leaanthony](https://github.com/leaanthony)
- [windows] Fixed system tray startup panic in [#3693](https://github.com/wailsapp/wails/issues/3693) by [@DeltaLaboratory](https://github.com/DeltaLaboratory)
- Do not bind internal service methods in [#3720](https://github.com/wailsapp/wails/pull/3720) by [leaanthony](https://github.com/leaanthony)
- [windows] Fixed system tray startup panic in [#3693](https://github.com/wailsapp/wails/issues/3693) by [@DeltaLaboratory](https://github.com/DeltaLaboratory)
- Major menu item refactor and event handling. Mainly improves macOS for now. By [leaanthony](https://github.com/leaanthony)

## v3.0.0-alpha.6 - 2024-07-30

Expand Down
4 changes: 4 additions & 0 deletions v3/examples/dialogs/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ func main() {
// Create a custom menu
menu := app.NewMenu()
menu.AddRole(application.AppMenu)
menu.AddRole(application.EditMenu)
menu.AddRole(application.WindowMenu)
menu.AddRole(application.ServicesMenu)
menu.AddRole(application.HelpMenu)

// Let's make a "Demo" menu
infoMenu := menu.AddSubmenu("Info")
Expand Down
13 changes: 13 additions & 0 deletions v3/examples/menu/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@ func main() {
if runtime.GOOS == "darwin" {
menu.AddRole(application.AppMenu)
}
fileMenu := menu.AddRole(application.FileMenu)
_ = fileMenu
//fileMenu.FindByRole(application.Open).OnClick(func(context *application.Context) {
// selection, err := application.OpenFileDialog().PromptForSingleSelection()
// if err != nil {
// println("Error: " + err.Error())
// return
// }
// println("You selected: " + selection)
//})
menu.AddRole(application.EditMenu)
menu.AddRole(application.WindowMenu)
menu.AddRole(application.HelpMenu)

// Let's make a "Demo" menu
myMenu := menu.AddSubmenu("Demo")
Expand Down
5 changes: 3 additions & 2 deletions v3/examples/systray/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func main() {

systemTray := app.NewSystemTray()

window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
_ = app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Width: 500,
Height: 800,
Name: "Systray Demo Window",
Expand Down Expand Up @@ -92,7 +92,8 @@ func main() {
})

systemTray.SetMenu(myMenu)
systemTray.AttachWindow(window).WindowOffset(5)

//systemTray.AttachWindow(window).WindowOffset(5)

err := app.Run()
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion v3/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ require (
github.com/pterm/pterm v0.12.51
github.com/samber/lo v1.38.1
github.com/tc-hib/winres v0.3.1
github.com/wailsapp/go-webview2 v1.0.11
github.com/wailsapp/go-webview2 v1.0.15
github.com/wailsapp/mimetype v1.4.1
golang.org/x/sys v0.20.0
golang.org/x/term v0.20.0
Expand Down
2 changes: 2 additions & 0 deletions v3/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,8 @@ github.com/tc-hib/winres v0.3.1 h1:CwRjEGrKdbi5CvZ4ID+iyVhgyfatxFoizjPhzez9Io4=
github.com/tc-hib/winres v0.3.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk=
github.com/wailsapp/go-webview2 v1.0.11 h1:CDbU4UQpaERY6M/FGObPGzUsFOHH3Yz+go12qnJINNY=
github.com/wailsapp/go-webview2 v1.0.11/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo=
github.com/wailsapp/go-webview2 v1.0.15 h1:IeQFoWmsHp32y64I41J+Zod3SopjHs918KSO4jUqEnY=
github.com/wailsapp/go-webview2 v1.0.15/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo=
github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs=
github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
Expand Down
17 changes: 17 additions & 0 deletions v3/pkg/application/menu.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,23 @@ func (m *Menu) FindByLabel(label string) *MenuItem {
return nil
}

// FindByRole recursively searches for a menu item with the given role
// and returns the first match, or nil if not found.
func (m *Menu) FindByRole(role Role) *MenuItem {
for _, item := range m.items {
if item.role == role {
return item
}
if item.submenu != nil {
found := item.submenu.FindByRole(role)
if found != nil {
return found
}
}
}
return nil
}

func (m *Menu) RemoveMenuItem(target *MenuItem) {
for i, item := range m.items {
if item == target {
Expand Down
113 changes: 80 additions & 33 deletions v3/pkg/application/menuitem.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,77 +116,119 @@ func NewSubMenuItem(label string) *MenuItem {
}

func NewRole(role Role) *MenuItem {
var result *MenuItem
switch role {
case AppMenu:
return newAppMenu()
result = NewAppMenu()
case EditMenu:
return newEditMenu()
result = NewEditMenu()
case FileMenu:
return newFileMenu()
result = NewFileMenu()
case ViewMenu:
return newViewMenu()
result = NewViewMenu()
case ServicesMenu:
return NewServicesMenu()
case SpeechMenu:
return newSpeechMenu()
result = NewSpeechMenu()
case WindowMenu:
return newWindowMenu()
result = NewWindowMenu()
case HelpMenu:
return newHelpMenu()
result = NewHelpMenu()
case Hide:
return newHideMenuItem()
result = NewHideMenuItem()
case Front:
result = NewFrontMenuItem()
case HideOthers:
return newHideOthersMenuItem()
result = NewHideOthersMenuItem()
case UnHide:
return newUnhideMenuItem()
result = NewUnhideMenuItem()
case Undo:
return newUndoMenuItem()
result = NewUndoMenuItem()
case Redo:
return newRedoMenuItem()
result = NewRedoMenuItem()
case Cut:
return newCutMenuItem()
result = NewCutMenuItem()
case Copy:
return newCopyMenuItem()
result = NewCopyMenuItem()
case Paste:
return newPasteMenuItem()
result = NewPasteMenuItem()
case PasteAndMatchStyle:
return newPasteAndMatchStyleMenuItem()
result = NewPasteAndMatchStyleMenuItem()
case SelectAll:
return newSelectAllMenuItem()
result = NewSelectAllMenuItem()
case Delete:
return newDeleteMenuItem()
result = NewDeleteMenuItem()
case Quit:
return newQuitMenuItem()
case Close:
return newCloseMenuItem()
result = NewQuitMenuItem()
case CloseWindow:
result = NewCloseMenuItem()
case About:
return newAboutMenuItem()
result = NewAboutMenuItem()
case Reload:
return newReloadMenuItem()
result = NewReloadMenuItem()
case ForceReload:
return newForceReloadMenuItem()
result = NewForceReloadMenuItem()
case ToggleFullscreen:
return newToggleFullscreenMenuItem()
result = NewToggleFullscreenMenuItem()
case OpenDevTools:
return newOpenDevToolsMenuItem()
result = NewOpenDevToolsMenuItem()
case ResetZoom:
return newZoomResetMenuItem()
result = NewZoomResetMenuItem()
case ZoomIn:
return newZoomInMenuItem()
result = NewZoomInMenuItem()
case ZoomOut:
return newZoomOutMenuItem()
result = NewZoomOutMenuItem()
case Minimize:
return newMinimizeMenuItem()
result = NewMinimizeMenuItem()
case Zoom:
return newZoomMenuItem()
result = NewZoomMenuItem()
case FullScreen:
return newFullScreenMenuItem()
result = NewFullScreenMenuItem()
case Print:
result = NewPrintMenuItem()
case PageLayout:
result = NewPageLayoutMenuItem()
case NoRole:
case ShowAll:
result = NewShowAllMenuItem()
case BringAllToFront:
result = NewBringAllToFrontMenuItem()
case NewFile:
result = NewNewFileMenuItem()
case Open:
result = NewOpenMenuItem()
case Save:
result = NewSaveMenuItem()
case SaveAs:
result = NewSaveAsMenuItem()
case StartSpeaking:
result = NewStartSpeakingMenuItem()
case StopSpeaking:
result = NewStopSpeakingMenuItem()
case Revert:
result = NewRevertMenuItem()
case Find:
result = NewFindMenuItem()
case FindAndReplace:
result = NewFindAndReplaceMenuItem()
case FindNext:
result = NewFindNextMenuItem()
case FindPrevious:
result = NewFindPreviousMenuItem()
case Help:
result = NewHelpMenuItem()

default:
globalApplication.error(fmt.Sprintf("No support for role: %v", role))
os.Exit(1)
}
return nil

if result == nil {
return nil
}

result.role = role
return result
}

func NewServicesMenu() *MenuItem {
Expand Down Expand Up @@ -256,6 +298,11 @@ func (m *MenuItem) SetTooltip(s string) *MenuItem {
return m
}

func (m *MenuItem) SetRole(role Role) *MenuItem {
m.role = role
return m
}

func (m *MenuItem) SetLabel(s string) *MenuItem {
m.label = s
if m.impl != nil {
Expand Down
Loading

0 comments on commit 6787ce9

Please sign in to comment.