mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-06 07:01:15 +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:
parent
3d88bf8795
commit
263e1b527a
@ -153,14 +153,12 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
gtkSignalHandlers map[*C.GtkWidget]C.gulong
|
gtkSignalToMenuItem map[uint]*MenuItem
|
||||||
gtkSignalToMenuItem map[*C.GtkWidget]*MenuItem
|
|
||||||
mainThreadId *C.GThread
|
mainThreadId *C.GThread
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
gtkSignalHandlers = map[*C.GtkWidget]C.gulong{}
|
gtkSignalToMenuItem = map[uint]*MenuItem{}
|
||||||
gtkSignalToMenuItem = map[*C.GtkWidget]*MenuItem{}
|
|
||||||
|
|
||||||
mainThreadId = C.g_thread_self()
|
mainThreadId = C.g_thread_self()
|
||||||
fmt.Println("init mainthread=", mainThreadId)
|
fmt.Println("init mainthread=", mainThreadId)
|
||||||
@ -324,12 +322,14 @@ func menuGetRadioGroup(item *linuxMenuItem) *GSList {
|
|||||||
|
|
||||||
//export handleClick
|
//export handleClick
|
||||||
func handleClick(idPtr unsafe.Pointer) {
|
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]
|
item, ok := gtkSignalToMenuItem[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch item.itemType {
|
switch item.itemType {
|
||||||
case text, checkbox:
|
case text, checkbox:
|
||||||
menuItemClicked <- item.id
|
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")
|
signal := C.CString("activate")
|
||||||
defer C.free(unsafe.Pointer(signal))
|
defer C.free(unsafe.Pointer(signal))
|
||||||
|
|
||||||
impl := (item.impl).(*linuxMenuItem)
|
impl := (item.impl).(*linuxMenuItem)
|
||||||
widget := impl.native
|
widget := impl.native
|
||||||
flags := C.GConnectFlags(0)
|
flags := C.GConnectFlags(0)
|
||||||
@ -355,10 +354,17 @@ func attachMenuHandler(item *MenuItem) {
|
|||||||
C.gpointer(widget),
|
C.gpointer(widget),
|
||||||
flags)
|
flags)
|
||||||
|
|
||||||
id := (*C.GtkWidget)(widget)
|
id := C.uint(item.id)
|
||||||
gtkSignalToMenuItem[id] = item
|
ident := C.CString("id")
|
||||||
gtkSignalHandlers[id] = handlerId
|
defer C.free(unsafe.Pointer(ident))
|
||||||
impl.handlerId = uint(handlerId)
|
C.g_object_set_data(
|
||||||
|
(*C.GObject)(widget),
|
||||||
|
ident,
|
||||||
|
C.gpointer(&id),
|
||||||
|
)
|
||||||
|
|
||||||
|
gtkSignalToMenuItem[item.id] = item
|
||||||
|
return uint(handlerId)
|
||||||
}
|
}
|
||||||
|
|
||||||
// menuItem
|
// menuItem
|
||||||
|
@ -69,7 +69,7 @@ func (m *linuxMenu) processMenu(menu *Menu) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *linuxMenu) attachHandler(item *MenuItem) {
|
func (m *linuxMenu) attachHandler(item *MenuItem) {
|
||||||
attachMenuHandler(item)
|
(item.impl).(*linuxMenuItem).handlerId = attachMenuHandler(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *linuxMenu) addSubMenuToItem(menu *Menu, item *MenuItem) {
|
func (m *linuxMenu) addSubMenuToItem(menu *Menu, item *MenuItem) {
|
||||||
|
Loading…
Reference in New Issue
Block a user