5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-21 19:39:29 +08:00
This commit is contained in:
Travis McLane 2023-04-27 17:08:15 -05:00
parent cb1859a710
commit f87ec9d401
3 changed files with 47 additions and 16 deletions

View File

@ -7,7 +7,7 @@ import (
"log" "log"
"os" "os"
"strings" "strings"
"time" "sync"
"github.com/ebitengine/purego" "github.com/ebitengine/purego"
"github.com/wailsapp/wails/v2/pkg/assetserver/webview" "github.com/wailsapp/wails/v2/pkg/assetserver/webview"
@ -55,6 +55,10 @@ type linuxApp struct {
application uintptr application uintptr
applicationMenu uintptr applicationMenu uintptr
parent *App parent *App
// Native -> uint
windows map[uintptr]uint
windowsLock sync.Mutex
} }
func (m *linuxApp) hide() { func (m *linuxApp) hide() {
@ -67,6 +71,7 @@ func (m *linuxApp) show() {
func (m *linuxApp) on(eventID uint) { func (m *linuxApp) on(eventID uint) {
log.Println("linuxApp.on()", eventID) log.Println("linuxApp.on()", eventID)
// TODO: Setup signal handling as appropriate // TODO: Setup signal handling as appropriate
// Note: GTK signals seem to be strings! // Note: GTK signals seem to be strings!
} }
@ -80,15 +85,19 @@ func (m *linuxApp) name() string {
} }
func (m *linuxApp) getCurrentWindowID() uint { func (m *linuxApp) getCurrentWindowID() uint {
fmt.Println("getCurrentWindowID")
var getCurrentWindow func(uintptr) uintptr var getCurrentWindow func(uintptr) uintptr
purego.RegisterLibFunc(&getCurrentWindow, gtk, "gtk_application_get_active_window") purego.RegisterLibFunc(&getCurrentWindow, gtk, "gtk_application_get_active_window")
// window := getCurrentWindow(m.application) window := getCurrentWindow(m.application)
// if window != 0 { if window == 0 {
// webview := (*WebviewWindow)(window) return 1
// return webview.id }
// } m.windowsLock.Lock()
return uint(1) defer m.windowsLock.Unlock()
if identifier, ok := m.windows[window]; ok {
return identifier
}
return 1
} }
func (m *linuxApp) setApplicationMenu(menu *Menu) { func (m *linuxApp) setApplicationMenu(menu *Menu) {
@ -96,19 +105,21 @@ func (m *linuxApp) setApplicationMenu(menu *Menu) {
// Create a default menu // Create a default menu
menu = defaultApplicationMenu() menu = defaultApplicationMenu()
} }
globalApplication.dispatchOnMainThread(func() {
menu.Update() menu.Update()
m.applicationMenu = (menu.impl).(*linuxMenu).native m.applicationMenu = (menu.impl).(*linuxMenu).native
})
} }
func (m *linuxApp) activate() { func (m *linuxApp) activate() {
fmt.Println("linuxApp.activated!", m.application) fmt.Println("linuxApp.activated!", m.application)
var hold func(uintptr) var hold func(uintptr)
purego.RegisterLibFunc(&hold, gtk, "g_application_hold") purego.RegisterLibFunc(&hold, gtk, "g_application_hold")
hold(m.application) hold(m.application)
time.Sleep(50 * time.Millisecond) // time.Sleep(50 * time.Millisecond)
m.parent.activate() // m.parent.activate()
} }
func (m *linuxApp) run() error { func (m *linuxApp) run() error {
@ -119,6 +130,11 @@ func (m *linuxApp) run() error {
fmt.Println("ApplicationDidFinishLaunching!") fmt.Println("ApplicationDidFinishLaunching!")
}) })
*/ */
m.parent.OnWindowCreation(func(window *WebviewWindow) {
fmt.Println("OnWindowCreation: ", window)
})
var g_signal_connect func(uintptr, string, uintptr, uintptr, bool, int) int var g_signal_connect func(uintptr, string, uintptr, uintptr, bool, int) int
purego.RegisterLibFunc(&g_signal_connect, gtk, "g_signal_connect_data") purego.RegisterLibFunc(&g_signal_connect, gtk, "g_signal_connect_data")
g_signal_connect(m.application, "activate", purego.NewCallback(m.activate), m.application, false, 0) g_signal_connect(m.application, "activate", purego.NewCallback(m.activate), m.application, false, 0)
@ -146,6 +162,12 @@ func (m *linuxApp) destroy() {
quit(m.application) quit(m.application)
} }
func (m *linuxApp) registerWindow(address uintptr, window uint) {
m.windowsLock.Lock()
m.windows[address] = window
m.windowsLock.Unlock()
}
func newPlatformApp(parent *App) *linuxApp { func newPlatformApp(parent *App) *linuxApp {
name := strings.ToLower(parent.options.Name) name := strings.ToLower(parent.options.Name)
if name == "" { if name == "" {
@ -159,6 +181,7 @@ func newPlatformApp(parent *App) *linuxApp {
appName: identifier, appName: identifier,
parent: parent, parent: parent,
application: gtkNew(identifier, 0), application: gtkNew(identifier, 0),
windows: map[uintptr]uint{},
} }
return app return app
} }

View File

@ -166,3 +166,14 @@ func (l *linuxMenu) createMenu(name string, items []*MenuItem) *Menu {
impl.menu = menu impl.menu = menu
return menu return menu
} }
func defaultApplicationMenu() *Menu {
menu := NewMenu()
menu.AddRole(AppMenu)
menu.AddRole(FileMenu)
menu.AddRole(EditMenu)
menu.AddRole(ViewMenu)
menu.AddRole(WindowMenu)
menu.AddRole(HelpMenu)
return menu
}

View File

@ -122,11 +122,9 @@ func newMenuItemImpl(item *MenuItem) *linuxMenuItem {
switch item.itemType { switch item.itemType {
case text: case text:
fmt.Println("text", item.label)
result.native = newWithLabel(item.label) result.native = newWithLabel(item.label)
case checkbox: case checkbox:
fmt.Println("cb", item.label)
result.native = newCBWithLabel(item.label) result.native = newCBWithLabel(item.label)
result.setChecked(item.checked) result.setChecked(item.checked)
if item.accelerator != nil { if item.accelerator != nil {
@ -136,7 +134,6 @@ func newMenuItemImpl(item *MenuItem) *linuxMenuItem {
panic("Shouldn't get here with a radio item") panic("Shouldn't get here with a radio item")
case submenu: case submenu:
fmt.Println("submenu", item.label)
result.native = newWithLabel(item.label) result.native = newWithLabel(item.label)
default: default: