mirror of
https://github.com/wailsapp/wails.git
synced 2026-03-14 22:55:48 +01:00
[v3 windows] Support context menus
This commit is contained in:
parent
6092730acc
commit
3433b8ce8f
4 changed files with 24 additions and 14 deletions
|
|
@ -46,7 +46,7 @@ Webview Window Interface Methods
|
|||
| minimise() | Y | | Y | |
|
||||
| nativeWindowHandle() (uintptr, error) | Y | | Y | |
|
||||
| on(eventID uint) | Y | | Y | |
|
||||
| openContextMenu(menu *Menu, data *ContextMenuData) | | | Y | |
|
||||
| openContextMenu(menu *Menu, data *ContextMenuData) | Y | | Y | |
|
||||
| position() (int, int) | Y | | Y | |
|
||||
| reload() | Y | | Y | |
|
||||
| run() | Y | | Y | |
|
||||
|
|
|
|||
|
|
@ -177,10 +177,10 @@ func (p *Win32Menu) ShowAtCursor() {
|
|||
|
||||
}
|
||||
|
||||
func (p *Win32Menu) ProcessCommand(cmdMsgID int) {
|
||||
func (p *Win32Menu) ProcessCommand(cmdMsgID int) bool {
|
||||
item := p.menuMapping[cmdMsgID]
|
||||
if item == nil {
|
||||
return
|
||||
return false
|
||||
}
|
||||
if item.IsRadio() {
|
||||
item.checked = true
|
||||
|
|
@ -189,6 +189,7 @@ func (p *Win32Menu) ProcessCommand(cmdMsgID int) {
|
|||
if item.callback != nil {
|
||||
item.handleClick()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *Win32Menu) Destroy() {
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ func (s *windowsSystemTray) wndProc(msg uint32, wParam, lParam uintptr) uintptr
|
|||
}
|
||||
//println(w32.WMMessageToString(msg))
|
||||
|
||||
// TODO: Menu processing
|
||||
// Menu processing
|
||||
case w32.WM_COMMAND:
|
||||
cmdMsgID := int(wParam & 0xffff)
|
||||
switch cmdMsgID {
|
||||
|
|
|
|||
|
|
@ -27,10 +27,11 @@ import (
|
|||
var showDevTools = func(chromium *edge.Chromium) {}
|
||||
|
||||
type windowsWebviewWindow struct {
|
||||
windowImpl unsafe.Pointer
|
||||
parent *WebviewWindow
|
||||
hwnd w32.HWND
|
||||
menu *Win32Menu
|
||||
windowImpl unsafe.Pointer
|
||||
parent *WebviewWindow
|
||||
hwnd w32.HWND
|
||||
menu *Win32Menu
|
||||
currentlyOpenContextMenu *Win32Menu
|
||||
|
||||
// Fullscreen flags
|
||||
isCurrentlyFullscreen bool
|
||||
|
|
@ -540,9 +541,9 @@ func newWindowImpl(parent *WebviewWindow) *windowsWebviewWindow {
|
|||
|
||||
func (w *windowsWebviewWindow) openContextMenu(menu *Menu, data *ContextMenuData) {
|
||||
// Create the menu
|
||||
thisMenu := newMenuImpl(menu)
|
||||
thisMenu.update()
|
||||
//C.windowShowMenu(w.nsWindow, thisMenu.nsMenu, C.int(data.X), C.int(data.Y))
|
||||
thisMenu := NewPopupMenu(w.hwnd, menu)
|
||||
w.currentlyOpenContextMenu = thisMenu
|
||||
thisMenu.ShowAtCursor()
|
||||
}
|
||||
|
||||
func (w *windowsWebviewWindow) setStyle(b bool, style int) {
|
||||
|
|
@ -568,7 +569,7 @@ func (w *windowsWebviewWindow) setBackdropType(backdropType BackdropType) {
|
|||
var data w32.WINDOWCOMPOSITIONATTRIBDATA
|
||||
data.Attrib = w32.WCA_ACCENT_POLICY
|
||||
data.PvData = w32.PVOID(&accent)
|
||||
data.CbData = w32.SIZE_T(unsafe.Sizeof(accent))
|
||||
data.CbData = unsafe.Sizeof(accent)
|
||||
|
||||
w32.SetWindowCompositionAttribute(w.hwnd, &data)
|
||||
} else {
|
||||
|
|
@ -730,13 +731,21 @@ func (w *windowsWebviewWindow) WndProc(msg uint32, wparam, lparam uintptr) uintp
|
|||
}
|
||||
}
|
||||
|
||||
if w.menu != nil {
|
||||
if w.menu != nil || w.currentlyOpenContextMenu != nil {
|
||||
switch msg {
|
||||
case w32.WM_COMMAND:
|
||||
cmdMsgID := int(wparam & 0xffff)
|
||||
switch cmdMsgID {
|
||||
default:
|
||||
w.menu.ProcessCommand(cmdMsgID)
|
||||
var processed bool
|
||||
if w.currentlyOpenContextMenu != nil {
|
||||
processed = w.currentlyOpenContextMenu.ProcessCommand(cmdMsgID)
|
||||
w.currentlyOpenContextMenu = nil
|
||||
|
||||
}
|
||||
if !processed && w.menu != nil {
|
||||
processed = w.menu.ProcessCommand(cmdMsgID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue