5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-06 02:29:25 +08:00

[v3 linux] lower signal memory usage

- drop the gtkSignalHandlers map entirely (wasn't used)
- use 'uint' for mapping signal IDs to MenuItem
- store and retrieve the menuitem identifier to/from the menu item widget
This commit is contained in:
Travis McLane 2023-10-10 12:38:10 -05:00
parent 3d88bf8795
commit 263e1b527a
2 changed files with 19 additions and 13 deletions

View File

@ -153,14 +153,12 @@ var (
)
var (
gtkSignalHandlers map[*C.GtkWidget]C.gulong
gtkSignalToMenuItem map[*C.GtkWidget]*MenuItem
gtkSignalToMenuItem map[uint]*MenuItem
mainThreadId *C.GThread
)
func init() {
gtkSignalHandlers = map[*C.GtkWidget]C.gulong{}
gtkSignalToMenuItem = map[*C.GtkWidget]*MenuItem{}
gtkSignalToMenuItem = map[uint]*MenuItem{}
mainThreadId = C.g_thread_self()
fmt.Println("init mainthread=", mainThreadId)
@ -324,12 +322,14 @@ func menuGetRadioGroup(item *linuxMenuItem) *GSList {
//export handleClick
func handleClick(idPtr unsafe.Pointer) {
id := (*C.GtkWidget)(idPtr)
ident := C.CString("id")
defer C.free(unsafe.Pointer(ident))
value := C.g_object_get_data((*C.GObject)(idPtr), ident)
id := uint(*(*C.uint)(value))
item, ok := gtkSignalToMenuItem[id]
if !ok {
return
}
switch item.itemType {
case text, checkbox:
menuItemClicked <- item.id
@ -341,10 +341,9 @@ func handleClick(idPtr unsafe.Pointer) {
}
}
func attachMenuHandler(item *MenuItem) {
func attachMenuHandler(item *MenuItem) uint {
signal := C.CString("activate")
defer C.free(unsafe.Pointer(signal))
impl := (item.impl).(*linuxMenuItem)
widget := impl.native
flags := C.GConnectFlags(0)
@ -355,10 +354,17 @@ func attachMenuHandler(item *MenuItem) {
C.gpointer(widget),
flags)
id := (*C.GtkWidget)(widget)
gtkSignalToMenuItem[id] = item
gtkSignalHandlers[id] = handlerId
impl.handlerId = uint(handlerId)
id := C.uint(item.id)
ident := C.CString("id")
defer C.free(unsafe.Pointer(ident))
C.g_object_set_data(
(*C.GObject)(widget),
ident,
C.gpointer(&id),
)
gtkSignalToMenuItem[item.id] = item
return uint(handlerId)
}
// menuItem

View File

@ -69,7 +69,7 @@ func (m *linuxMenu) processMenu(menu *Menu) {
}
func (m *linuxMenu) attachHandler(item *MenuItem) {
attachMenuHandler(item)
(item.impl).(*linuxMenuItem).handlerId = attachMenuHandler(item)
}
func (m *linuxMenu) addSubMenuToItem(menu *Menu, item *MenuItem) {