detached 759f3c2

build(gen) regenerate bindings with bug fixes

Partial regeneration - needs final go generate after GStrdup path fix
commit
759f3c2e4fb7a30d0b0cbd8bad604614897418db
author
bnema · · 2026-02-06 22:40 UTC
parent
53bd89c
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
175 files · +3526 -1566
M v4/adw/adw-about-dialog.go +7 -3
@@ -1721,10 +1721,12 @@ func (x *AboutDialog) GetPropertyWebsite() string {
17211721 //
17221722 // Applications may connect to it to override the default behavior, which is
17231723 // to call [func@Gtk.show_uri].
1724-func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) uint32 {
1724+func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) uint {
17251725 cbPtr := uintptr(unsafe.Pointer(cb))
17261726 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1727- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1727+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1728+ glib.SaveHandlerMapping(handlerID, cbPtr)
1729+ return handlerID
17281730 }
17291731
17301732 fcb := func(clsPtr uintptr, UriVarp string) bool {
@@ -1737,7 +1739,9 @@ func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) ui
17371739 }
17381740 cbRefPtr := purego.NewCallback(fcb)
17391741 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1740- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1742+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1743+ glib.SaveHandlerMapping(handlerID, cbPtr)
1744+ return handlerID
17411745 }
17421746
17431747 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-about-window.go +7 -3
@@ -1691,10 +1691,12 @@ func (x *AboutWindow) GetPropertyWebsite() string {
16911691 //
16921692 // Applications may connect to it to override the default behavior, which is
16931693 // to call [func@Gtk.show_uri].
1694-func (x *AboutWindow) ConnectActivateLink(cb *func(AboutWindow, string) bool) uint32 {
1694+func (x *AboutWindow) ConnectActivateLink(cb *func(AboutWindow, string) bool) uint {
16951695 cbPtr := uintptr(unsafe.Pointer(cb))
16961696 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1697- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1697+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1698+ glib.SaveHandlerMapping(handlerID, cbPtr)
1699+ return handlerID
16981700 }
16991701
17001702 fcb := func(clsPtr uintptr, UriVarp string) bool {
@@ -1707,7 +1709,9 @@ func (x *AboutWindow) ConnectActivateLink(cb *func(AboutWindow, string) bool) ui
17071709 }
17081710 cbRefPtr := purego.NewCallback(fcb)
17091711 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1710- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1712+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1713+ glib.SaveHandlerMapping(handlerID, cbPtr)
1714+ return handlerID
17111715 }
17121716
17131717 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-action-row.go +7 -3
@@ -436,10 +436,12 @@ func (x *ActionRow) GetPropertyTitleLines() int {
436436 }
437437
438438 // This signal is emitted after the row has been activated.
439-func (x *ActionRow) ConnectActivated(cb *func(ActionRow)) uint32 {
439+func (x *ActionRow) ConnectActivated(cb *func(ActionRow)) uint {
440440 cbPtr := uintptr(unsafe.Pointer(cb))
441441 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
442- return gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
442+ handlerID := gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
443+ glib.SaveHandlerMapping(handlerID, cbPtr)
444+ return handlerID
443445 }
444446
445447 fcb := func(clsPtr uintptr) {
@@ -452,7 +454,9 @@ func (x *ActionRow) ConnectActivated(cb *func(ActionRow)) uint32 {
452454 }
453455 cbRefPtr := purego.NewCallback(fcb)
454456 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
455- return gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
457+ handlerID := gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
458+ glib.SaveHandlerMapping(handlerID, cbPtr)
459+ return handlerID
456460 }
457461
458462 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-alert-dialog.go +14 -6
@@ -901,10 +901,12 @@ func (x *AlertDialog) GetPropertyPreferWideLayout() bool {
901901 // if the dialog was closed by pressing <kbd>Escape</kbd> or with a system
902902 // action, @response will be set to the value of
903903 // [property@AlertDialog:close-response].
904-func (x *AlertDialog) ConnectResponse(cb *func(AlertDialog, string)) uint32 {
904+func (x *AlertDialog) ConnectResponse(cb *func(AlertDialog, string)) uint {
905905 cbPtr := uintptr(unsafe.Pointer(cb))
906906 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
907- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
907+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
908+ glib.SaveHandlerMapping(handlerID, cbPtr)
909+ return handlerID
908910 }
909911
910912 fcb := func(clsPtr uintptr, ResponseVarp string) {
@@ -917,16 +919,20 @@ func (x *AlertDialog) ConnectResponse(cb *func(AlertDialog, string)) uint32 {
917919 }
918920 cbRefPtr := purego.NewCallback(fcb)
919921 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
920- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
922+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
923+ glib.SaveHandlerMapping(handlerID, cbPtr)
924+ return handlerID
921925 }
922926
923927 // ConnectResponseWithDetail connects to the "response" signal with a detail string.
924928 // The detail is appended as "response::<detail>".
925-func (x *AlertDialog) ConnectResponseWithDetail(detail string, cb *func(AlertDialog, string)) uint32 {
929+func (x *AlertDialog) ConnectResponseWithDetail(detail string, cb *func(AlertDialog, string)) uint {
926930 cbPtr := uintptr(unsafe.Pointer(cb))
927931 signalName := fmt.Sprintf("response::%s", detail)
928932 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
929- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
933+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
934+ glib.SaveHandlerMapping(handlerID, cbPtr)
935+ return handlerID
930936 }
931937
932938 fcb := func(clsPtr uintptr, ResponseVarp string) {
@@ -939,7 +945,9 @@ func (x *AlertDialog) ConnectResponseWithDetail(detail string, cb *func(AlertDia
939945 }
940946 cbRefPtr := purego.NewCallback(fcb)
941947 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
942- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
948+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
949+ glib.SaveHandlerMapping(handlerID, cbPtr)
950+ return handlerID
943951 }
944952
945953 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-animation.go +7 -3
@@ -348,10 +348,12 @@ func (x *Animation) GetPropertyValue() float64 {
348348
349349 // This signal is emitted when the animation has been completed, either on its
350350 // own or via calling [method@Animation.skip].
351-func (x *Animation) ConnectDone(cb *func(Animation)) uint32 {
351+func (x *Animation) ConnectDone(cb *func(Animation)) uint {
352352 cbPtr := uintptr(unsafe.Pointer(cb))
353353 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
354- return gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
354+ handlerID := gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
355+ glib.SaveHandlerMapping(handlerID, cbPtr)
356+ return handlerID
355357 }
356358
357359 fcb := func(clsPtr uintptr) {
@@ -364,7 +366,9 @@ func (x *Animation) ConnectDone(cb *func(Animation)) uint32 {
364366 }
365367 cbRefPtr := purego.NewCallback(fcb)
366368 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
367- return gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
369+ handlerID := gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
370+ glib.SaveHandlerMapping(handlerID, cbPtr)
371+ return handlerID
368372 }
369373
370374 func init() {
M v4/adw/adw-banner.go +7 -3
@@ -328,10 +328,12 @@ func (x *Banner) GetPropertyUseMarkup() bool {
328328 // This signal is emitted after the action button has been clicked.
329329 //
330330 // It can be used as an alternative to setting an action.
331-func (x *Banner) ConnectButtonClicked(cb *func(Banner)) uint32 {
331+func (x *Banner) ConnectButtonClicked(cb *func(Banner)) uint {
332332 cbPtr := uintptr(unsafe.Pointer(cb))
333333 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
334- return gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
334+ handlerID := gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
335+ glib.SaveHandlerMapping(handlerID, cbPtr)
336+ return handlerID
335337 }
336338
337339 fcb := func(clsPtr uintptr) {
@@ -344,7 +346,9 @@ func (x *Banner) ConnectButtonClicked(cb *func(Banner)) uint32 {
344346 }
345347 cbRefPtr := purego.NewCallback(fcb)
346348 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
347- return gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
349+ handlerID := gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
350+ glib.SaveHandlerMapping(handlerID, cbPtr)
351+ return handlerID
348352 }
349353
350354 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-bottom-sheet.go +7 -3
@@ -677,10 +677,12 @@ func (x *BottomSheet) GetPropertyShowDragHandle() bool {
677677
678678 // Emitted when the close button or shortcut is used while
679679 // [property@Dialog:can-close] is set to `FALSE`.
680-func (x *BottomSheet) ConnectCloseAttempt(cb *func(BottomSheet)) uint32 {
680+func (x *BottomSheet) ConnectCloseAttempt(cb *func(BottomSheet)) uint {
681681 cbPtr := uintptr(unsafe.Pointer(cb))
682682 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
683- return gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
683+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
684+ glib.SaveHandlerMapping(handlerID, cbPtr)
685+ return handlerID
684686 }
685687
686688 fcb := func(clsPtr uintptr) {
@@ -693,7 +695,9 @@ func (x *BottomSheet) ConnectCloseAttempt(cb *func(BottomSheet)) uint32 {
693695 }
694696 cbRefPtr := purego.NewCallback(fcb)
695697 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
696- return gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
698+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
699+ glib.SaveHandlerMapping(handlerID, cbPtr)
700+ return handlerID
697701 }
698702
699703 // Gets the progress @self will snap back to after the gesture is canceled.
M v4/adw/adw-breakpoint.go +14 -6
@@ -459,10 +459,12 @@ func (x *Breakpoint) GetPropertyCondition() uintptr {
459459 // Emitted when the breakpoint is applied.
460460 //
461461 // This signal is emitted after the setters have been applied.
462-func (x *Breakpoint) ConnectApply(cb *func(Breakpoint)) uint32 {
462+func (x *Breakpoint) ConnectApply(cb *func(Breakpoint)) uint {
463463 cbPtr := uintptr(unsafe.Pointer(cb))
464464 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
465- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
465+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
466+ glib.SaveHandlerMapping(handlerID, cbPtr)
467+ return handlerID
466468 }
467469
468470 fcb := func(clsPtr uintptr) {
@@ -475,16 +477,20 @@ func (x *Breakpoint) ConnectApply(cb *func(Breakpoint)) uint32 {
475477 }
476478 cbRefPtr := purego.NewCallback(fcb)
477479 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
478- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
480+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
481+ glib.SaveHandlerMapping(handlerID, cbPtr)
482+ return handlerID
479483 }
480484
481485 // Emitted when the breakpoint is unapplied.
482486 //
483487 // This signal is emitted before resetting the setter values.
484-func (x *Breakpoint) ConnectUnapply(cb *func(Breakpoint)) uint32 {
488+func (x *Breakpoint) ConnectUnapply(cb *func(Breakpoint)) uint {
485489 cbPtr := uintptr(unsafe.Pointer(cb))
486490 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
487- return gobject.SignalConnect(x.GoPointer(), "unapply", cbRefPtr)
491+ handlerID := gobject.SignalConnect(x.GoPointer(), "unapply", cbRefPtr)
492+ glib.SaveHandlerMapping(handlerID, cbPtr)
493+ return handlerID
488494 }
489495
490496 fcb := func(clsPtr uintptr) {
@@ -497,7 +503,9 @@ func (x *Breakpoint) ConnectUnapply(cb *func(Breakpoint)) uint32 {
497503 }
498504 cbRefPtr := purego.NewCallback(fcb)
499505 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
500- return gobject.SignalConnect(x.GoPointer(), "unapply", cbRefPtr)
506+ handlerID := gobject.SignalConnect(x.GoPointer(), "unapply", cbRefPtr)
507+ glib.SaveHandlerMapping(handlerID, cbPtr)
508+ return handlerID
501509 }
502510
503511 // Gets the ID of the @buildable object.
M v4/adw/adw-button-row.go +7 -3
@@ -199,10 +199,12 @@ func (x *ButtonRow) GetPropertyStartIconName() string {
199199 }
200200
201201 // This signal is emitted after the row has been activated.
202-func (x *ButtonRow) ConnectActivated(cb *func(ButtonRow)) uint32 {
202+func (x *ButtonRow) ConnectActivated(cb *func(ButtonRow)) uint {
203203 cbPtr := uintptr(unsafe.Pointer(cb))
204204 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
205- return gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
205+ handlerID := gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
206+ glib.SaveHandlerMapping(handlerID, cbPtr)
207+ return handlerID
206208 }
207209
208210 fcb := func(clsPtr uintptr) {
@@ -215,7 +217,9 @@ func (x *ButtonRow) ConnectActivated(cb *func(ButtonRow)) uint32 {
215217 }
216218 cbRefPtr := purego.NewCallback(fcb)
217219 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
218- return gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
220+ handlerID := gobject.SignalConnect(x.GoPointer(), "activated", cbRefPtr)
221+ glib.SaveHandlerMapping(handlerID, cbPtr)
222+ return handlerID
219223 }
220224
221225 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-carousel.go +7 -3
@@ -517,10 +517,12 @@ func (x *Carousel) GetPropertySpacing() uint {
517517 // ::: note
518518 //
519519 // An empty carousel is indicated by `(int)index == -1`.
520-func (x *Carousel) ConnectPageChanged(cb *func(Carousel, uint)) uint32 {
520+func (x *Carousel) ConnectPageChanged(cb *func(Carousel, uint)) uint {
521521 cbPtr := uintptr(unsafe.Pointer(cb))
522522 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
523- return gobject.SignalConnect(x.GoPointer(), "page-changed", cbRefPtr)
523+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-changed", cbRefPtr)
524+ glib.SaveHandlerMapping(handlerID, cbPtr)
525+ return handlerID
524526 }
525527
526528 fcb := func(clsPtr uintptr, IndexVarp uint) {
@@ -533,7 +535,9 @@ func (x *Carousel) ConnectPageChanged(cb *func(Carousel, uint)) uint32 {
533535 }
534536 cbRefPtr := purego.NewCallback(fcb)
535537 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
536- return gobject.SignalConnect(x.GoPointer(), "page-changed", cbRefPtr)
538+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-changed", cbRefPtr)
539+ glib.SaveHandlerMapping(handlerID, cbPtr)
540+ return handlerID
537541 }
538542
539543 // Gets the progress @self will snap back to after the gesture is canceled.
M v4/adw/adw-dialog.go +14 -6
@@ -627,10 +627,12 @@ func (x *Dialog) GetPropertyTitle() string {
627627 // Emitted when the close button or shortcut is used, or
628628 // [method@Dialog.close] is called while [property@Dialog:can-close] is set to
629629 // `FALSE`.
630-func (x *Dialog) ConnectCloseAttempt(cb *func(Dialog)) uint32 {
630+func (x *Dialog) ConnectCloseAttempt(cb *func(Dialog)) uint {
631631 cbPtr := uintptr(unsafe.Pointer(cb))
632632 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
633- return gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
633+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
634+ glib.SaveHandlerMapping(handlerID, cbPtr)
635+ return handlerID
634636 }
635637
636638 fcb := func(clsPtr uintptr) {
@@ -643,14 +645,18 @@ func (x *Dialog) ConnectCloseAttempt(cb *func(Dialog)) uint32 {
643645 }
644646 cbRefPtr := purego.NewCallback(fcb)
645647 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
646- return gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
648+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-attempt", cbRefPtr)
649+ glib.SaveHandlerMapping(handlerID, cbPtr)
650+ return handlerID
647651 }
648652
649653 // Emitted when the dialog is successfully closed.
650-func (x *Dialog) ConnectClosed(cb *func(Dialog)) uint32 {
654+func (x *Dialog) ConnectClosed(cb *func(Dialog)) uint {
651655 cbPtr := uintptr(unsafe.Pointer(cb))
652656 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
653- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
657+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
658+ glib.SaveHandlerMapping(handlerID, cbPtr)
659+ return handlerID
654660 }
655661
656662 fcb := func(clsPtr uintptr) {
@@ -663,7 +669,9 @@ func (x *Dialog) ConnectClosed(cb *func(Dialog)) uint32 {
663669 }
664670 cbRefPtr := purego.NewCallback(fcb)
665671 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
666- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
672+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
673+ glib.SaveHandlerMapping(handlerID, cbPtr)
674+ return handlerID
667675 }
668676
669677 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-entry-row.go +14 -6
@@ -428,10 +428,12 @@ func (x *EntryRow) GetPropertyTextLength() uint {
428428 // Emitted when the apply button is pressed.
429429 //
430430 // See [property@EntryRow:show-apply-button].
431-func (x *EntryRow) ConnectApply(cb *func(EntryRow)) uint32 {
431+func (x *EntryRow) ConnectApply(cb *func(EntryRow)) uint {
432432 cbPtr := uintptr(unsafe.Pointer(cb))
433433 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
434- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
434+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
435+ glib.SaveHandlerMapping(handlerID, cbPtr)
436+ return handlerID
435437 }
436438
437439 fcb := func(clsPtr uintptr) {
@@ -444,14 +446,18 @@ func (x *EntryRow) ConnectApply(cb *func(EntryRow)) uint32 {
444446 }
445447 cbRefPtr := purego.NewCallback(fcb)
446448 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
447- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
449+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
450+ glib.SaveHandlerMapping(handlerID, cbPtr)
451+ return handlerID
448452 }
449453
450454 // Emitted when the embedded entry is activated.
451-func (x *EntryRow) ConnectEntryActivated(cb *func(EntryRow)) uint32 {
455+func (x *EntryRow) ConnectEntryActivated(cb *func(EntryRow)) uint {
452456 cbPtr := uintptr(unsafe.Pointer(cb))
453457 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
454- return gobject.SignalConnect(x.GoPointer(), "entry-activated", cbRefPtr)
458+ handlerID := gobject.SignalConnect(x.GoPointer(), "entry-activated", cbRefPtr)
459+ glib.SaveHandlerMapping(handlerID, cbPtr)
460+ return handlerID
455461 }
456462
457463 fcb := func(clsPtr uintptr) {
@@ -464,7 +470,9 @@ func (x *EntryRow) ConnectEntryActivated(cb *func(EntryRow)) uint32 {
464470 }
465471 cbRefPtr := purego.NewCallback(fcb)
466472 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
467- return gobject.SignalConnect(x.GoPointer(), "entry-activated", cbRefPtr)
473+ handlerID := gobject.SignalConnect(x.GoPointer(), "entry-activated", cbRefPtr)
474+ glib.SaveHandlerMapping(handlerID, cbPtr)
475+ return handlerID
468476 }
469477
470478 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-message-dialog.go +14 -6
@@ -840,10 +840,12 @@ func (x *MessageDialog) GetPropertyHeadingUseMarkup() bool {
840840 // if the dialog was closed by pressing &lt;kbd&gt;Escape&lt;/kbd&gt; or with a system
841841 // action, @response will be set to the value of
842842 // [property@MessageDialog:close-response].
843-func (x *MessageDialog) ConnectResponse(cb *func(MessageDialog, string)) uint32 {
843+func (x *MessageDialog) ConnectResponse(cb *func(MessageDialog, string)) uint {
844844 cbPtr := uintptr(unsafe.Pointer(cb))
845845 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
846- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
846+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
847+ glib.SaveHandlerMapping(handlerID, cbPtr)
848+ return handlerID
847849 }
848850
849851 fcb := func(clsPtr uintptr, ResponseVarp string) {
@@ -856,16 +858,20 @@ func (x *MessageDialog) ConnectResponse(cb *func(MessageDialog, string)) uint32
856858 }
857859 cbRefPtr := purego.NewCallback(fcb)
858860 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
859- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
861+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
862+ glib.SaveHandlerMapping(handlerID, cbPtr)
863+ return handlerID
860864 }
861865
862866 // ConnectResponseWithDetail connects to the "response" signal with a detail string.
863867 // The detail is appended as "response::<detail>".
864-func (x *MessageDialog) ConnectResponseWithDetail(detail string, cb *func(MessageDialog, string)) uint32 {
868+func (x *MessageDialog) ConnectResponseWithDetail(detail string, cb *func(MessageDialog, string)) uint {
865869 cbPtr := uintptr(unsafe.Pointer(cb))
866870 signalName := fmt.Sprintf("response::%s", detail)
867871 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
868- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
872+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
873+ glib.SaveHandlerMapping(handlerID, cbPtr)
874+ return handlerID
869875 }
870876
871877 fcb := func(clsPtr uintptr, ResponseVarp string) {
@@ -878,7 +884,9 @@ func (x *MessageDialog) ConnectResponseWithDetail(detail string, cb *func(Messag
878884 }
879885 cbRefPtr := purego.NewCallback(fcb)
880886 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
881- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
887+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
888+ glib.SaveHandlerMapping(handlerID, cbPtr)
889+ return handlerID
882890 }
883891
884892 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-navigation-view.go +56 -24
@@ -431,10 +431,12 @@ func (x *NavigationPage) GetPropertyTitle() string {
431431 //
432432 // It will always be preceded by [signal@NavigationPage::hiding] or
433433 // [signal@NavigationPage::showing].
434-func (x *NavigationPage) ConnectHidden(cb *func(NavigationPage)) uint32 {
434+func (x *NavigationPage) ConnectHidden(cb *func(NavigationPage)) uint {
435435 cbPtr := uintptr(unsafe.Pointer(cb))
436436 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
437- return gobject.SignalConnect(x.GoPointer(), "hidden", cbRefPtr)
437+ handlerID := gobject.SignalConnect(x.GoPointer(), "hidden", cbRefPtr)
438+ glib.SaveHandlerMapping(handlerID, cbPtr)
439+ return handlerID
438440 }
439441
440442 fcb := func(clsPtr uintptr) {
@@ -447,7 +449,9 @@ func (x *NavigationPage) ConnectHidden(cb *func(NavigationPage)) uint32 {
447449 }
448450 cbRefPtr := purego.NewCallback(fcb)
449451 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
450- return gobject.SignalConnect(x.GoPointer(), "hidden", cbRefPtr)
452+ handlerID := gobject.SignalConnect(x.GoPointer(), "hidden", cbRefPtr)
453+ glib.SaveHandlerMapping(handlerID, cbPtr)
454+ return handlerID
451455 }
452456
453457 // Emitted when the page starts hiding at the beginning of the navigation view
@@ -455,10 +459,12 @@ func (x *NavigationPage) ConnectHidden(cb *func(NavigationPage)) uint32 {
455459 //
456460 // It will always be followed by [signal@NavigationPage::hidden] or
457461 // [signal@NavigationPage::shown].
458-func (x *NavigationPage) ConnectHiding(cb *func(NavigationPage)) uint32 {
462+func (x *NavigationPage) ConnectHiding(cb *func(NavigationPage)) uint {
459463 cbPtr := uintptr(unsafe.Pointer(cb))
460464 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
461- return gobject.SignalConnect(x.GoPointer(), "hiding", cbRefPtr)
465+ handlerID := gobject.SignalConnect(x.GoPointer(), "hiding", cbRefPtr)
466+ glib.SaveHandlerMapping(handlerID, cbPtr)
467+ return handlerID
462468 }
463469
464470 fcb := func(clsPtr uintptr) {
@@ -471,7 +477,9 @@ func (x *NavigationPage) ConnectHiding(cb *func(NavigationPage)) uint32 {
471477 }
472478 cbRefPtr := purego.NewCallback(fcb)
473479 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
474- return gobject.SignalConnect(x.GoPointer(), "hiding", cbRefPtr)
480+ handlerID := gobject.SignalConnect(x.GoPointer(), "hiding", cbRefPtr)
481+ glib.SaveHandlerMapping(handlerID, cbPtr)
482+ return handlerID
475483 }
476484
477485 // Emitted when the page shows at the beginning of the navigation view
@@ -479,10 +487,12 @@ func (x *NavigationPage) ConnectHiding(cb *func(NavigationPage)) uint32 {
479487 //
480488 // It will always be followed by [signal@NavigationPage::shown] or
481489 // [signal@NavigationPage::hidden].
482-func (x *NavigationPage) ConnectShowing(cb *func(NavigationPage)) uint32 {
490+func (x *NavigationPage) ConnectShowing(cb *func(NavigationPage)) uint {
483491 cbPtr := uintptr(unsafe.Pointer(cb))
484492 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
485- return gobject.SignalConnect(x.GoPointer(), "showing", cbRefPtr)
493+ handlerID := gobject.SignalConnect(x.GoPointer(), "showing", cbRefPtr)
494+ glib.SaveHandlerMapping(handlerID, cbPtr)
495+ return handlerID
486496 }
487497
488498 fcb := func(clsPtr uintptr) {
@@ -495,7 +505,9 @@ func (x *NavigationPage) ConnectShowing(cb *func(NavigationPage)) uint32 {
495505 }
496506 cbRefPtr := purego.NewCallback(fcb)
497507 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
498- return gobject.SignalConnect(x.GoPointer(), "showing", cbRefPtr)
508+ handlerID := gobject.SignalConnect(x.GoPointer(), "showing", cbRefPtr)
509+ glib.SaveHandlerMapping(handlerID, cbPtr)
510+ return handlerID
499511 }
500512
501513 // Emitted when the navigation view transition has been completed and the page
@@ -503,10 +515,12 @@ func (x *NavigationPage) ConnectShowing(cb *func(NavigationPage)) uint32 {
503515 //
504516 // It will always be preceded by [signal@NavigationPage::showing] or
505517 // [signal@NavigationPage::hiding].
506-func (x *NavigationPage) ConnectShown(cb *func(NavigationPage)) uint32 {
518+func (x *NavigationPage) ConnectShown(cb *func(NavigationPage)) uint {
507519 cbPtr := uintptr(unsafe.Pointer(cb))
508520 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
509- return gobject.SignalConnect(x.GoPointer(), "shown", cbRefPtr)
521+ handlerID := gobject.SignalConnect(x.GoPointer(), "shown", cbRefPtr)
522+ glib.SaveHandlerMapping(handlerID, cbPtr)
523+ return handlerID
510524 }
511525
512526 fcb := func(clsPtr uintptr) {
@@ -519,7 +533,9 @@ func (x *NavigationPage) ConnectShown(cb *func(NavigationPage)) uint32 {
519533 }
520534 cbRefPtr := purego.NewCallback(fcb)
521535 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
522- return gobject.SignalConnect(x.GoPointer(), "shown", cbRefPtr)
536+ handlerID := gobject.SignalConnect(x.GoPointer(), "shown", cbRefPtr)
537+ glib.SaveHandlerMapping(handlerID, cbPtr)
538+ return handlerID
523539 }
524540
525541 // Requests the user's screen reader to announce the given message.
@@ -1480,10 +1496,12 @@ func (x *NavigationView) GetPropertyVisiblePageTag() string {
14801496 // from a forward stack.
14811497 //
14821498 // Instead, it should be done in the [signal@NavigationView::pushed] handler.
1483-func (x *NavigationView) ConnectGetNextPage(cb *func(NavigationView) NavigationPage) uint32 {
1499+func (x *NavigationView) ConnectGetNextPage(cb *func(NavigationView) NavigationPage) uint {
14841500 cbPtr := uintptr(unsafe.Pointer(cb))
14851501 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1486- return gobject.SignalConnect(x.GoPointer(), "get-next-page", cbRefPtr)
1502+ handlerID := gobject.SignalConnect(x.GoPointer(), "get-next-page", cbRefPtr)
1503+ glib.SaveHandlerMapping(handlerID, cbPtr)
1504+ return handlerID
14871505 }
14881506
14891507 fcb := func(clsPtr uintptr) uintptr {
@@ -1497,7 +1515,9 @@ func (x *NavigationView) ConnectGetNextPage(cb *func(NavigationView) NavigationP
14971515 }
14981516 cbRefPtr := purego.NewCallback(fcb)
14991517 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1500- return gobject.SignalConnect(x.GoPointer(), "get-next-page", cbRefPtr)
1518+ handlerID := gobject.SignalConnect(x.GoPointer(), "get-next-page", cbRefPtr)
1519+ glib.SaveHandlerMapping(handlerID, cbPtr)
1520+ return handlerID
15011521 }
15021522
15031523 // Emitted after @page has been popped from the navigation stack.
@@ -1507,10 +1527,12 @@ func (x *NavigationView) ConnectGetNextPage(cb *func(NavigationView) NavigationP
15071527 // When using [method@NavigationView.pop_to_page] or
15081528 // [method@NavigationView.pop_to_tag], this signal is emitted for each of the
15091529 // popped pages.
1510-func (x *NavigationView) ConnectPopped(cb *func(NavigationView, uintptr)) uint32 {
1530+func (x *NavigationView) ConnectPopped(cb *func(NavigationView, uintptr)) uint {
15111531 cbPtr := uintptr(unsafe.Pointer(cb))
15121532 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1513- return gobject.SignalConnect(x.GoPointer(), "popped", cbRefPtr)
1533+ handlerID := gobject.SignalConnect(x.GoPointer(), "popped", cbRefPtr)
1534+ glib.SaveHandlerMapping(handlerID, cbPtr)
1535+ return handlerID
15141536 }
15151537
15161538 fcb := func(clsPtr uintptr, PageVarp uintptr) {
@@ -1523,16 +1545,20 @@ func (x *NavigationView) ConnectPopped(cb *func(NavigationView, uintptr)) uint32
15231545 }
15241546 cbRefPtr := purego.NewCallback(fcb)
15251547 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1526- return gobject.SignalConnect(x.GoPointer(), "popped", cbRefPtr)
1548+ handlerID := gobject.SignalConnect(x.GoPointer(), "popped", cbRefPtr)
1549+ glib.SaveHandlerMapping(handlerID, cbPtr)
1550+ return handlerID
15271551 }
15281552
15291553 // Emitted after a page has been pushed to the navigation stack.
15301554 //
15311555 // See [method@NavigationView.push].
1532-func (x *NavigationView) ConnectPushed(cb *func(NavigationView)) uint32 {
1556+func (x *NavigationView) ConnectPushed(cb *func(NavigationView)) uint {
15331557 cbPtr := uintptr(unsafe.Pointer(cb))
15341558 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1535- return gobject.SignalConnect(x.GoPointer(), "pushed", cbRefPtr)
1559+ handlerID := gobject.SignalConnect(x.GoPointer(), "pushed", cbRefPtr)
1560+ glib.SaveHandlerMapping(handlerID, cbPtr)
1561+ return handlerID
15361562 }
15371563
15381564 fcb := func(clsPtr uintptr) {
@@ -1545,16 +1571,20 @@ func (x *NavigationView) ConnectPushed(cb *func(NavigationView)) uint32 {
15451571 }
15461572 cbRefPtr := purego.NewCallback(fcb)
15471573 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1548- return gobject.SignalConnect(x.GoPointer(), "pushed", cbRefPtr)
1574+ handlerID := gobject.SignalConnect(x.GoPointer(), "pushed", cbRefPtr)
1575+ glib.SaveHandlerMapping(handlerID, cbPtr)
1576+ return handlerID
15491577 }
15501578
15511579 // Emitted after the navigation stack has been replaced.
15521580 //
15531581 // See [method@NavigationView.replace].
1554-func (x *NavigationView) ConnectReplaced(cb *func(NavigationView)) uint32 {
1582+func (x *NavigationView) ConnectReplaced(cb *func(NavigationView)) uint {
15551583 cbPtr := uintptr(unsafe.Pointer(cb))
15561584 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1557- return gobject.SignalConnect(x.GoPointer(), "replaced", cbRefPtr)
1585+ handlerID := gobject.SignalConnect(x.GoPointer(), "replaced", cbRefPtr)
1586+ glib.SaveHandlerMapping(handlerID, cbPtr)
1587+ return handlerID
15581588 }
15591589
15601590 fcb := func(clsPtr uintptr) {
@@ -1567,7 +1597,9 @@ func (x *NavigationView) ConnectReplaced(cb *func(NavigationView)) uint32 {
15671597 }
15681598 cbRefPtr := purego.NewCallback(fcb)
15691599 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1570- return gobject.SignalConnect(x.GoPointer(), "replaced", cbRefPtr)
1600+ handlerID := gobject.SignalConnect(x.GoPointer(), "replaced", cbRefPtr)
1601+ glib.SaveHandlerMapping(handlerID, cbPtr)
1602+ return handlerID
15711603 }
15721604
15731605 // Gets the progress @self will snap back to after the gesture is canceled.
M v4/adw/adw-spin-row.go +21 -9
@@ -439,10 +439,12 @@ func (x *SpinRow) GetPropertyWrap() bool {
439439 // The default conversion uses [func@GLib.strtod].
440440 //
441441 // See [signal@Gtk.SpinButton::input].
442-func (x *SpinRow) ConnectInput(cb *func(SpinRow, *float64) int) uint32 {
442+func (x *SpinRow) ConnectInput(cb *func(SpinRow, *float64) int) uint {
443443 cbPtr := uintptr(unsafe.Pointer(cb))
444444 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
445- return gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
445+ handlerID := gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
446+ glib.SaveHandlerMapping(handlerID, cbPtr)
447+ return handlerID
446448 }
447449
448450 fcb := func(clsPtr uintptr, NewValueVarp *float64) int {
@@ -455,16 +457,20 @@ func (x *SpinRow) ConnectInput(cb *func(SpinRow, *float64) int) uint32 {
455457 }
456458 cbRefPtr := purego.NewCallback(fcb)
457459 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
458- return gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
460+ handlerID := gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
461+ glib.SaveHandlerMapping(handlerID, cbPtr)
462+ return handlerID
459463 }
460464
461465 // Emitted to tweak the formatting of the value for display.
462466 //
463467 // See [signal@Gtk.SpinButton::output].
464-func (x *SpinRow) ConnectOutput(cb *func(SpinRow) bool) uint32 {
468+func (x *SpinRow) ConnectOutput(cb *func(SpinRow) bool) uint {
465469 cbPtr := uintptr(unsafe.Pointer(cb))
466470 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
467- return gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
471+ handlerID := gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
472+ glib.SaveHandlerMapping(handlerID, cbPtr)
473+ return handlerID
468474 }
469475
470476 fcb := func(clsPtr uintptr) bool {
@@ -477,16 +483,20 @@ func (x *SpinRow) ConnectOutput(cb *func(SpinRow) bool) uint32 {
477483 }
478484 cbRefPtr := purego.NewCallback(fcb)
479485 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
480- return gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
486+ handlerID := gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
487+ glib.SaveHandlerMapping(handlerID, cbPtr)
488+ return handlerID
481489 }
482490
483491 // Emitted right after the spinbutton wraps.
484492 //
485493 // See [signal@Gtk.SpinButton::wrapped].
486-func (x *SpinRow) ConnectWrapped(cb *func(SpinRow)) uint32 {
494+func (x *SpinRow) ConnectWrapped(cb *func(SpinRow)) uint {
487495 cbPtr := uintptr(unsafe.Pointer(cb))
488496 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
489- return gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
497+ handlerID := gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
498+ glib.SaveHandlerMapping(handlerID, cbPtr)
499+ return handlerID
490500 }
491501
492502 fcb := func(clsPtr uintptr) {
@@ -499,7 +509,9 @@ func (x *SpinRow) ConnectWrapped(cb *func(SpinRow)) uint32 {
499509 }
500510 cbRefPtr := purego.NewCallback(fcb)
501511 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
502- return gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
512+ handlerID := gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
513+ glib.SaveHandlerMapping(handlerID, cbPtr)
514+ return handlerID
503515 }
504516
505517 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-split-button.go +14 -6
@@ -488,10 +488,12 @@ func (x *SplitButton) GetPropertyUseUnderline() bool {
488488 //
489489 // This is an action signal. Applications should never connect to this signal,
490490 // but use the [signal@SplitButton::clicked] signal.
491-func (x *SplitButton) ConnectActivate(cb *func(SplitButton)) uint32 {
491+func (x *SplitButton) ConnectActivate(cb *func(SplitButton)) uint {
492492 cbPtr := uintptr(unsafe.Pointer(cb))
493493 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
494- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
494+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
495+ glib.SaveHandlerMapping(handlerID, cbPtr)
496+ return handlerID
495497 }
496498
497499 fcb := func(clsPtr uintptr) {
@@ -504,14 +506,18 @@ func (x *SplitButton) ConnectActivate(cb *func(SplitButton)) uint32 {
504506 }
505507 cbRefPtr := purego.NewCallback(fcb)
506508 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
507- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
509+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
510+ glib.SaveHandlerMapping(handlerID, cbPtr)
511+ return handlerID
508512 }
509513
510514 // Emitted when the button has been activated (pressed and released).
511-func (x *SplitButton) ConnectClicked(cb *func(SplitButton)) uint32 {
515+func (x *SplitButton) ConnectClicked(cb *func(SplitButton)) uint {
512516 cbPtr := uintptr(unsafe.Pointer(cb))
513517 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
514- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
518+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
519+ glib.SaveHandlerMapping(handlerID, cbPtr)
520+ return handlerID
515521 }
516522
517523 fcb := func(clsPtr uintptr) {
@@ -524,7 +530,9 @@ func (x *SplitButton) ConnectClicked(cb *func(SplitButton)) uint32 {
524530 }
525531 cbRefPtr := purego.NewCallback(fcb)
526532 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
527- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
533+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
534+ glib.SaveHandlerMapping(handlerID, cbPtr)
535+ return handlerID
528536 }
529537
530538 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-swipe-tracker.go +28 -12
@@ -393,10 +393,12 @@ func (x *SwipeTracker) GetPropertyUpperOvershoot() bool {
393393
394394 // This signal is emitted right before a swipe will be started, after the
395395 // drag threshold has been passed.
396-func (x *SwipeTracker) ConnectBeginSwipe(cb *func(SwipeTracker)) uint32 {
396+func (x *SwipeTracker) ConnectBeginSwipe(cb *func(SwipeTracker)) uint {
397397 cbPtr := uintptr(unsafe.Pointer(cb))
398398 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
399- return gobject.SignalConnect(x.GoPointer(), "begin-swipe", cbRefPtr)
399+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-swipe", cbRefPtr)
400+ glib.SaveHandlerMapping(handlerID, cbPtr)
401+ return handlerID
400402 }
401403
402404 fcb := func(clsPtr uintptr) {
@@ -409,7 +411,9 @@ func (x *SwipeTracker) ConnectBeginSwipe(cb *func(SwipeTracker)) uint32 {
409411 }
410412 cbRefPtr := purego.NewCallback(fcb)
411413 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
412- return gobject.SignalConnect(x.GoPointer(), "begin-swipe", cbRefPtr)
414+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-swipe", cbRefPtr)
415+ glib.SaveHandlerMapping(handlerID, cbPtr)
416+ return handlerID
413417 }
414418
415419 // This signal is emitted as soon as the gesture has stopped.
@@ -418,10 +422,12 @@ func (x *SwipeTracker) ConnectBeginSwipe(cb *func(SwipeTracker)) uint32 {
418422 // value to @to with an animation using @velocity as the initial velocity,
419423 // provided in pixels per second. [class@SpringAnimation] is usually a good
420424 // fit for this.
421-func (x *SwipeTracker) ConnectEndSwipe(cb *func(SwipeTracker, float64, float64)) uint32 {
425+func (x *SwipeTracker) ConnectEndSwipe(cb *func(SwipeTracker, float64, float64)) uint {
422426 cbPtr := uintptr(unsafe.Pointer(cb))
423427 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
424- return gobject.SignalConnect(x.GoPointer(), "end-swipe", cbRefPtr)
428+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-swipe", cbRefPtr)
429+ glib.SaveHandlerMapping(handlerID, cbPtr)
430+ return handlerID
425431 }
426432
427433 fcb := func(clsPtr uintptr, VelocityVarp float64, ToVarp float64) {
@@ -434,17 +440,21 @@ func (x *SwipeTracker) ConnectEndSwipe(cb *func(SwipeTracker, float64, float64))
434440 }
435441 cbRefPtr := purego.NewCallback(fcb)
436442 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
437- return gobject.SignalConnect(x.GoPointer(), "end-swipe", cbRefPtr)
443+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-swipe", cbRefPtr)
444+ glib.SaveHandlerMapping(handlerID, cbPtr)
445+ return handlerID
438446 }
439447
440448 // This signal is emitted when a possible swipe is detected.
441449 //
442450 // The @direction value can be used to restrict the swipe to a certain
443451 // direction.
444-func (x *SwipeTracker) ConnectPrepare(cb *func(SwipeTracker, NavigationDirection)) uint32 {
452+func (x *SwipeTracker) ConnectPrepare(cb *func(SwipeTracker, NavigationDirection)) uint {
445453 cbPtr := uintptr(unsafe.Pointer(cb))
446454 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
447- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
455+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
456+ glib.SaveHandlerMapping(handlerID, cbPtr)
457+ return handlerID
448458 }
449459
450460 fcb := func(clsPtr uintptr, DirectionVarp NavigationDirection) {
@@ -457,14 +467,18 @@ func (x *SwipeTracker) ConnectPrepare(cb *func(SwipeTracker, NavigationDirection
457467 }
458468 cbRefPtr := purego.NewCallback(fcb)
459469 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
460- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
470+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
471+ glib.SaveHandlerMapping(handlerID, cbPtr)
472+ return handlerID
461473 }
462474
463475 // This signal is emitted every time the progress value changes.
464-func (x *SwipeTracker) ConnectUpdateSwipe(cb *func(SwipeTracker, float64)) uint32 {
476+func (x *SwipeTracker) ConnectUpdateSwipe(cb *func(SwipeTracker, float64)) uint {
465477 cbPtr := uintptr(unsafe.Pointer(cb))
466478 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
467- return gobject.SignalConnect(x.GoPointer(), "update-swipe", cbRefPtr)
479+ handlerID := gobject.SignalConnect(x.GoPointer(), "update-swipe", cbRefPtr)
480+ glib.SaveHandlerMapping(handlerID, cbPtr)
481+ return handlerID
468482 }
469483
470484 fcb := func(clsPtr uintptr, ProgressVarp float64) {
@@ -477,7 +491,9 @@ func (x *SwipeTracker) ConnectUpdateSwipe(cb *func(SwipeTracker, float64)) uint3
477491 }
478492 cbRefPtr := purego.NewCallback(fcb)
479493 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
480- return gobject.SignalConnect(x.GoPointer(), "update-swipe", cbRefPtr)
494+ handlerID := gobject.SignalConnect(x.GoPointer(), "update-swipe", cbRefPtr)
495+ glib.SaveHandlerMapping(handlerID, cbPtr)
496+ return handlerID
481497 }
482498
483499 // Retrieves the orientation of the @orientable.
M v4/adw/adw-tab-bar.go +14 -6
@@ -444,10 +444,12 @@ func (x *TabBar) GetPropertyTabsRevealed() bool {
444444 // [method@TabBar.setup_extra_drop_target].
445445 //
446446 // See [signal@Gtk.DropTarget::drop].
447-func (x *TabBar) ConnectExtraDragDrop(cb *func(TabBar, uintptr, uintptr) bool) uint32 {
447+func (x *TabBar) ConnectExtraDragDrop(cb *func(TabBar, uintptr, uintptr) bool) uint {
448448 cbPtr := uintptr(unsafe.Pointer(cb))
449449 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
450- return gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
450+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
451+ glib.SaveHandlerMapping(handlerID, cbPtr)
452+ return handlerID
451453 }
452454
453455 fcb := func(clsPtr uintptr, PageVarp uintptr, ValueVarp uintptr) bool {
@@ -460,7 +462,9 @@ func (x *TabBar) ConnectExtraDragDrop(cb *func(TabBar, uintptr, uintptr) bool) u
460462 }
461463 cbRefPtr := purego.NewCallback(fcb)
462464 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
463- return gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
465+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
466+ glib.SaveHandlerMapping(handlerID, cbPtr)
467+ return handlerID
464468 }
465469
466470 // This signal is emitted when the dropped content is preloaded.
@@ -472,10 +476,12 @@ func (x *TabBar) ConnectExtraDragDrop(cb *func(TabBar, uintptr, uintptr) bool) u
472476 // [method@TabBar.setup_extra_drop_target].
473477 //
474478 // See [property@Gtk.DropTarget:value].
475-func (x *TabBar) ConnectExtraDragValue(cb *func(TabBar, uintptr, uintptr) gdk.DragAction) uint32 {
479+func (x *TabBar) ConnectExtraDragValue(cb *func(TabBar, uintptr, uintptr) gdk.DragAction) uint {
476480 cbPtr := uintptr(unsafe.Pointer(cb))
477481 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
478- return gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
482+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
483+ glib.SaveHandlerMapping(handlerID, cbPtr)
484+ return handlerID
479485 }
480486
481487 fcb := func(clsPtr uintptr, PageVarp uintptr, ValueVarp uintptr) gdk.DragAction {
@@ -488,7 +494,9 @@ func (x *TabBar) ConnectExtraDragValue(cb *func(TabBar, uintptr, uintptr) gdk.Dr
488494 }
489495 cbRefPtr := purego.NewCallback(fcb)
490496 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
491- return gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
497+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
498+ glib.SaveHandlerMapping(handlerID, cbPtr)
499+ return handlerID
492500 }
493501
494502 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-tab-button.go +14 -6
@@ -130,10 +130,12 @@ func (c *TabButton) SetGoPointer(ptr uintptr) {
130130 //
131131 // This is an action signal. Applications should never connect to this signal,
132132 // but use the [signal@TabButton::clicked] signal.
133-func (x *TabButton) ConnectActivate(cb *func(TabButton)) uint32 {
133+func (x *TabButton) ConnectActivate(cb *func(TabButton)) uint {
134134 cbPtr := uintptr(unsafe.Pointer(cb))
135135 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
136- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
136+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
137+ glib.SaveHandlerMapping(handlerID, cbPtr)
138+ return handlerID
137139 }
138140
139141 fcb := func(clsPtr uintptr) {
@@ -146,14 +148,18 @@ func (x *TabButton) ConnectActivate(cb *func(TabButton)) uint32 {
146148 }
147149 cbRefPtr := purego.NewCallback(fcb)
148150 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
149- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
151+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
152+ glib.SaveHandlerMapping(handlerID, cbPtr)
153+ return handlerID
150154 }
151155
152156 // Emitted when the button has been activated (pressed and released).
153-func (x *TabButton) ConnectClicked(cb *func(TabButton)) uint32 {
157+func (x *TabButton) ConnectClicked(cb *func(TabButton)) uint {
154158 cbPtr := uintptr(unsafe.Pointer(cb))
155159 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
156- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
160+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
161+ glib.SaveHandlerMapping(handlerID, cbPtr)
162+ return handlerID
157163 }
158164
159165 fcb := func(clsPtr uintptr) {
@@ -166,7 +172,9 @@ func (x *TabButton) ConnectClicked(cb *func(TabButton)) uint32 {
166172 }
167173 cbRefPtr := purego.NewCallback(fcb)
168174 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
169- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
175+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
176+ glib.SaveHandlerMapping(handlerID, cbPtr)
177+ return handlerID
170178 }
171179
172180 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-tab-overview.go +21 -9
@@ -580,10 +580,12 @@ func (x *TabOverview) GetPropertyShowStartTitleButtons() bool {
580580 //
581581 // The signal handler is expected to create a new page in the corresponding
582582 // [class@TabView] and return it.
583-func (x *TabOverview) ConnectCreateTab(cb *func(TabOverview) TabPage) uint32 {
583+func (x *TabOverview) ConnectCreateTab(cb *func(TabOverview) TabPage) uint {
584584 cbPtr := uintptr(unsafe.Pointer(cb))
585585 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
586- return gobject.SignalConnect(x.GoPointer(), "create-tab", cbRefPtr)
586+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-tab", cbRefPtr)
587+ glib.SaveHandlerMapping(handlerID, cbPtr)
588+ return handlerID
587589 }
588590
589591 fcb := func(clsPtr uintptr) uintptr {
@@ -597,7 +599,9 @@ func (x *TabOverview) ConnectCreateTab(cb *func(TabOverview) TabPage) uint32 {
597599 }
598600 cbRefPtr := purego.NewCallback(fcb)
599601 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
600- return gobject.SignalConnect(x.GoPointer(), "create-tab", cbRefPtr)
602+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-tab", cbRefPtr)
603+ glib.SaveHandlerMapping(handlerID, cbPtr)
604+ return handlerID
601605 }
602606
603607 // This signal is emitted when content is dropped onto a tab.
@@ -606,10 +610,12 @@ func (x *TabOverview) ConnectCreateTab(cb *func(TabOverview) TabPage) uint32 {
606610 // [method@TabOverview.setup_extra_drop_target].
607611 //
608612 // See [signal@Gtk.DropTarget::drop].
609-func (x *TabOverview) ConnectExtraDragDrop(cb *func(TabOverview, uintptr, uintptr) bool) uint32 {
613+func (x *TabOverview) ConnectExtraDragDrop(cb *func(TabOverview, uintptr, uintptr) bool) uint {
610614 cbPtr := uintptr(unsafe.Pointer(cb))
611615 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
612- return gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
616+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
617+ glib.SaveHandlerMapping(handlerID, cbPtr)
618+ return handlerID
613619 }
614620
615621 fcb := func(clsPtr uintptr, PageVarp uintptr, ValueVarp uintptr) bool {
@@ -622,7 +628,9 @@ func (x *TabOverview) ConnectExtraDragDrop(cb *func(TabOverview, uintptr, uintpt
622628 }
623629 cbRefPtr := purego.NewCallback(fcb)
624630 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
625- return gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
631+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-drop", cbRefPtr)
632+ glib.SaveHandlerMapping(handlerID, cbPtr)
633+ return handlerID
626634 }
627635
628636 // This signal is emitted when the dropped content is preloaded.
@@ -634,10 +642,12 @@ func (x *TabOverview) ConnectExtraDragDrop(cb *func(TabOverview, uintptr, uintpt
634642 // [method@TabOverview.setup_extra_drop_target].
635643 //
636644 // See [property@Gtk.DropTarget:value].
637-func (x *TabOverview) ConnectExtraDragValue(cb *func(TabOverview, uintptr, uintptr) gdk.DragAction) uint32 {
645+func (x *TabOverview) ConnectExtraDragValue(cb *func(TabOverview, uintptr, uintptr) gdk.DragAction) uint {
638646 cbPtr := uintptr(unsafe.Pointer(cb))
639647 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
640- return gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
648+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
649+ glib.SaveHandlerMapping(handlerID, cbPtr)
650+ return handlerID
641651 }
642652
643653 fcb := func(clsPtr uintptr, PageVarp uintptr, ValueVarp uintptr) gdk.DragAction {
@@ -650,7 +660,9 @@ func (x *TabOverview) ConnectExtraDragValue(cb *func(TabOverview, uintptr, uintp
650660 }
651661 cbRefPtr := purego.NewCallback(fcb)
652662 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
653- return gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
663+ handlerID := gobject.SignalConnect(x.GoPointer(), "extra-drag-value", cbRefPtr)
664+ glib.SaveHandlerMapping(handlerID, cbPtr)
665+ return handlerID
654666 }
655667
656668 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-tab-view.go +49 -21
@@ -1852,10 +1852,12 @@ func (x *TabView) GetPropertyNPinnedPages() int {
18521852 //
18531853 // The signal handler should return `GDK_EVENT_STOP` to stop propagation or
18541854 // `GDK_EVENT_CONTINUE` to invoke the default handler.
1855-func (x *TabView) ConnectClosePage(cb *func(TabView, uintptr) bool) uint32 {
1855+func (x *TabView) ConnectClosePage(cb *func(TabView, uintptr) bool) uint {
18561856 cbPtr := uintptr(unsafe.Pointer(cb))
18571857 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1858- return gobject.SignalConnect(x.GoPointer(), "close-page", cbRefPtr)
1858+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-page", cbRefPtr)
1859+ glib.SaveHandlerMapping(handlerID, cbPtr)
1860+ return handlerID
18591861 }
18601862
18611863 fcb := func(clsPtr uintptr, PageVarp uintptr) bool {
@@ -1868,7 +1870,9 @@ func (x *TabView) ConnectClosePage(cb *func(TabView, uintptr) bool) uint32 {
18681870 }
18691871 cbRefPtr := purego.NewCallback(fcb)
18701872 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1871- return gobject.SignalConnect(x.GoPointer(), "close-page", cbRefPtr)
1873+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-page", cbRefPtr)
1874+ glib.SaveHandlerMapping(handlerID, cbPtr)
1875+ return handlerID
18721876 }
18731877
18741878 // Emitted when a tab should be transferred into a new window.
@@ -1877,10 +1881,12 @@ func (x *TabView) ConnectClosePage(cb *func(TabView, uintptr) bool) uint32 {
18771881 //
18781882 // The signal handler is expected to create a new window, position it as
18791883 // needed and return its `AdwTabView` that the page will be transferred into.
1880-func (x *TabView) ConnectCreateWindow(cb *func(TabView) TabView) uint32 {
1884+func (x *TabView) ConnectCreateWindow(cb *func(TabView) TabView) uint {
18811885 cbPtr := uintptr(unsafe.Pointer(cb))
18821886 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1883- return gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
1887+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
1888+ glib.SaveHandlerMapping(handlerID, cbPtr)
1889+ return handlerID
18841890 }
18851891
18861892 fcb := func(clsPtr uintptr) uintptr {
@@ -1894,17 +1900,21 @@ func (x *TabView) ConnectCreateWindow(cb *func(TabView) TabView) uint32 {
18941900 }
18951901 cbRefPtr := purego.NewCallback(fcb)
18961902 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1897- return gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
1903+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
1904+ glib.SaveHandlerMapping(handlerID, cbPtr)
1905+ return handlerID
18981906 }
18991907
19001908 // Emitted after the indicator icon on @page has been activated.
19011909 //
19021910 // See [property@TabPage:indicator-icon] and
19031911 // [property@TabPage:indicator-activatable].
1904-func (x *TabView) ConnectIndicatorActivated(cb *func(TabView, uintptr)) uint32 {
1912+func (x *TabView) ConnectIndicatorActivated(cb *func(TabView, uintptr)) uint {
19051913 cbPtr := uintptr(unsafe.Pointer(cb))
19061914 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1907- return gobject.SignalConnect(x.GoPointer(), "indicator-activated", cbRefPtr)
1915+ handlerID := gobject.SignalConnect(x.GoPointer(), "indicator-activated", cbRefPtr)
1916+ glib.SaveHandlerMapping(handlerID, cbPtr)
1917+ return handlerID
19081918 }
19091919
19101920 fcb := func(clsPtr uintptr, PageVarp uintptr) {
@@ -1917,17 +1927,21 @@ func (x *TabView) ConnectIndicatorActivated(cb *func(TabView, uintptr)) uint32 {
19171927 }
19181928 cbRefPtr := purego.NewCallback(fcb)
19191929 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1920- return gobject.SignalConnect(x.GoPointer(), "indicator-activated", cbRefPtr)
1930+ handlerID := gobject.SignalConnect(x.GoPointer(), "indicator-activated", cbRefPtr)
1931+ glib.SaveHandlerMapping(handlerID, cbPtr)
1932+ return handlerID
19211933 }
19221934
19231935 // Emitted when a page has been created or transferred to @self.
19241936 //
19251937 // A typical reason to connect to this signal would be to connect to page
19261938 // signals for things such as updating window title.
1927-func (x *TabView) ConnectPageAttached(cb *func(TabView, uintptr, int)) uint32 {
1939+func (x *TabView) ConnectPageAttached(cb *func(TabView, uintptr, int)) uint {
19281940 cbPtr := uintptr(unsafe.Pointer(cb))
19291941 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1930- return gobject.SignalConnect(x.GoPointer(), "page-attached", cbRefPtr)
1942+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-attached", cbRefPtr)
1943+ glib.SaveHandlerMapping(handlerID, cbPtr)
1944+ return handlerID
19311945 }
19321946
19331947 fcb := func(clsPtr uintptr, PageVarp uintptr, PositionVarp int) {
@@ -1940,7 +1954,9 @@ func (x *TabView) ConnectPageAttached(cb *func(TabView, uintptr, int)) uint32 {
19401954 }
19411955 cbRefPtr := purego.NewCallback(fcb)
19421956 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1943- return gobject.SignalConnect(x.GoPointer(), "page-attached", cbRefPtr)
1957+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-attached", cbRefPtr)
1958+ glib.SaveHandlerMapping(handlerID, cbPtr)
1959+ return handlerID
19441960 }
19451961
19461962 // Emitted when a page has been removed or transferred to another view.
@@ -1952,10 +1968,12 @@ func (x *TabView) ConnectPageAttached(cb *func(TabView, uintptr, int)) uint32 {
19521968 // this function as the child might merely be moved to another window; use
19531969 // child dispose handler for that or do it in sync with your
19541970 // [method@TabView.close_page_finish] calls.
1955-func (x *TabView) ConnectPageDetached(cb *func(TabView, uintptr, int)) uint32 {
1971+func (x *TabView) ConnectPageDetached(cb *func(TabView, uintptr, int)) uint {
19561972 cbPtr := uintptr(unsafe.Pointer(cb))
19571973 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1958- return gobject.SignalConnect(x.GoPointer(), "page-detached", cbRefPtr)
1974+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-detached", cbRefPtr)
1975+ glib.SaveHandlerMapping(handlerID, cbPtr)
1976+ return handlerID
19591977 }
19601978
19611979 fcb := func(clsPtr uintptr, PageVarp uintptr, PositionVarp int) {
@@ -1968,14 +1986,18 @@ func (x *TabView) ConnectPageDetached(cb *func(TabView, uintptr, int)) uint32 {
19681986 }
19691987 cbRefPtr := purego.NewCallback(fcb)
19701988 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1971- return gobject.SignalConnect(x.GoPointer(), "page-detached", cbRefPtr)
1989+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-detached", cbRefPtr)
1990+ glib.SaveHandlerMapping(handlerID, cbPtr)
1991+ return handlerID
19721992 }
19731993
19741994 // Emitted after @page has been reordered to @position.
1975-func (x *TabView) ConnectPageReordered(cb *func(TabView, uintptr, int)) uint32 {
1995+func (x *TabView) ConnectPageReordered(cb *func(TabView, uintptr, int)) uint {
19761996 cbPtr := uintptr(unsafe.Pointer(cb))
19771997 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1978- return gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1998+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1999+ glib.SaveHandlerMapping(handlerID, cbPtr)
2000+ return handlerID
19792001 }
19802002
19812003 fcb := func(clsPtr uintptr, PageVarp uintptr, PositionVarp int) {
@@ -1988,7 +2010,9 @@ func (x *TabView) ConnectPageReordered(cb *func(TabView, uintptr, int)) uint32 {
19882010 }
19892011 cbRefPtr := purego.NewCallback(fcb)
19902012 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1991- return gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
2013+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
2014+ glib.SaveHandlerMapping(handlerID, cbPtr)
2015+ return handlerID
19922016 }
19932017
19942018 // Emitted when a context menu is opened or closed for @page.
@@ -1997,10 +2021,12 @@ func (x *TabView) ConnectPageReordered(cb *func(TabView, uintptr, int)) uint32 {
19972021 //
19982022 // It can be used to set up menu actions before showing the menu, for example
19992023 // disable actions not applicable to @page.
2000-func (x *TabView) ConnectSetupMenu(cb *func(TabView, uintptr)) uint32 {
2024+func (x *TabView) ConnectSetupMenu(cb *func(TabView, uintptr)) uint {
20012025 cbPtr := uintptr(unsafe.Pointer(cb))
20022026 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2003- return gobject.SignalConnect(x.GoPointer(), "setup-menu", cbRefPtr)
2027+ handlerID := gobject.SignalConnect(x.GoPointer(), "setup-menu", cbRefPtr)
2028+ glib.SaveHandlerMapping(handlerID, cbPtr)
2029+ return handlerID
20042030 }
20052031
20062032 fcb := func(clsPtr uintptr, PageVarp uintptr) {
@@ -2013,7 +2039,9 @@ func (x *TabView) ConnectSetupMenu(cb *func(TabView, uintptr)) uint32 {
20132039 }
20142040 cbRefPtr := purego.NewCallback(fcb)
20152041 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2016- return gobject.SignalConnect(x.GoPointer(), "setup-menu", cbRefPtr)
2042+ handlerID := gobject.SignalConnect(x.GoPointer(), "setup-menu", cbRefPtr)
2043+ glib.SaveHandlerMapping(handlerID, cbPtr)
2044+ return handlerID
20172045 }
20182046
20192047 // Requests the user's screen reader to announce the given message.
M v4/adw/adw-toast.go +14 -6
@@ -656,10 +656,12 @@ func (x *Toast) GetPropertyUseMarkup() bool {
656656 // Emitted after the button has been clicked.
657657 //
658658 // It can be used as an alternative to setting an action.
659-func (x *Toast) ConnectButtonClicked(cb *func(Toast)) uint32 {
659+func (x *Toast) ConnectButtonClicked(cb *func(Toast)) uint {
660660 cbPtr := uintptr(unsafe.Pointer(cb))
661661 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
662- return gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
662+ handlerID := gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
663+ glib.SaveHandlerMapping(handlerID, cbPtr)
664+ return handlerID
663665 }
664666
665667 fcb := func(clsPtr uintptr) {
@@ -672,14 +674,18 @@ func (x *Toast) ConnectButtonClicked(cb *func(Toast)) uint32 {
672674 }
673675 cbRefPtr := purego.NewCallback(fcb)
674676 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
675- return gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
677+ handlerID := gobject.SignalConnect(x.GoPointer(), "button-clicked", cbRefPtr)
678+ glib.SaveHandlerMapping(handlerID, cbPtr)
679+ return handlerID
676680 }
677681
678682 // Emitted when the toast has been dismissed.
679-func (x *Toast) ConnectDismissed(cb *func(Toast)) uint32 {
683+func (x *Toast) ConnectDismissed(cb *func(Toast)) uint {
680684 cbPtr := uintptr(unsafe.Pointer(cb))
681685 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
682- return gobject.SignalConnect(x.GoPointer(), "dismissed", cbRefPtr)
686+ handlerID := gobject.SignalConnect(x.GoPointer(), "dismissed", cbRefPtr)
687+ glib.SaveHandlerMapping(handlerID, cbPtr)
688+ return handlerID
683689 }
684690
685691 fcb := func(clsPtr uintptr) {
@@ -692,7 +698,9 @@ func (x *Toast) ConnectDismissed(cb *func(Toast)) uint32 {
692698 }
693699 cbRefPtr := purego.NewCallback(fcb)
694700 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
695- return gobject.SignalConnect(x.GoPointer(), "dismissed", cbRefPtr)
701+ handlerID := gobject.SignalConnect(x.GoPointer(), "dismissed", cbRefPtr)
702+ glib.SaveHandlerMapping(handlerID, cbPtr)
703+ return handlerID
696704 }
697705
698706 func init() {
M v4/cairo/main.go +1 -1
@@ -185,7 +185,7 @@ func (x *RectangleInt) GoPointer() uintptr {
185185 type Glyph struct {
186186 _ structs.HostLayout
187187
188- Index uint32
188+ Index uint
189189
190190 X float64
191191
M v4/gdk/gdkclipboard.go +7 -3
@@ -456,10 +456,12 @@ func (x *Clipboard) GetPropertyLocal() bool {
456456 }
457457
458458 // Emitted when the clipboard changes ownership.
459-func (x *Clipboard) ConnectChanged(cb *func(Clipboard)) uint32 {
459+func (x *Clipboard) ConnectChanged(cb *func(Clipboard)) uint {
460460 cbPtr := uintptr(unsafe.Pointer(cb))
461461 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
462- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
462+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
463+ glib.SaveHandlerMapping(handlerID, cbPtr)
464+ return handlerID
463465 }
464466
465467 fcb := func(clsPtr uintptr) {
@@ -472,7 +474,9 @@ func (x *Clipboard) ConnectChanged(cb *func(Clipboard)) uint32 {
472474 }
473475 cbRefPtr := purego.NewCallback(fcb)
474476 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
475- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
477+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
478+ glib.SaveHandlerMapping(handlerID, cbPtr)
479+ return handlerID
476480 }
477481
478482 func init() {
M v4/gdk/gdkcontentprovider.go +7 -3
@@ -469,10 +469,12 @@ func (x *ContentProvider) GetPropertyStorableFormats() uintptr {
469469 }
470470
471471 // Emitted whenever the content provided by this provider has changed.
472-func (x *ContentProvider) ConnectContentChanged(cb *func(ContentProvider)) uint32 {
472+func (x *ContentProvider) ConnectContentChanged(cb *func(ContentProvider)) uint {
473473 cbPtr := uintptr(unsafe.Pointer(cb))
474474 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
475- return gobject.SignalConnect(x.GoPointer(), "content-changed", cbRefPtr)
475+ handlerID := gobject.SignalConnect(x.GoPointer(), "content-changed", cbRefPtr)
476+ glib.SaveHandlerMapping(handlerID, cbPtr)
477+ return handlerID
476478 }
477479
478480 fcb := func(clsPtr uintptr) {
@@ -485,7 +487,9 @@ func (x *ContentProvider) ConnectContentChanged(cb *func(ContentProvider)) uint3
485487 }
486488 cbRefPtr := purego.NewCallback(fcb)
487489 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
488- return gobject.SignalConnect(x.GoPointer(), "content-changed", cbRefPtr)
490+ handlerID := gobject.SignalConnect(x.GoPointer(), "content-changed", cbRefPtr)
491+ glib.SaveHandlerMapping(handlerID, cbPtr)
492+ return handlerID
489493 }
490494
491495 func init() {
M v4/gdk/gdkdevice.go +14 -6
@@ -555,10 +555,12 @@ func (x *Device) GetPropertyVendorId() string {
555555 // example, user switches from the USB mouse to a tablet); in
556556 // that case the logical device will change to reflect the axes
557557 // and keys on the new physical device.
558-func (x *Device) ConnectChanged(cb *func(Device)) uint32 {
558+func (x *Device) ConnectChanged(cb *func(Device)) uint {
559559 cbPtr := uintptr(unsafe.Pointer(cb))
560560 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
561- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
561+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
562+ glib.SaveHandlerMapping(handlerID, cbPtr)
563+ return handlerID
562564 }
563565
564566 fcb := func(clsPtr uintptr) {
@@ -571,14 +573,18 @@ func (x *Device) ConnectChanged(cb *func(Device)) uint32 {
571573 }
572574 cbRefPtr := purego.NewCallback(fcb)
573575 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
574- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
576+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
577+ glib.SaveHandlerMapping(handlerID, cbPtr)
578+ return handlerID
575579 }
576580
577581 // Emitted on pen/eraser devices whenever tools enter or leave proximity.
578-func (x *Device) ConnectToolChanged(cb *func(Device, uintptr)) uint32 {
582+func (x *Device) ConnectToolChanged(cb *func(Device, uintptr)) uint {
579583 cbPtr := uintptr(unsafe.Pointer(cb))
580584 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
581- return gobject.SignalConnect(x.GoPointer(), "tool-changed", cbRefPtr)
585+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-changed", cbRefPtr)
586+ glib.SaveHandlerMapping(handlerID, cbPtr)
587+ return handlerID
582588 }
583589
584590 fcb := func(clsPtr uintptr, ToolVarp uintptr) {
@@ -591,7 +597,9 @@ func (x *Device) ConnectToolChanged(cb *func(Device, uintptr)) uint32 {
591597 }
592598 cbRefPtr := purego.NewCallback(fcb)
593599 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
594- return gobject.SignalConnect(x.GoPointer(), "tool-changed", cbRefPtr)
600+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-changed", cbRefPtr)
601+ glib.SaveHandlerMapping(handlerID, cbPtr)
602+ return handlerID
595603 }
596604
597605 func init() {
M v4/gdk/gdkdisplay.go +35 -15
@@ -566,10 +566,12 @@ func (x *Display) GetPropertyShadowWidth() bool {
566566 }
567567
568568 // Emitted when the connection to the windowing system for @display is closed.
569-func (x *Display) ConnectClosed(cb *func(Display, bool)) uint32 {
569+func (x *Display) ConnectClosed(cb *func(Display, bool)) uint {
570570 cbPtr := uintptr(unsafe.Pointer(cb))
571571 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
572- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
572+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
573+ glib.SaveHandlerMapping(handlerID, cbPtr)
574+ return handlerID
573575 }
574576
575577 fcb := func(clsPtr uintptr, IsErrorVarp bool) {
@@ -582,14 +584,18 @@ func (x *Display) ConnectClosed(cb *func(Display, bool)) uint32 {
582584 }
583585 cbRefPtr := purego.NewCallback(fcb)
584586 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
585- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
587+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
588+ glib.SaveHandlerMapping(handlerID, cbPtr)
589+ return handlerID
586590 }
587591
588592 // Emitted when the connection to the windowing system for @display is opened.
589-func (x *Display) ConnectOpened(cb *func(Display)) uint32 {
593+func (x *Display) ConnectOpened(cb *func(Display)) uint {
590594 cbPtr := uintptr(unsafe.Pointer(cb))
591595 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
592- return gobject.SignalConnect(x.GoPointer(), "opened", cbRefPtr)
596+ handlerID := gobject.SignalConnect(x.GoPointer(), "opened", cbRefPtr)
597+ glib.SaveHandlerMapping(handlerID, cbPtr)
598+ return handlerID
593599 }
594600
595601 fcb := func(clsPtr uintptr) {
@@ -602,14 +608,18 @@ func (x *Display) ConnectOpened(cb *func(Display)) uint32 {
602608 }
603609 cbRefPtr := purego.NewCallback(fcb)
604610 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
605- return gobject.SignalConnect(x.GoPointer(), "opened", cbRefPtr)
611+ handlerID := gobject.SignalConnect(x.GoPointer(), "opened", cbRefPtr)
612+ glib.SaveHandlerMapping(handlerID, cbPtr)
613+ return handlerID
606614 }
607615
608616 // Emitted whenever a new seat is made known to the windowing system.
609-func (x *Display) ConnectSeatAdded(cb *func(Display, uintptr)) uint32 {
617+func (x *Display) ConnectSeatAdded(cb *func(Display, uintptr)) uint {
610618 cbPtr := uintptr(unsafe.Pointer(cb))
611619 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
612- return gobject.SignalConnect(x.GoPointer(), "seat-added", cbRefPtr)
620+ handlerID := gobject.SignalConnect(x.GoPointer(), "seat-added", cbRefPtr)
621+ glib.SaveHandlerMapping(handlerID, cbPtr)
622+ return handlerID
613623 }
614624
615625 fcb := func(clsPtr uintptr, SeatVarp uintptr) {
@@ -622,14 +632,18 @@ func (x *Display) ConnectSeatAdded(cb *func(Display, uintptr)) uint32 {
622632 }
623633 cbRefPtr := purego.NewCallback(fcb)
624634 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
625- return gobject.SignalConnect(x.GoPointer(), "seat-added", cbRefPtr)
635+ handlerID := gobject.SignalConnect(x.GoPointer(), "seat-added", cbRefPtr)
636+ glib.SaveHandlerMapping(handlerID, cbPtr)
637+ return handlerID
626638 }
627639
628640 // Emitted whenever a seat is removed by the windowing system.
629-func (x *Display) ConnectSeatRemoved(cb *func(Display, uintptr)) uint32 {
641+func (x *Display) ConnectSeatRemoved(cb *func(Display, uintptr)) uint {
630642 cbPtr := uintptr(unsafe.Pointer(cb))
631643 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
632- return gobject.SignalConnect(x.GoPointer(), "seat-removed", cbRefPtr)
644+ handlerID := gobject.SignalConnect(x.GoPointer(), "seat-removed", cbRefPtr)
645+ glib.SaveHandlerMapping(handlerID, cbPtr)
646+ return handlerID
633647 }
634648
635649 fcb := func(clsPtr uintptr, SeatVarp uintptr) {
@@ -642,14 +656,18 @@ func (x *Display) ConnectSeatRemoved(cb *func(Display, uintptr)) uint32 {
642656 }
643657 cbRefPtr := purego.NewCallback(fcb)
644658 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
645- return gobject.SignalConnect(x.GoPointer(), "seat-removed", cbRefPtr)
659+ handlerID := gobject.SignalConnect(x.GoPointer(), "seat-removed", cbRefPtr)
660+ glib.SaveHandlerMapping(handlerID, cbPtr)
661+ return handlerID
646662 }
647663
648664 // Emitted whenever a setting changes its value.
649-func (x *Display) ConnectSettingChanged(cb *func(Display, string)) uint32 {
665+func (x *Display) ConnectSettingChanged(cb *func(Display, string)) uint {
650666 cbPtr := uintptr(unsafe.Pointer(cb))
651667 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
652- return gobject.SignalConnect(x.GoPointer(), "setting-changed", cbRefPtr)
668+ handlerID := gobject.SignalConnect(x.GoPointer(), "setting-changed", cbRefPtr)
669+ glib.SaveHandlerMapping(handlerID, cbPtr)
670+ return handlerID
653671 }
654672
655673 fcb := func(clsPtr uintptr, SettingVarp string) {
@@ -662,7 +680,9 @@ func (x *Display) ConnectSettingChanged(cb *func(Display, string)) uint32 {
662680 }
663681 cbRefPtr := purego.NewCallback(fcb)
664682 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
665- return gobject.SignalConnect(x.GoPointer(), "setting-changed", cbRefPtr)
683+ handlerID := gobject.SignalConnect(x.GoPointer(), "setting-changed", cbRefPtr)
684+ glib.SaveHandlerMapping(handlerID, cbPtr)
685+ return handlerID
666686 }
667687
668688 var xDisplayGetDefault func() uintptr
M v4/gdk/gdkdisplaymanager.go +7 -3
@@ -187,10 +187,12 @@ func (c *DisplayManager) SetGoPointer(ptr uintptr) {
187187 }
188188
189189 // Emitted when a display is opened.
190-func (x *DisplayManager) ConnectDisplayOpened(cb *func(DisplayManager, uintptr)) uint32 {
190+func (x *DisplayManager) ConnectDisplayOpened(cb *func(DisplayManager, uintptr)) uint {
191191 cbPtr := uintptr(unsafe.Pointer(cb))
192192 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
193- return gobject.SignalConnect(x.GoPointer(), "display-opened", cbRefPtr)
193+ handlerID := gobject.SignalConnect(x.GoPointer(), "display-opened", cbRefPtr)
194+ glib.SaveHandlerMapping(handlerID, cbPtr)
195+ return handlerID
194196 }
195197
196198 fcb := func(clsPtr uintptr, DisplayVarp uintptr) {
@@ -203,7 +205,9 @@ func (x *DisplayManager) ConnectDisplayOpened(cb *func(DisplayManager, uintptr))
203205 }
204206 cbRefPtr := purego.NewCallback(fcb)
205207 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
206- return gobject.SignalConnect(x.GoPointer(), "display-opened", cbRefPtr)
208+ handlerID := gobject.SignalConnect(x.GoPointer(), "display-opened", cbRefPtr)
209+ glib.SaveHandlerMapping(handlerID, cbPtr)
210+ return handlerID
207211 }
208212
209213 var xDisplayManagerGet func() uintptr
M v4/gdk/gdkdrag.go +21 -9
@@ -251,10 +251,12 @@ func (x *Drag) GetPropertyFormats() uintptr {
251251 }
252252
253253 // Emitted when the drag operation is cancelled.
254-func (x *Drag) ConnectCancel(cb *func(Drag, DragCancelReason)) uint32 {
254+func (x *Drag) ConnectCancel(cb *func(Drag, DragCancelReason)) uint {
255255 cbPtr := uintptr(unsafe.Pointer(cb))
256256 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
257- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
257+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
258+ glib.SaveHandlerMapping(handlerID, cbPtr)
259+ return handlerID
258260 }
259261
260262 fcb := func(clsPtr uintptr, ReasonVarp DragCancelReason) {
@@ -267,16 +269,20 @@ func (x *Drag) ConnectCancel(cb *func(Drag, DragCancelReason)) uint32 {
267269 }
268270 cbRefPtr := purego.NewCallback(fcb)
269271 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
270- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
272+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
273+ glib.SaveHandlerMapping(handlerID, cbPtr)
274+ return handlerID
271275 }
272276
273277 // Emitted when the destination side has finished reading all data.
274278 //
275279 // The drag object can now free all miscellaneous data.
276-func (x *Drag) ConnectDndFinished(cb *func(Drag)) uint32 {
280+func (x *Drag) ConnectDndFinished(cb *func(Drag)) uint {
277281 cbPtr := uintptr(unsafe.Pointer(cb))
278282 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
279- return gobject.SignalConnect(x.GoPointer(), "dnd-finished", cbRefPtr)
283+ handlerID := gobject.SignalConnect(x.GoPointer(), "dnd-finished", cbRefPtr)
284+ glib.SaveHandlerMapping(handlerID, cbPtr)
285+ return handlerID
280286 }
281287
282288 fcb := func(clsPtr uintptr) {
@@ -289,14 +295,18 @@ func (x *Drag) ConnectDndFinished(cb *func(Drag)) uint32 {
289295 }
290296 cbRefPtr := purego.NewCallback(fcb)
291297 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
292- return gobject.SignalConnect(x.GoPointer(), "dnd-finished", cbRefPtr)
298+ handlerID := gobject.SignalConnect(x.GoPointer(), "dnd-finished", cbRefPtr)
299+ glib.SaveHandlerMapping(handlerID, cbPtr)
300+ return handlerID
293301 }
294302
295303 // Emitted when the drop operation is performed on an accepting client.
296-func (x *Drag) ConnectDropPerformed(cb *func(Drag)) uint32 {
304+func (x *Drag) ConnectDropPerformed(cb *func(Drag)) uint {
297305 cbPtr := uintptr(unsafe.Pointer(cb))
298306 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
299- return gobject.SignalConnect(x.GoPointer(), "drop-performed", cbRefPtr)
307+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop-performed", cbRefPtr)
308+ glib.SaveHandlerMapping(handlerID, cbPtr)
309+ return handlerID
300310 }
301311
302312 fcb := func(clsPtr uintptr) {
@@ -309,7 +319,9 @@ func (x *Drag) ConnectDropPerformed(cb *func(Drag)) uint32 {
309319 }
310320 cbRefPtr := purego.NewCallback(fcb)
311321 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
312- return gobject.SignalConnect(x.GoPointer(), "drop-performed", cbRefPtr)
322+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop-performed", cbRefPtr)
323+ glib.SaveHandlerMapping(handlerID, cbPtr)
324+ return handlerID
313325 }
314326
315327 var xDragBegin func(uintptr, uintptr, uintptr, DragAction, float64, float64) uintptr
M v4/gdk/gdkframeclock.go +49 -21
@@ -261,10 +261,12 @@ func (c *FrameClock) SetGoPointer(ptr uintptr) {
261261 // This signal ends processing of the frame.
262262 //
263263 // Applications should generally not handle this signal.
264-func (x *FrameClock) ConnectAfterPaint(cb *func(FrameClock)) uint32 {
264+func (x *FrameClock) ConnectAfterPaint(cb *func(FrameClock)) uint {
265265 cbPtr := uintptr(unsafe.Pointer(cb))
266266 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
267- return gobject.SignalConnect(x.GoPointer(), "after-paint", cbRefPtr)
267+ handlerID := gobject.SignalConnect(x.GoPointer(), "after-paint", cbRefPtr)
268+ glib.SaveHandlerMapping(handlerID, cbPtr)
269+ return handlerID
268270 }
269271
270272 fcb := func(clsPtr uintptr) {
@@ -277,16 +279,20 @@ func (x *FrameClock) ConnectAfterPaint(cb *func(FrameClock)) uint32 {
277279 }
278280 cbRefPtr := purego.NewCallback(fcb)
279281 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
280- return gobject.SignalConnect(x.GoPointer(), "after-paint", cbRefPtr)
282+ handlerID := gobject.SignalConnect(x.GoPointer(), "after-paint", cbRefPtr)
283+ glib.SaveHandlerMapping(handlerID, cbPtr)
284+ return handlerID
281285 }
282286
283287 // Begins processing of the frame.
284288 //
285289 // Applications should generally not handle this signal.
286-func (x *FrameClock) ConnectBeforePaint(cb *func(FrameClock)) uint32 {
290+func (x *FrameClock) ConnectBeforePaint(cb *func(FrameClock)) uint {
287291 cbPtr := uintptr(unsafe.Pointer(cb))
288292 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
289- return gobject.SignalConnect(x.GoPointer(), "before-paint", cbRefPtr)
293+ handlerID := gobject.SignalConnect(x.GoPointer(), "before-paint", cbRefPtr)
294+ glib.SaveHandlerMapping(handlerID, cbPtr)
295+ return handlerID
290296 }
291297
292298 fcb := func(clsPtr uintptr) {
@@ -299,17 +305,21 @@ func (x *FrameClock) ConnectBeforePaint(cb *func(FrameClock)) uint32 {
299305 }
300306 cbRefPtr := purego.NewCallback(fcb)
301307 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
302- return gobject.SignalConnect(x.GoPointer(), "before-paint", cbRefPtr)
308+ handlerID := gobject.SignalConnect(x.GoPointer(), "before-paint", cbRefPtr)
309+ glib.SaveHandlerMapping(handlerID, cbPtr)
310+ return handlerID
303311 }
304312
305313 // Used to flush pending motion events that are being batched up and
306314 // compressed together.
307315 //
308316 // Applications should not handle this signal.
309-func (x *FrameClock) ConnectFlushEvents(cb *func(FrameClock)) uint32 {
317+func (x *FrameClock) ConnectFlushEvents(cb *func(FrameClock)) uint {
310318 cbPtr := uintptr(unsafe.Pointer(cb))
311319 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
312- return gobject.SignalConnect(x.GoPointer(), "flush-events", cbRefPtr)
320+ handlerID := gobject.SignalConnect(x.GoPointer(), "flush-events", cbRefPtr)
321+ glib.SaveHandlerMapping(handlerID, cbPtr)
322+ return handlerID
313323 }
314324
315325 fcb := func(clsPtr uintptr) {
@@ -322,7 +332,9 @@ func (x *FrameClock) ConnectFlushEvents(cb *func(FrameClock)) uint32 {
322332 }
323333 cbRefPtr := purego.NewCallback(fcb)
324334 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
325- return gobject.SignalConnect(x.GoPointer(), "flush-events", cbRefPtr)
335+ handlerID := gobject.SignalConnect(x.GoPointer(), "flush-events", cbRefPtr)
336+ glib.SaveHandlerMapping(handlerID, cbPtr)
337+ return handlerID
326338 }
327339
328340 // Emitted as the second step of toolkit and application processing
@@ -330,10 +342,12 @@ func (x *FrameClock) ConnectFlushEvents(cb *func(FrameClock)) uint32 {
330342 //
331343 // Any work to update sizes and positions of application elements
332344 // should be performed. GTK normally handles this internally.
333-func (x *FrameClock) ConnectLayout(cb *func(FrameClock)) uint32 {
345+func (x *FrameClock) ConnectLayout(cb *func(FrameClock)) uint {
334346 cbPtr := uintptr(unsafe.Pointer(cb))
335347 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
336- return gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
348+ handlerID := gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
349+ glib.SaveHandlerMapping(handlerID, cbPtr)
350+ return handlerID
337351 }
338352
339353 fcb := func(clsPtr uintptr) {
@@ -346,7 +360,9 @@ func (x *FrameClock) ConnectLayout(cb *func(FrameClock)) uint32 {
346360 }
347361 cbRefPtr := purego.NewCallback(fcb)
348362 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
349- return gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
363+ handlerID := gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
364+ glib.SaveHandlerMapping(handlerID, cbPtr)
365+ return handlerID
350366 }
351367
352368 // Emitted as the third step of toolkit and application processing
@@ -356,10 +372,12 @@ func (x *FrameClock) ConnectLayout(cb *func(FrameClock)) uint32 {
356372 // emits [signal@Gdk.Surface::render] signals which are turned into
357373 // [GtkWidget::snapshot](../gtk4/signal.Widget.snapshot.html) signals
358374 // by GTK.
359-func (x *FrameClock) ConnectPaint(cb *func(FrameClock)) uint32 {
375+func (x *FrameClock) ConnectPaint(cb *func(FrameClock)) uint {
360376 cbPtr := uintptr(unsafe.Pointer(cb))
361377 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
362- return gobject.SignalConnect(x.GoPointer(), "paint", cbRefPtr)
378+ handlerID := gobject.SignalConnect(x.GoPointer(), "paint", cbRefPtr)
379+ glib.SaveHandlerMapping(handlerID, cbPtr)
380+ return handlerID
363381 }
364382
365383 fcb := func(clsPtr uintptr) {
@@ -372,17 +390,21 @@ func (x *FrameClock) ConnectPaint(cb *func(FrameClock)) uint32 {
372390 }
373391 cbRefPtr := purego.NewCallback(fcb)
374392 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
375- return gobject.SignalConnect(x.GoPointer(), "paint", cbRefPtr)
393+ handlerID := gobject.SignalConnect(x.GoPointer(), "paint", cbRefPtr)
394+ glib.SaveHandlerMapping(handlerID, cbPtr)
395+ return handlerID
376396 }
377397
378398 // Emitted after processing of the frame is finished.
379399 //
380400 // This signal is handled internally by GTK to resume normal
381401 // event processing. Applications should not handle this signal.
382-func (x *FrameClock) ConnectResumeEvents(cb *func(FrameClock)) uint32 {
402+func (x *FrameClock) ConnectResumeEvents(cb *func(FrameClock)) uint {
383403 cbPtr := uintptr(unsafe.Pointer(cb))
384404 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
385- return gobject.SignalConnect(x.GoPointer(), "resume-events", cbRefPtr)
405+ handlerID := gobject.SignalConnect(x.GoPointer(), "resume-events", cbRefPtr)
406+ glib.SaveHandlerMapping(handlerID, cbPtr)
407+ return handlerID
386408 }
387409
388410 fcb := func(clsPtr uintptr) {
@@ -395,7 +417,9 @@ func (x *FrameClock) ConnectResumeEvents(cb *func(FrameClock)) uint32 {
395417 }
396418 cbRefPtr := purego.NewCallback(fcb)
397419 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
398- return gobject.SignalConnect(x.GoPointer(), "resume-events", cbRefPtr)
420+ handlerID := gobject.SignalConnect(x.GoPointer(), "resume-events", cbRefPtr)
421+ glib.SaveHandlerMapping(handlerID, cbPtr)
422+ return handlerID
399423 }
400424
401425 // Emitted as the first step of toolkit and application processing
@@ -405,10 +429,12 @@ func (x *FrameClock) ConnectResumeEvents(cb *func(FrameClock)) uint32 {
405429 // Applications can connect directly to this signal, or use
406430 // [gtk_widget_add_tick_callback()](../gtk4/method.Widget.add_tick_callback.html)
407431 // as a more convenient interface.
408-func (x *FrameClock) ConnectUpdate(cb *func(FrameClock)) uint32 {
432+func (x *FrameClock) ConnectUpdate(cb *func(FrameClock)) uint {
409433 cbPtr := uintptr(unsafe.Pointer(cb))
410434 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
411- return gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
435+ handlerID := gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
436+ glib.SaveHandlerMapping(handlerID, cbPtr)
437+ return handlerID
412438 }
413439
414440 fcb := func(clsPtr uintptr) {
@@ -421,7 +447,9 @@ func (x *FrameClock) ConnectUpdate(cb *func(FrameClock)) uint32 {
421447 }
422448 cbRefPtr := purego.NewCallback(fcb)
423449 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
424- return gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
450+ handlerID := gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
451+ glib.SaveHandlerMapping(handlerID, cbPtr)
452+ return handlerID
425453 }
426454
427455 func init() {
M v4/gdk/gdkmonitor.go +7 -3
@@ -344,10 +344,12 @@ func (x *Monitor) GetPropertyWidthMm() int {
344344 }
345345
346346 // Emitted when the output represented by @monitor gets disconnected.
347-func (x *Monitor) ConnectInvalidate(cb *func(Monitor)) uint32 {
347+func (x *Monitor) ConnectInvalidate(cb *func(Monitor)) uint {
348348 cbPtr := uintptr(unsafe.Pointer(cb))
349349 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
350- return gobject.SignalConnect(x.GoPointer(), "invalidate", cbRefPtr)
350+ handlerID := gobject.SignalConnect(x.GoPointer(), "invalidate", cbRefPtr)
351+ glib.SaveHandlerMapping(handlerID, cbPtr)
352+ return handlerID
351353 }
352354
353355 fcb := func(clsPtr uintptr) {
@@ -360,7 +362,9 @@ func (x *Monitor) ConnectInvalidate(cb *func(Monitor)) uint32 {
360362 }
361363 cbRefPtr := purego.NewCallback(fcb)
362364 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
363- return gobject.SignalConnect(x.GoPointer(), "invalidate", cbRefPtr)
365+ handlerID := gobject.SignalConnect(x.GoPointer(), "invalidate", cbRefPtr)
366+ glib.SaveHandlerMapping(handlerID, cbPtr)
367+ return handlerID
364368 }
365369
366370 func init() {
M v4/gdk/gdkseat.go +28 -12
@@ -150,10 +150,12 @@ func (c *Seat) SetGoPointer(ptr uintptr) {
150150 }
151151
152152 // Emitted when a new input device is related to this seat.
153-func (x *Seat) ConnectDeviceAdded(cb *func(Seat, uintptr)) uint32 {
153+func (x *Seat) ConnectDeviceAdded(cb *func(Seat, uintptr)) uint {
154154 cbPtr := uintptr(unsafe.Pointer(cb))
155155 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
156- return gobject.SignalConnect(x.GoPointer(), "device-added", cbRefPtr)
156+ handlerID := gobject.SignalConnect(x.GoPointer(), "device-added", cbRefPtr)
157+ glib.SaveHandlerMapping(handlerID, cbPtr)
158+ return handlerID
157159 }
158160
159161 fcb := func(clsPtr uintptr, DeviceVarp uintptr) {
@@ -166,14 +168,18 @@ func (x *Seat) ConnectDeviceAdded(cb *func(Seat, uintptr)) uint32 {
166168 }
167169 cbRefPtr := purego.NewCallback(fcb)
168170 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
169- return gobject.SignalConnect(x.GoPointer(), "device-added", cbRefPtr)
171+ handlerID := gobject.SignalConnect(x.GoPointer(), "device-added", cbRefPtr)
172+ glib.SaveHandlerMapping(handlerID, cbPtr)
173+ return handlerID
170174 }
171175
172176 // Emitted when an input device is removed (e.g. unplugged).
173-func (x *Seat) ConnectDeviceRemoved(cb *func(Seat, uintptr)) uint32 {
177+func (x *Seat) ConnectDeviceRemoved(cb *func(Seat, uintptr)) uint {
174178 cbPtr := uintptr(unsafe.Pointer(cb))
175179 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
176- return gobject.SignalConnect(x.GoPointer(), "device-removed", cbRefPtr)
180+ handlerID := gobject.SignalConnect(x.GoPointer(), "device-removed", cbRefPtr)
181+ glib.SaveHandlerMapping(handlerID, cbPtr)
182+ return handlerID
177183 }
178184
179185 fcb := func(clsPtr uintptr, DeviceVarp uintptr) {
@@ -186,7 +192,9 @@ func (x *Seat) ConnectDeviceRemoved(cb *func(Seat, uintptr)) uint32 {
186192 }
187193 cbRefPtr := purego.NewCallback(fcb)
188194 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
189- return gobject.SignalConnect(x.GoPointer(), "device-removed", cbRefPtr)
195+ handlerID := gobject.SignalConnect(x.GoPointer(), "device-removed", cbRefPtr)
196+ glib.SaveHandlerMapping(handlerID, cbPtr)
197+ return handlerID
190198 }
191199
192200 // Emitted whenever a new tool is made known to the seat.
@@ -196,10 +204,12 @@ func (x *Seat) ConnectDeviceRemoved(cb *func(Seat, uintptr)) uint32 {
196204 // [signal@Gdk.Device::tool-changed] signal accordingly.
197205 //
198206 // A same tool may be used by several devices.
199-func (x *Seat) ConnectToolAdded(cb *func(Seat, uintptr)) uint32 {
207+func (x *Seat) ConnectToolAdded(cb *func(Seat, uintptr)) uint {
200208 cbPtr := uintptr(unsafe.Pointer(cb))
201209 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
202- return gobject.SignalConnect(x.GoPointer(), "tool-added", cbRefPtr)
210+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-added", cbRefPtr)
211+ glib.SaveHandlerMapping(handlerID, cbPtr)
212+ return handlerID
203213 }
204214
205215 fcb := func(clsPtr uintptr, ToolVarp uintptr) {
@@ -212,14 +222,18 @@ func (x *Seat) ConnectToolAdded(cb *func(Seat, uintptr)) uint32 {
212222 }
213223 cbRefPtr := purego.NewCallback(fcb)
214224 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
215- return gobject.SignalConnect(x.GoPointer(), "tool-added", cbRefPtr)
225+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-added", cbRefPtr)
226+ glib.SaveHandlerMapping(handlerID, cbPtr)
227+ return handlerID
216228 }
217229
218230 // Emitted whenever a tool is no longer known to this @seat.
219-func (x *Seat) ConnectToolRemoved(cb *func(Seat, uintptr)) uint32 {
231+func (x *Seat) ConnectToolRemoved(cb *func(Seat, uintptr)) uint {
220232 cbPtr := uintptr(unsafe.Pointer(cb))
221233 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
222- return gobject.SignalConnect(x.GoPointer(), "tool-removed", cbRefPtr)
234+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-removed", cbRefPtr)
235+ glib.SaveHandlerMapping(handlerID, cbPtr)
236+ return handlerID
223237 }
224238
225239 fcb := func(clsPtr uintptr, ToolVarp uintptr) {
@@ -232,7 +246,9 @@ func (x *Seat) ConnectToolRemoved(cb *func(Seat, uintptr)) uint32 {
232246 }
233247 cbRefPtr := purego.NewCallback(fcb)
234248 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
235- return gobject.SignalConnect(x.GoPointer(), "tool-removed", cbRefPtr)
249+ handlerID := gobject.SignalConnect(x.GoPointer(), "tool-removed", cbRefPtr)
250+ glib.SaveHandlerMapping(handlerID, cbPtr)
251+ return handlerID
236252 }
237253
238254 func init() {
M v4/gdk/gdksurface.go +35 -15
@@ -564,10 +564,12 @@ func (x *Surface) GetPropertyWidth() int {
564564 }
565565
566566 // Emitted when @surface starts being present on the monitor.
567-func (x *Surface) ConnectEnterMonitor(cb *func(Surface, uintptr)) uint32 {
567+func (x *Surface) ConnectEnterMonitor(cb *func(Surface, uintptr)) uint {
568568 cbPtr := uintptr(unsafe.Pointer(cb))
569569 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
570- return gobject.SignalConnect(x.GoPointer(), "enter-monitor", cbRefPtr)
570+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter-monitor", cbRefPtr)
571+ glib.SaveHandlerMapping(handlerID, cbPtr)
572+ return handlerID
571573 }
572574
573575 fcb := func(clsPtr uintptr, MonitorVarp uintptr) {
@@ -580,14 +582,18 @@ func (x *Surface) ConnectEnterMonitor(cb *func(Surface, uintptr)) uint32 {
580582 }
581583 cbRefPtr := purego.NewCallback(fcb)
582584 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
583- return gobject.SignalConnect(x.GoPointer(), "enter-monitor", cbRefPtr)
585+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter-monitor", cbRefPtr)
586+ glib.SaveHandlerMapping(handlerID, cbPtr)
587+ return handlerID
584588 }
585589
586590 // Emitted when GDK receives an input event for @surface.
587-func (x *Surface) ConnectEvent(cb *func(Surface, *Event) bool) uint32 {
591+func (x *Surface) ConnectEvent(cb *func(Surface, *Event) bool) uint {
588592 cbPtr := uintptr(unsafe.Pointer(cb))
589593 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
590- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
594+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
595+ glib.SaveHandlerMapping(handlerID, cbPtr)
596+ return handlerID
591597 }
592598
593599 fcb := func(clsPtr uintptr, EventVarp uintptr) bool {
@@ -600,7 +606,9 @@ func (x *Surface) ConnectEvent(cb *func(Surface, *Event) bool) uint32 {
600606 }
601607 cbRefPtr := purego.NewCallback(fcb)
602608 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
603- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
609+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
610+ glib.SaveHandlerMapping(handlerID, cbPtr)
611+ return handlerID
604612 }
605613
606614 // Emitted when the size of @surface is changed, or when relayout should
@@ -608,10 +616,12 @@ func (x *Surface) ConnectEvent(cb *func(Surface, *Event) bool) uint32 {
608616 //
609617 // Surface size is reported in ”application pixels”, not
610618 // ”device pixels” (see gdk_surface_get_scale_factor()).
611-func (x *Surface) ConnectLayout(cb *func(Surface, int, int)) uint32 {
619+func (x *Surface) ConnectLayout(cb *func(Surface, int, int)) uint {
612620 cbPtr := uintptr(unsafe.Pointer(cb))
613621 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
614- return gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
622+ handlerID := gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
623+ glib.SaveHandlerMapping(handlerID, cbPtr)
624+ return handlerID
615625 }
616626
617627 fcb := func(clsPtr uintptr, WidthVarp int, HeightVarp int) {
@@ -624,14 +634,18 @@ func (x *Surface) ConnectLayout(cb *func(Surface, int, int)) uint32 {
624634 }
625635 cbRefPtr := purego.NewCallback(fcb)
626636 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
627- return gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
637+ handlerID := gobject.SignalConnect(x.GoPointer(), "layout", cbRefPtr)
638+ glib.SaveHandlerMapping(handlerID, cbPtr)
639+ return handlerID
628640 }
629641
630642 // Emitted when @surface stops being present on the monitor.
631-func (x *Surface) ConnectLeaveMonitor(cb *func(Surface, uintptr)) uint32 {
643+func (x *Surface) ConnectLeaveMonitor(cb *func(Surface, uintptr)) uint {
632644 cbPtr := uintptr(unsafe.Pointer(cb))
633645 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
634- return gobject.SignalConnect(x.GoPointer(), "leave-monitor", cbRefPtr)
646+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave-monitor", cbRefPtr)
647+ glib.SaveHandlerMapping(handlerID, cbPtr)
648+ return handlerID
635649 }
636650
637651 fcb := func(clsPtr uintptr, MonitorVarp uintptr) {
@@ -644,14 +658,18 @@ func (x *Surface) ConnectLeaveMonitor(cb *func(Surface, uintptr)) uint32 {
644658 }
645659 cbRefPtr := purego.NewCallback(fcb)
646660 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
647- return gobject.SignalConnect(x.GoPointer(), "leave-monitor", cbRefPtr)
661+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave-monitor", cbRefPtr)
662+ glib.SaveHandlerMapping(handlerID, cbPtr)
663+ return handlerID
648664 }
649665
650666 // Emitted when part of the surface needs to be redrawn.
651-func (x *Surface) ConnectRender(cb *func(Surface, uintptr) bool) uint32 {
667+func (x *Surface) ConnectRender(cb *func(Surface, uintptr) bool) uint {
652668 cbPtr := uintptr(unsafe.Pointer(cb))
653669 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
654- return gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
670+ handlerID := gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
671+ glib.SaveHandlerMapping(handlerID, cbPtr)
672+ return handlerID
655673 }
656674
657675 fcb := func(clsPtr uintptr, RegionVarp uintptr) bool {
@@ -664,7 +682,9 @@ func (x *Surface) ConnectRender(cb *func(Surface, uintptr) bool) uint32 {
664682 }
665683 cbRefPtr := purego.NewCallback(fcb)
666684 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
667- return gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
685+ handlerID := gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
686+ glib.SaveHandlerMapping(handlerID, cbPtr)
687+ return handlerID
668688 }
669689
670690 func init() {
M v4/gdk/gdkvulkancontext.go +7 -3
@@ -60,10 +60,12 @@ func (c *VulkanContext) SetGoPointer(ptr uintptr) {
6060 //
6161 // Usually this means that the swapchain had to be recreated,
6262 // for example in response to a change of the surface size.
63-func (x *VulkanContext) ConnectImagesUpdated(cb *func(VulkanContext)) uint32 {
63+func (x *VulkanContext) ConnectImagesUpdated(cb *func(VulkanContext)) uint {
6464 cbPtr := uintptr(unsafe.Pointer(cb))
6565 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
66- return gobject.SignalConnect(x.GoPointer(), "images-updated", cbRefPtr)
66+ handlerID := gobject.SignalConnect(x.GoPointer(), "images-updated", cbRefPtr)
67+ glib.SaveHandlerMapping(handlerID, cbPtr)
68+ return handlerID
6769 }
6870
6971 fcb := func(clsPtr uintptr) {
@@ -76,7 +78,9 @@ func (x *VulkanContext) ConnectImagesUpdated(cb *func(VulkanContext)) uint32 {
7678 }
7779 cbRefPtr := purego.NewCallback(fcb)
7880 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
79- return gobject.SignalConnect(x.GoPointer(), "images-updated", cbRefPtr)
81+ handlerID := gobject.SignalConnect(x.GoPointer(), "images-updated", cbRefPtr)
82+ glib.SaveHandlerMapping(handlerID, cbPtr)
83+ return handlerID
8084 }
8185
8286 func init() {
M v4/gdkpixbuf/gdk-pixbuf-loader.go +28 -12
@@ -426,10 +426,12 @@ func (c *PixbufLoader) SetGoPointer(ptr uintptr) {
426426 // After this signal is emitted, applications can call
427427 // gdk_pixbuf_loader_get_pixbuf() to fetch the partially-loaded
428428 // pixbuf.
429-func (x *PixbufLoader) ConnectAreaPrepared(cb *func(PixbufLoader)) uint32 {
429+func (x *PixbufLoader) ConnectAreaPrepared(cb *func(PixbufLoader)) uint {
430430 cbPtr := uintptr(unsafe.Pointer(cb))
431431 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
432- return gobject.SignalConnect(x.GoPointer(), "area-prepared", cbRefPtr)
432+ handlerID := gobject.SignalConnect(x.GoPointer(), "area-prepared", cbRefPtr)
433+ glib.SaveHandlerMapping(handlerID, cbPtr)
434+ return handlerID
433435 }
434436
435437 fcb := func(clsPtr uintptr) {
@@ -442,7 +444,9 @@ func (x *PixbufLoader) ConnectAreaPrepared(cb *func(PixbufLoader)) uint32 {
442444 }
443445 cbRefPtr := purego.NewCallback(fcb)
444446 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
445- return gobject.SignalConnect(x.GoPointer(), "area-prepared", cbRefPtr)
447+ handlerID := gobject.SignalConnect(x.GoPointer(), "area-prepared", cbRefPtr)
448+ glib.SaveHandlerMapping(handlerID, cbPtr)
449+ return handlerID
446450 }
447451
448452 // This signal is emitted when a significant area of the image being
@@ -453,10 +457,12 @@ func (x *PixbufLoader) ConnectAreaPrepared(cb *func(PixbufLoader)) uint32 {
453457 //
454458 // Applications can use this signal to know when to repaint
455459 // areas of an image that is being loaded.
456-func (x *PixbufLoader) ConnectAreaUpdated(cb *func(PixbufLoader, int, int, int, int)) uint32 {
460+func (x *PixbufLoader) ConnectAreaUpdated(cb *func(PixbufLoader, int, int, int, int)) uint {
457461 cbPtr := uintptr(unsafe.Pointer(cb))
458462 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
459- return gobject.SignalConnect(x.GoPointer(), "area-updated", cbRefPtr)
463+ handlerID := gobject.SignalConnect(x.GoPointer(), "area-updated", cbRefPtr)
464+ glib.SaveHandlerMapping(handlerID, cbPtr)
465+ return handlerID
460466 }
461467
462468 fcb := func(clsPtr uintptr, XVarp int, YVarp int, WidthVarp int, HeightVarp int) {
@@ -469,7 +475,9 @@ func (x *PixbufLoader) ConnectAreaUpdated(cb *func(PixbufLoader, int, int, int,
469475 }
470476 cbRefPtr := purego.NewCallback(fcb)
471477 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
472- return gobject.SignalConnect(x.GoPointer(), "area-updated", cbRefPtr)
478+ handlerID := gobject.SignalConnect(x.GoPointer(), "area-updated", cbRefPtr)
479+ glib.SaveHandlerMapping(handlerID, cbPtr)
480+ return handlerID
473481 }
474482
475483 // This signal is emitted when gdk_pixbuf_loader_close() is called.
@@ -477,10 +485,12 @@ func (x *PixbufLoader) ConnectAreaUpdated(cb *func(PixbufLoader, int, int, int,
477485 // It can be used by different parts of an application to receive
478486 // notification when an image loader is closed by the code that
479487 // drives it.
480-func (x *PixbufLoader) ConnectClosed(cb *func(PixbufLoader)) uint32 {
488+func (x *PixbufLoader) ConnectClosed(cb *func(PixbufLoader)) uint {
481489 cbPtr := uintptr(unsafe.Pointer(cb))
482490 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
483- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
491+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
492+ glib.SaveHandlerMapping(handlerID, cbPtr)
493+ return handlerID
484494 }
485495
486496 fcb := func(clsPtr uintptr) {
@@ -493,7 +503,9 @@ func (x *PixbufLoader) ConnectClosed(cb *func(PixbufLoader)) uint32 {
493503 }
494504 cbRefPtr := purego.NewCallback(fcb)
495505 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
496- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
506+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
507+ glib.SaveHandlerMapping(handlerID, cbPtr)
508+ return handlerID
497509 }
498510
499511 // This signal is emitted when the pixbuf loader has been fed the
@@ -503,10 +515,12 @@ func (x *PixbufLoader) ConnectClosed(cb *func(PixbufLoader)) uint32 {
503515 // Applications can call gdk_pixbuf_loader_set_size() in response
504516 // to this signal to set the desired size to which the image
505517 // should be scaled.
506-func (x *PixbufLoader) ConnectSizePrepared(cb *func(PixbufLoader, int, int)) uint32 {
518+func (x *PixbufLoader) ConnectSizePrepared(cb *func(PixbufLoader, int, int)) uint {
507519 cbPtr := uintptr(unsafe.Pointer(cb))
508520 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
509- return gobject.SignalConnect(x.GoPointer(), "size-prepared", cbRefPtr)
521+ handlerID := gobject.SignalConnect(x.GoPointer(), "size-prepared", cbRefPtr)
522+ glib.SaveHandlerMapping(handlerID, cbPtr)
523+ return handlerID
510524 }
511525
512526 fcb := func(clsPtr uintptr, WidthVarp int, HeightVarp int) {
@@ -519,7 +533,9 @@ func (x *PixbufLoader) ConnectSizePrepared(cb *func(PixbufLoader, int, int)) uin
519533 }
520534 cbRefPtr := purego.NewCallback(fcb)
521535 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
522- return gobject.SignalConnect(x.GoPointer(), "size-prepared", cbRefPtr)
536+ handlerID := gobject.SignalConnect(x.GoPointer(), "size-prepared", cbRefPtr)
537+ glib.SaveHandlerMapping(handlerID, cbPtr)
538+ return handlerID
523539 }
524540
525541 func init() {
M v4/gio/gappinfo.go +28 -12
@@ -1840,10 +1840,12 @@ func (c *AppInfoMonitor) SetGoPointer(ptr uintptr) {
18401840
18411841 // Signal emitted when the app info database changes, when applications are
18421842 // installed or removed.
1843-func (x *AppInfoMonitor) ConnectChanged(cb *func(AppInfoMonitor)) uint32 {
1843+func (x *AppInfoMonitor) ConnectChanged(cb *func(AppInfoMonitor)) uint {
18441844 cbPtr := uintptr(unsafe.Pointer(cb))
18451845 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1846- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1846+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1847+ glib.SaveHandlerMapping(handlerID, cbPtr)
1848+ return handlerID
18471849 }
18481850
18491851 fcb := func(clsPtr uintptr) {
@@ -1856,7 +1858,9 @@ func (x *AppInfoMonitor) ConnectChanged(cb *func(AppInfoMonitor)) uint32 {
18561858 }
18571859 cbRefPtr := purego.NewCallback(fcb)
18581860 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1859- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1861+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1862+ glib.SaveHandlerMapping(handlerID, cbPtr)
1863+ return handlerID
18601864 }
18611865
18621866 var xAppInfoMonitorGet func() uintptr
@@ -2022,10 +2026,12 @@ func (c *AppLaunchContext) SetGoPointer(ptr uintptr) {
20222026 // Because a launch operation may involve spawning multiple instances of the
20232027 // target application, you should expect this signal to be emitted multiple
20242028 // times, one for each spawned instance.
2025-func (x *AppLaunchContext) ConnectLaunchFailed(cb *func(AppLaunchContext, string)) uint32 {
2029+func (x *AppLaunchContext) ConnectLaunchFailed(cb *func(AppLaunchContext, string)) uint {
20262030 cbPtr := uintptr(unsafe.Pointer(cb))
20272031 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2028- return gobject.SignalConnect(x.GoPointer(), "launch-failed", cbRefPtr)
2032+ handlerID := gobject.SignalConnect(x.GoPointer(), "launch-failed", cbRefPtr)
2033+ glib.SaveHandlerMapping(handlerID, cbPtr)
2034+ return handlerID
20292035 }
20302036
20312037 fcb := func(clsPtr uintptr, StartupNotifyIdVarp string) {
@@ -2038,7 +2044,9 @@ func (x *AppLaunchContext) ConnectLaunchFailed(cb *func(AppLaunchContext, string
20382044 }
20392045 cbRefPtr := purego.NewCallback(fcb)
20402046 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2041- return gobject.SignalConnect(x.GoPointer(), "launch-failed", cbRefPtr)
2047+ handlerID := gobject.SignalConnect(x.GoPointer(), "launch-failed", cbRefPtr)
2048+ glib.SaveHandlerMapping(handlerID, cbPtr)
2049+ return handlerID
20422050 }
20432051
20442052 // The [signal@Gio.AppLaunchContext::launch-started] signal is emitted when a
@@ -2060,10 +2068,12 @@ func (x *AppLaunchContext) ConnectLaunchFailed(cb *func(AppLaunchContext, string
20602068 // Because a launch operation may involve spawning multiple instances of the
20612069 // target application, you should expect this signal to be emitted multiple
20622070 // times, one for each spawned instance.
2063-func (x *AppLaunchContext) ConnectLaunchStarted(cb *func(AppLaunchContext, uintptr, uintptr)) uint32 {
2071+func (x *AppLaunchContext) ConnectLaunchStarted(cb *func(AppLaunchContext, uintptr, uintptr)) uint {
20642072 cbPtr := uintptr(unsafe.Pointer(cb))
20652073 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2066- return gobject.SignalConnect(x.GoPointer(), "launch-started", cbRefPtr)
2074+ handlerID := gobject.SignalConnect(x.GoPointer(), "launch-started", cbRefPtr)
2075+ glib.SaveHandlerMapping(handlerID, cbPtr)
2076+ return handlerID
20672077 }
20682078
20692079 fcb := func(clsPtr uintptr, InfoVarp uintptr, PlatformDataVarp uintptr) {
@@ -2076,7 +2086,9 @@ func (x *AppLaunchContext) ConnectLaunchStarted(cb *func(AppLaunchContext, uintp
20762086 }
20772087 cbRefPtr := purego.NewCallback(fcb)
20782088 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2079- return gobject.SignalConnect(x.GoPointer(), "launch-started", cbRefPtr)
2089+ handlerID := gobject.SignalConnect(x.GoPointer(), "launch-started", cbRefPtr)
2090+ glib.SaveHandlerMapping(handlerID, cbPtr)
2091+ return handlerID
20802092 }
20812093
20822094 // The [signal@Gio.AppLaunchContext::launched] signal is emitted when a
@@ -2100,10 +2112,12 @@ func (x *AppLaunchContext) ConnectLaunchStarted(cb *func(AppLaunchContext, uintp
21002112 // is emitted, GLib will call [func@GLib.spawn_close_pid]. If you need to
21012113 // keep the [alias@GLib.Pid] after the signal has been emitted, then you can
21022114 // duplicate `pid` using `DuplicateHandle()`.
2103-func (x *AppLaunchContext) ConnectLaunched(cb *func(AppLaunchContext, uintptr, uintptr)) uint32 {
2115+func (x *AppLaunchContext) ConnectLaunched(cb *func(AppLaunchContext, uintptr, uintptr)) uint {
21042116 cbPtr := uintptr(unsafe.Pointer(cb))
21052117 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2106- return gobject.SignalConnect(x.GoPointer(), "launched", cbRefPtr)
2118+ handlerID := gobject.SignalConnect(x.GoPointer(), "launched", cbRefPtr)
2119+ glib.SaveHandlerMapping(handlerID, cbPtr)
2120+ return handlerID
21072121 }
21082122
21092123 fcb := func(clsPtr uintptr, InfoVarp uintptr, PlatformDataVarp uintptr) {
@@ -2116,7 +2130,9 @@ func (x *AppLaunchContext) ConnectLaunched(cb *func(AppLaunchContext, uintptr, u
21162130 }
21172131 cbRefPtr := purego.NewCallback(fcb)
21182132 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2119- return gobject.SignalConnect(x.GoPointer(), "launched", cbRefPtr)
2133+ handlerID := gobject.SignalConnect(x.GoPointer(), "launched", cbRefPtr)
2134+ glib.SaveHandlerMapping(handlerID, cbPtr)
2135+ return handlerID
21202136 }
21212137
21222138 func init() {
M v4/gio/gapplication.go +49 -21
@@ -1571,10 +1571,12 @@ func (x *Application) GetPropertyVersion() string {
15711571
15721572 // The ::activate signal is emitted on the primary instance when an
15731573 // activation occurs. See g_application_activate().
1574-func (x *Application) ConnectActivate(cb *func(Application)) uint32 {
1574+func (x *Application) ConnectActivate(cb *func(Application)) uint {
15751575 cbPtr := uintptr(unsafe.Pointer(cb))
15761576 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1577- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1577+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1578+ glib.SaveHandlerMapping(handlerID, cbPtr)
1579+ return handlerID
15781580 }
15791581
15801582 fcb := func(clsPtr uintptr) {
@@ -1587,16 +1589,20 @@ func (x *Application) ConnectActivate(cb *func(Application)) uint32 {
15871589 }
15881590 cbRefPtr := purego.NewCallback(fcb)
15891591 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1590- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1592+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1593+ glib.SaveHandlerMapping(handlerID, cbPtr)
1594+ return handlerID
15911595 }
15921596
15931597 // The ::command-line signal is emitted on the primary instance when
15941598 // a commandline is not handled locally. See g_application_run() and
15951599 // the #GApplicationCommandLine documentation for more information.
1596-func (x *Application) ConnectCommandLine(cb *func(Application, uintptr) int) uint32 {
1600+func (x *Application) ConnectCommandLine(cb *func(Application, uintptr) int) uint {
15971601 cbPtr := uintptr(unsafe.Pointer(cb))
15981602 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1599- return gobject.SignalConnect(x.GoPointer(), "command-line", cbRefPtr)
1603+ handlerID := gobject.SignalConnect(x.GoPointer(), "command-line", cbRefPtr)
1604+ glib.SaveHandlerMapping(handlerID, cbPtr)
1605+ return handlerID
16001606 }
16011607
16021608 fcb := func(clsPtr uintptr, CommandLineVarp uintptr) int {
@@ -1609,7 +1615,9 @@ func (x *Application) ConnectCommandLine(cb *func(Application, uintptr) int) uin
16091615 }
16101616 cbRefPtr := purego.NewCallback(fcb)
16111617 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1612- return gobject.SignalConnect(x.GoPointer(), "command-line", cbRefPtr)
1618+ handlerID := gobject.SignalConnect(x.GoPointer(), "command-line", cbRefPtr)
1619+ glib.SaveHandlerMapping(handlerID, cbPtr)
1620+ return handlerID
16131621 }
16141622
16151623 // The ::handle-local-options signal is emitted on the local instance
@@ -1653,10 +1661,12 @@ func (x *Application) ConnectCommandLine(cb *func(Application, uintptr) int) uin
16531661 // You can override local_command_line() if you need more powerful
16541662 // capabilities than what is provided here, but this should not
16551663 // normally be required.
1656-func (x *Application) ConnectHandleLocalOptions(cb *func(Application, uintptr) int) uint32 {
1664+func (x *Application) ConnectHandleLocalOptions(cb *func(Application, uintptr) int) uint {
16571665 cbPtr := uintptr(unsafe.Pointer(cb))
16581666 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1659- return gobject.SignalConnect(x.GoPointer(), "handle-local-options", cbRefPtr)
1667+ handlerID := gobject.SignalConnect(x.GoPointer(), "handle-local-options", cbRefPtr)
1668+ glib.SaveHandlerMapping(handlerID, cbPtr)
1669+ return handlerID
16601670 }
16611671
16621672 fcb := func(clsPtr uintptr, OptionsVarp uintptr) int {
@@ -1669,7 +1679,9 @@ func (x *Application) ConnectHandleLocalOptions(cb *func(Application, uintptr) i
16691679 }
16701680 cbRefPtr := purego.NewCallback(fcb)
16711681 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1672- return gobject.SignalConnect(x.GoPointer(), "handle-local-options", cbRefPtr)
1682+ handlerID := gobject.SignalConnect(x.GoPointer(), "handle-local-options", cbRefPtr)
1683+ glib.SaveHandlerMapping(handlerID, cbPtr)
1684+ return handlerID
16731685 }
16741686
16751687 // The ::name-lost signal is emitted only on the registered primary instance
@@ -1677,10 +1689,12 @@ func (x *Application) ConnectHandleLocalOptions(cb *func(Application, uintptr) i
16771689 // is using the %G_APPLICATION_ALLOW_REPLACEMENT flag.
16781690 //
16791691 // The default handler for this signal calls g_application_quit().
1680-func (x *Application) ConnectNameLost(cb *func(Application) bool) uint32 {
1692+func (x *Application) ConnectNameLost(cb *func(Application) bool) uint {
16811693 cbPtr := uintptr(unsafe.Pointer(cb))
16821694 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1683- return gobject.SignalConnect(x.GoPointer(), "name-lost", cbRefPtr)
1695+ handlerID := gobject.SignalConnect(x.GoPointer(), "name-lost", cbRefPtr)
1696+ glib.SaveHandlerMapping(handlerID, cbPtr)
1697+ return handlerID
16841698 }
16851699
16861700 fcb := func(clsPtr uintptr) bool {
@@ -1693,15 +1707,19 @@ func (x *Application) ConnectNameLost(cb *func(Application) bool) uint32 {
16931707 }
16941708 cbRefPtr := purego.NewCallback(fcb)
16951709 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1696- return gobject.SignalConnect(x.GoPointer(), "name-lost", cbRefPtr)
1710+ handlerID := gobject.SignalConnect(x.GoPointer(), "name-lost", cbRefPtr)
1711+ glib.SaveHandlerMapping(handlerID, cbPtr)
1712+ return handlerID
16971713 }
16981714
16991715 // The ::open signal is emitted on the primary instance when there are
17001716 // files to open. See g_application_open() for more information.
1701-func (x *Application) ConnectOpen(cb *func(Application, uintptr, int, string)) uint32 {
1717+func (x *Application) ConnectOpen(cb *func(Application, uintptr, int, string)) uint {
17021718 cbPtr := uintptr(unsafe.Pointer(cb))
17031719 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1704- return gobject.SignalConnect(x.GoPointer(), "open", cbRefPtr)
1720+ handlerID := gobject.SignalConnect(x.GoPointer(), "open", cbRefPtr)
1721+ glib.SaveHandlerMapping(handlerID, cbPtr)
1722+ return handlerID
17051723 }
17061724
17071725 fcb := func(clsPtr uintptr, FilesVarp uintptr, NFilesVarp int, HintVarp string) {
@@ -1714,15 +1732,19 @@ func (x *Application) ConnectOpen(cb *func(Application, uintptr, int, string)) u
17141732 }
17151733 cbRefPtr := purego.NewCallback(fcb)
17161734 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1717- return gobject.SignalConnect(x.GoPointer(), "open", cbRefPtr)
1735+ handlerID := gobject.SignalConnect(x.GoPointer(), "open", cbRefPtr)
1736+ glib.SaveHandlerMapping(handlerID, cbPtr)
1737+ return handlerID
17181738 }
17191739
17201740 // The ::shutdown signal is emitted only on the registered primary instance
17211741 // immediately after the main loop terminates.
1722-func (x *Application) ConnectShutdown(cb *func(Application)) uint32 {
1742+func (x *Application) ConnectShutdown(cb *func(Application)) uint {
17231743 cbPtr := uintptr(unsafe.Pointer(cb))
17241744 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1725- return gobject.SignalConnect(x.GoPointer(), "shutdown", cbRefPtr)
1745+ handlerID := gobject.SignalConnect(x.GoPointer(), "shutdown", cbRefPtr)
1746+ glib.SaveHandlerMapping(handlerID, cbPtr)
1747+ return handlerID
17261748 }
17271749
17281750 fcb := func(clsPtr uintptr) {
@@ -1735,15 +1757,19 @@ func (x *Application) ConnectShutdown(cb *func(Application)) uint32 {
17351757 }
17361758 cbRefPtr := purego.NewCallback(fcb)
17371759 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1738- return gobject.SignalConnect(x.GoPointer(), "shutdown", cbRefPtr)
1760+ handlerID := gobject.SignalConnect(x.GoPointer(), "shutdown", cbRefPtr)
1761+ glib.SaveHandlerMapping(handlerID, cbPtr)
1762+ return handlerID
17391763 }
17401764
17411765 // The ::startup signal is emitted on the primary instance immediately
17421766 // after registration. See g_application_register().
1743-func (x *Application) ConnectStartup(cb *func(Application)) uint32 {
1767+func (x *Application) ConnectStartup(cb *func(Application)) uint {
17441768 cbPtr := uintptr(unsafe.Pointer(cb))
17451769 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1746- return gobject.SignalConnect(x.GoPointer(), "startup", cbRefPtr)
1770+ handlerID := gobject.SignalConnect(x.GoPointer(), "startup", cbRefPtr)
1771+ glib.SaveHandlerMapping(handlerID, cbPtr)
1772+ return handlerID
17471773 }
17481774
17491775 fcb := func(clsPtr uintptr) {
@@ -1756,7 +1782,9 @@ func (x *Application) ConnectStartup(cb *func(Application)) uint32 {
17561782 }
17571783 cbRefPtr := purego.NewCallback(fcb)
17581784 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1759- return gobject.SignalConnect(x.GoPointer(), "startup", cbRefPtr)
1785+ handlerID := gobject.SignalConnect(x.GoPointer(), "startup", cbRefPtr)
1786+ glib.SaveHandlerMapping(handlerID, cbPtr)
1787+ return handlerID
17601788 }
17611789
17621790 // Emits the [signal@Gio.ActionGroup::action-added] signal on @action_group.
M v4/gio/gcancellable.go +11 -7
@@ -251,7 +251,7 @@ func (x *Cancellable) Cancel() {
251251
252252 }
253253
254-var xCancellableConnect func(uintptr, uintptr, uintptr, uintptr) uint32
254+var xCancellableConnect func(uintptr, uintptr, uintptr, uintptr) uint
255255
256256 // Convenience function to connect to the #GCancellable::cancelled
257257 // signal. Also handles the race condition that may happen
@@ -288,7 +288,7 @@ var xCancellableConnect func(uintptr, uintptr, uintptr, uintptr) uint32
288288 // - [method@Gio.Cancellable.reset]
289289 // - [method@Gio.Cancellable.make_pollfd]
290290 // - [method@Gio.Cancellable.release_fd]
291-func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint32 {
291+func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, DataDestroyFuncVar *glib.DestroyNotify) uint {
292292
293293 var CallbackVarRef uintptr
294294 if CallbackVar != nil {
@@ -325,7 +325,7 @@ func (x *Cancellable) Connect(CallbackVar *gobject.Callback, DataVar uintptr, Da
325325 return cret
326326 }
327327
328-var xCancellableDisconnect func(uintptr, uint32)
328+var xCancellableDisconnect func(uintptr, uint)
329329
330330 // Disconnects a handler from a cancellable instance similar to
331331 // g_signal_handler_disconnect(). Additionally, in the event that a
@@ -341,7 +341,7 @@ var xCancellableDisconnect func(uintptr, uint32)
341341 //
342342 // If @cancellable is %NULL or @handler_id is `0` this function does
343343 // nothing.
344-func (x *Cancellable) Disconnect(HandlerIdVar uint32) {
344+func (x *Cancellable) Disconnect(HandlerIdVar uint) {
345345
346346 xCancellableDisconnect(x.GoPointer(), HandlerIdVar)
347347
@@ -581,10 +581,12 @@ func (c *Cancellable) SetGoPointer(ptr uintptr) {
581581 // Note that the cancelled signal is emitted in the thread that
582582 // the user cancelled from, which may be the main thread. So, the
583583 // cancellable signal should not do something that can block.
584-func (x *Cancellable) ConnectCancelled(cb *func(Cancellable)) uint32 {
584+func (x *Cancellable) ConnectCancelled(cb *func(Cancellable)) uint {
585585 cbPtr := uintptr(unsafe.Pointer(cb))
586586 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
587- return gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
587+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
588+ glib.SaveHandlerMapping(handlerID, cbPtr)
589+ return handlerID
588590 }
589591
590592 fcb := func(clsPtr uintptr) {
@@ -597,7 +599,9 @@ func (x *Cancellable) ConnectCancelled(cb *func(Cancellable)) uint32 {
597599 }
598600 cbRefPtr := purego.NewCallback(fcb)
599601 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
600- return gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
602+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
603+ glib.SaveHandlerMapping(handlerID, cbPtr)
604+ return handlerID
601605 }
602606
603607 var xCancellableGetCurrent func() uintptr
M v4/gio/gdbusauthobserver.go +14 -6
@@ -144,10 +144,12 @@ func (c *DBusAuthObserver) SetGoPointer(ptr uintptr) {
144144 }
145145
146146 // Emitted to check if @mechanism is allowed to be used.
147-func (x *DBusAuthObserver) ConnectAllowMechanism(cb *func(DBusAuthObserver, string) bool) uint32 {
147+func (x *DBusAuthObserver) ConnectAllowMechanism(cb *func(DBusAuthObserver, string) bool) uint {
148148 cbPtr := uintptr(unsafe.Pointer(cb))
149149 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
150- return gobject.SignalConnect(x.GoPointer(), "allow-mechanism", cbRefPtr)
150+ handlerID := gobject.SignalConnect(x.GoPointer(), "allow-mechanism", cbRefPtr)
151+ glib.SaveHandlerMapping(handlerID, cbPtr)
152+ return handlerID
151153 }
152154
153155 fcb := func(clsPtr uintptr, MechanismVarp string) bool {
@@ -160,15 +162,19 @@ func (x *DBusAuthObserver) ConnectAllowMechanism(cb *func(DBusAuthObserver, stri
160162 }
161163 cbRefPtr := purego.NewCallback(fcb)
162164 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
163- return gobject.SignalConnect(x.GoPointer(), "allow-mechanism", cbRefPtr)
165+ handlerID := gobject.SignalConnect(x.GoPointer(), "allow-mechanism", cbRefPtr)
166+ glib.SaveHandlerMapping(handlerID, cbPtr)
167+ return handlerID
164168 }
165169
166170 // Emitted to check if a peer that is successfully authenticated
167171 // is authorized.
168-func (x *DBusAuthObserver) ConnectAuthorizeAuthenticatedPeer(cb *func(DBusAuthObserver, uintptr, uintptr) bool) uint32 {
172+func (x *DBusAuthObserver) ConnectAuthorizeAuthenticatedPeer(cb *func(DBusAuthObserver, uintptr, uintptr) bool) uint {
169173 cbPtr := uintptr(unsafe.Pointer(cb))
170174 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
171- return gobject.SignalConnect(x.GoPointer(), "authorize-authenticated-peer", cbRefPtr)
175+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize-authenticated-peer", cbRefPtr)
176+ glib.SaveHandlerMapping(handlerID, cbPtr)
177+ return handlerID
172178 }
173179
174180 fcb := func(clsPtr uintptr, StreamVarp uintptr, CredentialsVarp uintptr) bool {
@@ -181,7 +187,9 @@ func (x *DBusAuthObserver) ConnectAuthorizeAuthenticatedPeer(cb *func(DBusAuthOb
181187 }
182188 cbRefPtr := purego.NewCallback(fcb)
183189 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
184- return gobject.SignalConnect(x.GoPointer(), "authorize-authenticated-peer", cbRefPtr)
190+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize-authenticated-peer", cbRefPtr)
191+ glib.SaveHandlerMapping(handlerID, cbPtr)
192+ return handlerID
185193 }
186194
187195 func init() {
M v4/gio/gdbusconnection.go +7 -3
@@ -1879,10 +1879,12 @@ func (x *DBusConnection) GetPropertyUniqueName() string {
18791879 // Upon receiving this signal, you should give up your reference to
18801880 // @connection. You are guaranteed that this signal is emitted only
18811881 // once.
1882-func (x *DBusConnection) ConnectClosed(cb *func(DBusConnection, bool, uintptr)) uint32 {
1882+func (x *DBusConnection) ConnectClosed(cb *func(DBusConnection, bool, uintptr)) uint {
18831883 cbPtr := uintptr(unsafe.Pointer(cb))
18841884 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1885- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
1885+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
1886+ glib.SaveHandlerMapping(handlerID, cbPtr)
1887+ return handlerID
18861888 }
18871889
18881890 fcb := func(clsPtr uintptr, RemotePeerVanishedVarp bool, ErrorVarp uintptr) {
@@ -1895,7 +1897,9 @@ func (x *DBusConnection) ConnectClosed(cb *func(DBusConnection, bool, uintptr))
18951897 }
18961898 cbRefPtr := purego.NewCallback(fcb)
18971899 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1898- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
1900+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
1901+ glib.SaveHandlerMapping(handlerID, cbPtr)
1902+ return handlerID
18991903 }
19001904
19011905 // Starts asynchronous initialization of the object implementing the
M v4/gio/gdbusinterfaceskeleton.go +7 -3
@@ -392,10 +392,12 @@ func (c *DBusInterfaceSkeleton) SetGoPointer(ptr uintptr) {
392392 // flags set, no dedicated thread is ever used and the call will be
393393 // handled in the same thread as the object that @interface belongs
394394 // to was exported in.
395-func (x *DBusInterfaceSkeleton) ConnectGAuthorizeMethod(cb *func(DBusInterfaceSkeleton, uintptr) bool) uint32 {
395+func (x *DBusInterfaceSkeleton) ConnectGAuthorizeMethod(cb *func(DBusInterfaceSkeleton, uintptr) bool) uint {
396396 cbPtr := uintptr(unsafe.Pointer(cb))
397397 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
398- return gobject.SignalConnect(x.GoPointer(), "g-authorize-method", cbRefPtr)
398+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-authorize-method", cbRefPtr)
399+ glib.SaveHandlerMapping(handlerID, cbPtr)
400+ return handlerID
399401 }
400402
401403 fcb := func(clsPtr uintptr, InvocationVarp uintptr) bool {
@@ -408,7 +410,9 @@ func (x *DBusInterfaceSkeleton) ConnectGAuthorizeMethod(cb *func(DBusInterfaceSk
408410 }
409411 cbRefPtr := purego.NewCallback(fcb)
410412 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
411- return gobject.SignalConnect(x.GoPointer(), "g-authorize-method", cbRefPtr)
413+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-authorize-method", cbRefPtr)
414+ glib.SaveHandlerMapping(handlerID, cbPtr)
415+ return handlerID
412416 }
413417
414418 // Gets the #GDBusObject that @interface_ belongs to, if any.
M v4/gio/gdbusobjectmanagerclient.go +14 -6
@@ -509,10 +509,12 @@ func (x *DBusObjectManagerClient) GetPropertyObjectPath() string {
509509 // This signal is emitted in the thread-default main context
510510 // (see [method@GLib.MainContext.push_thread_default])
511511 // that @manager was constructed in.
512-func (x *DBusObjectManagerClient) ConnectInterfaceProxyPropertiesChanged(cb *func(DBusObjectManagerClient, uintptr, uintptr, uintptr, []string)) uint32 {
512+func (x *DBusObjectManagerClient) ConnectInterfaceProxyPropertiesChanged(cb *func(DBusObjectManagerClient, uintptr, uintptr, uintptr, []string)) uint {
513513 cbPtr := uintptr(unsafe.Pointer(cb))
514514 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
515- return gobject.SignalConnect(x.GoPointer(), "interface-proxy-properties-changed", cbRefPtr)
515+ handlerID := gobject.SignalConnect(x.GoPointer(), "interface-proxy-properties-changed", cbRefPtr)
516+ glib.SaveHandlerMapping(handlerID, cbPtr)
517+ return handlerID
516518 }
517519
518520 fcb := func(clsPtr uintptr, ObjectProxyVarp uintptr, InterfaceProxyVarp uintptr, ChangedPropertiesVarp uintptr, InvalidatedPropertiesVarp []string) {
@@ -525,7 +527,9 @@ func (x *DBusObjectManagerClient) ConnectInterfaceProxyPropertiesChanged(cb *fun
525527 }
526528 cbRefPtr := purego.NewCallback(fcb)
527529 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
528- return gobject.SignalConnect(x.GoPointer(), "interface-proxy-properties-changed", cbRefPtr)
530+ handlerID := gobject.SignalConnect(x.GoPointer(), "interface-proxy-properties-changed", cbRefPtr)
531+ glib.SaveHandlerMapping(handlerID, cbPtr)
532+ return handlerID
529533 }
530534
531535 // Emitted when a D-Bus signal is received on @interface_proxy.
@@ -536,10 +540,12 @@ func (x *DBusObjectManagerClient) ConnectInterfaceProxyPropertiesChanged(cb *fun
536540 // This signal is emitted in the thread-default main context
537541 // (see [method@GLib.MainContext.push_thread_default])
538542 // that @manager was constructed in.
539-func (x *DBusObjectManagerClient) ConnectInterfaceProxySignal(cb *func(DBusObjectManagerClient, uintptr, uintptr, string, string, uintptr)) uint32 {
543+func (x *DBusObjectManagerClient) ConnectInterfaceProxySignal(cb *func(DBusObjectManagerClient, uintptr, uintptr, string, string, uintptr)) uint {
540544 cbPtr := uintptr(unsafe.Pointer(cb))
541545 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
542- return gobject.SignalConnect(x.GoPointer(), "interface-proxy-signal", cbRefPtr)
546+ handlerID := gobject.SignalConnect(x.GoPointer(), "interface-proxy-signal", cbRefPtr)
547+ glib.SaveHandlerMapping(handlerID, cbPtr)
548+ return handlerID
543549 }
544550
545551 fcb := func(clsPtr uintptr, ObjectProxyVarp uintptr, InterfaceProxyVarp uintptr, SenderNameVarp string, SignalNameVarp string, ParametersVarp uintptr) {
@@ -552,7 +558,9 @@ func (x *DBusObjectManagerClient) ConnectInterfaceProxySignal(cb *func(DBusObjec
552558 }
553559 cbRefPtr := purego.NewCallback(fcb)
554560 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
555- return gobject.SignalConnect(x.GoPointer(), "interface-proxy-signal", cbRefPtr)
561+ handlerID := gobject.SignalConnect(x.GoPointer(), "interface-proxy-signal", cbRefPtr)
562+ glib.SaveHandlerMapping(handlerID, cbPtr)
563+ return handlerID
556564 }
557565
558566 // Starts asynchronous initialization of the object implementing the
M v4/gio/gdbusobjectskeleton.go +7 -3
@@ -189,10 +189,12 @@ func (x *DBusObjectSkeleton) GetPropertyGObjectPath() string {
189189 // except that it is for the enclosing object.
190190 //
191191 // The default class handler just returns %TRUE.
192-func (x *DBusObjectSkeleton) ConnectAuthorizeMethod(cb *func(DBusObjectSkeleton, uintptr, uintptr) bool) uint32 {
192+func (x *DBusObjectSkeleton) ConnectAuthorizeMethod(cb *func(DBusObjectSkeleton, uintptr, uintptr) bool) uint {
193193 cbPtr := uintptr(unsafe.Pointer(cb))
194194 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
195- return gobject.SignalConnect(x.GoPointer(), "authorize-method", cbRefPtr)
195+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize-method", cbRefPtr)
196+ glib.SaveHandlerMapping(handlerID, cbPtr)
197+ return handlerID
196198 }
197199
198200 fcb := func(clsPtr uintptr, InterfaceVarp uintptr, InvocationVarp uintptr) bool {
@@ -205,7 +207,9 @@ func (x *DBusObjectSkeleton) ConnectAuthorizeMethod(cb *func(DBusObjectSkeleton,
205207 }
206208 cbRefPtr := purego.NewCallback(fcb)
207209 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
208- return gobject.SignalConnect(x.GoPointer(), "authorize-method", cbRefPtr)
210+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize-method", cbRefPtr)
211+ glib.SaveHandlerMapping(handlerID, cbPtr)
212+ return handlerID
209213 }
210214
211215 // Gets the D-Bus interface with name @interface_name associated with
M v4/gio/gdbusproxy.go +21 -9
@@ -825,10 +825,12 @@ func (x *DBusProxy) GetPropertyGObjectPath() string {
825825 // This signal corresponds to the
826826 // `PropertiesChanged` D-Bus signal on the
827827 // `org.freedesktop.DBus.Properties` interface.
828-func (x *DBusProxy) ConnectGPropertiesChanged(cb *func(DBusProxy, uintptr, []string)) uint32 {
828+func (x *DBusProxy) ConnectGPropertiesChanged(cb *func(DBusProxy, uintptr, []string)) uint {
829829 cbPtr := uintptr(unsafe.Pointer(cb))
830830 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
831- return gobject.SignalConnect(x.GoPointer(), "g-properties-changed", cbRefPtr)
831+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-properties-changed", cbRefPtr)
832+ glib.SaveHandlerMapping(handlerID, cbPtr)
833+ return handlerID
832834 }
833835
834836 fcb := func(clsPtr uintptr, ChangedPropertiesVarp uintptr, InvalidatedPropertiesVarp []string) {
@@ -841,7 +843,9 @@ func (x *DBusProxy) ConnectGPropertiesChanged(cb *func(DBusProxy, uintptr, []str
841843 }
842844 cbRefPtr := purego.NewCallback(fcb)
843845 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
844- return gobject.SignalConnect(x.GoPointer(), "g-properties-changed", cbRefPtr)
846+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-properties-changed", cbRefPtr)
847+ glib.SaveHandlerMapping(handlerID, cbPtr)
848+ return handlerID
845849 }
846850
847851 // Emitted when a signal from the remote object and interface that @proxy is for, has been received.
@@ -849,10 +853,12 @@ func (x *DBusProxy) ConnectGPropertiesChanged(cb *func(DBusProxy, uintptr, []str
849853 // Since 2.72 this signal supports detailed connections. You can connect to
850854 // the detailed signal `g-signal::x` in order to receive callbacks only when
851855 // signal `x` is received from the remote object.
852-func (x *DBusProxy) ConnectGSignal(cb *func(DBusProxy, string, string, uintptr)) uint32 {
856+func (x *DBusProxy) ConnectGSignal(cb *func(DBusProxy, string, string, uintptr)) uint {
853857 cbPtr := uintptr(unsafe.Pointer(cb))
854858 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
855- return gobject.SignalConnect(x.GoPointer(), "g-signal", cbRefPtr)
859+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-signal", cbRefPtr)
860+ glib.SaveHandlerMapping(handlerID, cbPtr)
861+ return handlerID
856862 }
857863
858864 fcb := func(clsPtr uintptr, SenderNameVarp string, SignalNameVarp string, ParametersVarp uintptr) {
@@ -865,16 +871,20 @@ func (x *DBusProxy) ConnectGSignal(cb *func(DBusProxy, string, string, uintptr))
865871 }
866872 cbRefPtr := purego.NewCallback(fcb)
867873 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
868- return gobject.SignalConnect(x.GoPointer(), "g-signal", cbRefPtr)
874+ handlerID := gobject.SignalConnect(x.GoPointer(), "g-signal", cbRefPtr)
875+ glib.SaveHandlerMapping(handlerID, cbPtr)
876+ return handlerID
869877 }
870878
871879 // ConnectGSignalWithDetail connects to the "g-signal" signal with a detail string.
872880 // The detail is appended as "g-signal::<detail>".
873-func (x *DBusProxy) ConnectGSignalWithDetail(detail string, cb *func(DBusProxy, string, string, uintptr)) uint32 {
881+func (x *DBusProxy) ConnectGSignalWithDetail(detail string, cb *func(DBusProxy, string, string, uintptr)) uint {
874882 cbPtr := uintptr(unsafe.Pointer(cb))
875883 signalName := fmt.Sprintf("g-signal::%s", detail)
876884 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
877- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
885+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
886+ glib.SaveHandlerMapping(handlerID, cbPtr)
887+ return handlerID
878888 }
879889
880890 fcb := func(clsPtr uintptr, SenderNameVarp string, SignalNameVarp string, ParametersVarp uintptr) {
@@ -887,7 +897,9 @@ func (x *DBusProxy) ConnectGSignalWithDetail(detail string, cb *func(DBusProxy,
887897 }
888898 cbRefPtr := purego.NewCallback(fcb)
889899 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
890- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
900+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
901+ glib.SaveHandlerMapping(handlerID, cbPtr)
902+ return handlerID
891903 }
892904
893905 // Starts asynchronous initialization of the object implementing the
M v4/gio/gdbusserver.go +7 -3
@@ -235,10 +235,12 @@ func (x *DBusServer) GetPropertyGuid() string {
235235 // before incoming messages on @connection are processed. This means
236236 // that it's suitable to call g_dbus_connection_register_object() or
237237 // similar from the signal handler.
238-func (x *DBusServer) ConnectNewConnection(cb *func(DBusServer, uintptr) bool) uint32 {
238+func (x *DBusServer) ConnectNewConnection(cb *func(DBusServer, uintptr) bool) uint {
239239 cbPtr := uintptr(unsafe.Pointer(cb))
240240 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
241- return gobject.SignalConnect(x.GoPointer(), "new-connection", cbRefPtr)
241+ handlerID := gobject.SignalConnect(x.GoPointer(), "new-connection", cbRefPtr)
242+ glib.SaveHandlerMapping(handlerID, cbPtr)
243+ return handlerID
242244 }
243245
244246 fcb := func(clsPtr uintptr, ConnectionVarp uintptr) bool {
@@ -251,7 +253,9 @@ func (x *DBusServer) ConnectNewConnection(cb *func(DBusServer, uintptr) bool) ui
251253 }
252254 cbRefPtr := purego.NewCallback(fcb)
253255 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
254- return gobject.SignalConnect(x.GoPointer(), "new-connection", cbRefPtr)
256+ handlerID := gobject.SignalConnect(x.GoPointer(), "new-connection", cbRefPtr)
257+ glib.SaveHandlerMapping(handlerID, cbPtr)
258+ return handlerID
255259 }
256260
257261 // Initializes the object implementing the interface.
M v4/gio/gdebugcontrollerdbus.go +7 -3
@@ -263,10 +263,12 @@ func (c *DebugControllerDBus) SetGoPointer(ptr uintptr) {
263263 // Signal handlers must not modify @invocation, or cause it to return a value.
264264 //
265265 // The default class handler just returns %TRUE.
266-func (x *DebugControllerDBus) ConnectAuthorize(cb *func(DebugControllerDBus, uintptr) bool) uint32 {
266+func (x *DebugControllerDBus) ConnectAuthorize(cb *func(DebugControllerDBus, uintptr) bool) uint {
267267 cbPtr := uintptr(unsafe.Pointer(cb))
268268 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
269- return gobject.SignalConnect(x.GoPointer(), "authorize", cbRefPtr)
269+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize", cbRefPtr)
270+ glib.SaveHandlerMapping(handlerID, cbPtr)
271+ return handlerID
270272 }
271273
272274 fcb := func(clsPtr uintptr, InvocationVarp uintptr) bool {
@@ -279,7 +281,9 @@ func (x *DebugControllerDBus) ConnectAuthorize(cb *func(DebugControllerDBus, uin
279281 }
280282 cbRefPtr := purego.NewCallback(fcb)
281283 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
282- return gobject.SignalConnect(x.GoPointer(), "authorize", cbRefPtr)
284+ handlerID := gobject.SignalConnect(x.GoPointer(), "authorize", cbRefPtr)
285+ glib.SaveHandlerMapping(handlerID, cbPtr)
286+ return handlerID
283287 }
284288
285289 // Get the value of #GDebugController:debug-enabled.
M v4/gio/gfilemonitor.go +7 -3
@@ -343,10 +343,12 @@ func (x *FileMonitor) GetPropertyRateLimit() int {
343343 // old path, and @other_file will be set to a #GFile containing the new path.
344344 //
345345 // In all the other cases, @other_file will be set to #NULL.
346-func (x *FileMonitor) ConnectChanged(cb *func(FileMonitor, uintptr, uintptr, FileMonitorEvent)) uint32 {
346+func (x *FileMonitor) ConnectChanged(cb *func(FileMonitor, uintptr, uintptr, FileMonitorEvent)) uint {
347347 cbPtr := uintptr(unsafe.Pointer(cb))
348348 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
349- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
349+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
350+ glib.SaveHandlerMapping(handlerID, cbPtr)
351+ return handlerID
350352 }
351353
352354 fcb := func(clsPtr uintptr, FileVarp uintptr, OtherFileVarp uintptr, EventTypeVarp FileMonitorEvent) {
@@ -359,7 +361,9 @@ func (x *FileMonitor) ConnectChanged(cb *func(FileMonitor, uintptr, uintptr, Fil
359361 }
360362 cbRefPtr := purego.NewCallback(fcb)
361363 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
362- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
364+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
365+ glib.SaveHandlerMapping(handlerID, cbPtr)
366+ return handlerID
363367 }
364368
365369 func init() {
M v4/gio/gfilenamecompleter.go +7 -3
@@ -205,10 +205,12 @@ func (c *FilenameCompleter) SetGoPointer(ptr uintptr) {
205205 }
206206
207207 // Emitted when the file name completion information comes available.
208-func (x *FilenameCompleter) ConnectGotCompletionData(cb *func(FilenameCompleter)) uint32 {
208+func (x *FilenameCompleter) ConnectGotCompletionData(cb *func(FilenameCompleter)) uint {
209209 cbPtr := uintptr(unsafe.Pointer(cb))
210210 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
211- return gobject.SignalConnect(x.GoPointer(), "got-completion-data", cbRefPtr)
211+ handlerID := gobject.SignalConnect(x.GoPointer(), "got-completion-data", cbRefPtr)
212+ glib.SaveHandlerMapping(handlerID, cbPtr)
213+ return handlerID
212214 }
213215
214216 fcb := func(clsPtr uintptr) {
@@ -221,7 +223,9 @@ func (x *FilenameCompleter) ConnectGotCompletionData(cb *func(FilenameCompleter)
221223 }
222224 cbRefPtr := purego.NewCallback(fcb)
223225 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
224- return gobject.SignalConnect(x.GoPointer(), "got-completion-data", cbRefPtr)
226+ handlerID := gobject.SignalConnect(x.GoPointer(), "got-completion-data", cbRefPtr)
227+ glib.SaveHandlerMapping(handlerID, cbPtr)
228+ return handlerID
225229 }
226230
227231 func init() {
M v4/gio/gmemoryoutputstream.go +7 -7
@@ -389,10 +389,10 @@ func (x *MemoryOutputStream) GetPropertyData() uintptr {
389389
390390 // GetPropertyDataSize gets the "data-size" property.
391391 // Size of data written to the buffer.
392-func (x *MemoryOutputStream) GetPropertyDataSize() uint32 {
392+func (x *MemoryOutputStream) GetPropertyDataSize() uint {
393393 var v gobject.Value
394394 x.GetProperty("data-size", &v)
395- return v.GetUlong()
395+ return v.GetUint()
396396 }
397397
398398 // SetPropertyDestroyFunction sets the "destroy-function" property.
@@ -431,19 +431,19 @@ func (x *MemoryOutputStream) GetPropertyReallocFunction() uintptr {
431431
432432 // SetPropertySize sets the "size" property.
433433 // Current size of the data buffer.
434-func (x *MemoryOutputStream) SetPropertySize(value uint32) {
434+func (x *MemoryOutputStream) SetPropertySize(value uint) {
435435 var v gobject.Value
436- v.Init(gobject.TypeUlongVal)
437- v.SetUlong(value)
436+ v.Init(gobject.TypeUintVal)
437+ v.SetUint(value)
438438 x.SetProperty("size", &v)
439439 }
440440
441441 // GetPropertySize gets the "size" property.
442442 // Current size of the data buffer.
443-func (x *MemoryOutputStream) GetPropertySize() uint32 {
443+func (x *MemoryOutputStream) GetPropertySize() uint {
444444 var v gobject.Value
445445 x.GetProperty("size", &v)
446- return v.GetUlong()
446+ return v.GetUint()
447447 }
448448
449449 // Checks if @stream is actually pollable. Some classes may implement
M v4/gio/gmenumodel.go +7 -3
@@ -896,10 +896,12 @@ func (c *MenuModel) SetGoPointer(ptr uintptr) {
896896 // Signal handlers may query the model (particularly the added items)
897897 // and expect to see the results of the modification that is being
898898 // reported. The signal is emitted after the modification.
899-func (x *MenuModel) ConnectItemsChanged(cb *func(MenuModel, int, int, int)) uint32 {
899+func (x *MenuModel) ConnectItemsChanged(cb *func(MenuModel, int, int, int)) uint {
900900 cbPtr := uintptr(unsafe.Pointer(cb))
901901 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
902- return gobject.SignalConnect(x.GoPointer(), "items-changed", cbRefPtr)
902+ handlerID := gobject.SignalConnect(x.GoPointer(), "items-changed", cbRefPtr)
903+ glib.SaveHandlerMapping(handlerID, cbPtr)
904+ return handlerID
903905 }
904906
905907 fcb := func(clsPtr uintptr, PositionVarp int, RemovedVarp int, AddedVarp int) {
@@ -912,7 +914,9 @@ func (x *MenuModel) ConnectItemsChanged(cb *func(MenuModel, int, int, int)) uint
912914 }
913915 cbRefPtr := purego.NewCallback(fcb)
914916 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
915- return gobject.SignalConnect(x.GoPointer(), "items-changed", cbRefPtr)
917+ handlerID := gobject.SignalConnect(x.GoPointer(), "items-changed", cbRefPtr)
918+ glib.SaveHandlerMapping(handlerID, cbPtr)
919+ return handlerID
916920 }
917921
918922 func init() {
M v4/gio/gmountoperation.go +42 -18
@@ -825,10 +825,12 @@ func (x *MountOperation) GetPropertyUsername() string {
825825 //
826826 // Implementations of GMountOperation should handle this signal
827827 // by dismissing open password dialogs.
828-func (x *MountOperation) ConnectAborted(cb *func(MountOperation)) uint32 {
828+func (x *MountOperation) ConnectAborted(cb *func(MountOperation)) uint {
829829 cbPtr := uintptr(unsafe.Pointer(cb))
830830 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
831- return gobject.SignalConnect(x.GoPointer(), "aborted", cbRefPtr)
831+ handlerID := gobject.SignalConnect(x.GoPointer(), "aborted", cbRefPtr)
832+ glib.SaveHandlerMapping(handlerID, cbPtr)
833+ return handlerID
832834 }
833835
834836 fcb := func(clsPtr uintptr) {
@@ -841,7 +843,9 @@ func (x *MountOperation) ConnectAborted(cb *func(MountOperation)) uint32 {
841843 }
842844 cbRefPtr := purego.NewCallback(fcb)
843845 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
844- return gobject.SignalConnect(x.GoPointer(), "aborted", cbRefPtr)
846+ handlerID := gobject.SignalConnect(x.GoPointer(), "aborted", cbRefPtr)
847+ glib.SaveHandlerMapping(handlerID, cbPtr)
848+ return handlerID
845849 }
846850
847851 // Emitted when a mount operation asks the user for a password.
@@ -849,10 +853,12 @@ func (x *MountOperation) ConnectAborted(cb *func(MountOperation)) uint32 {
849853 // If the message contains a line break, the first line should be
850854 // presented as a heading. For example, it may be used as the
851855 // primary text in a #GtkMessageDialog.
852-func (x *MountOperation) ConnectAskPassword(cb *func(MountOperation, string, string, string, AskPasswordFlags)) uint32 {
856+func (x *MountOperation) ConnectAskPassword(cb *func(MountOperation, string, string, string, AskPasswordFlags)) uint {
853857 cbPtr := uintptr(unsafe.Pointer(cb))
854858 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
855- return gobject.SignalConnect(x.GoPointer(), "ask-password", cbRefPtr)
859+ handlerID := gobject.SignalConnect(x.GoPointer(), "ask-password", cbRefPtr)
860+ glib.SaveHandlerMapping(handlerID, cbPtr)
861+ return handlerID
856862 }
857863
858864 fcb := func(clsPtr uintptr, MessageVarp string, DefaultUserVarp string, DefaultDomainVarp string, FlagsVarp AskPasswordFlags) {
@@ -865,7 +871,9 @@ func (x *MountOperation) ConnectAskPassword(cb *func(MountOperation, string, str
865871 }
866872 cbRefPtr := purego.NewCallback(fcb)
867873 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
868- return gobject.SignalConnect(x.GoPointer(), "ask-password", cbRefPtr)
874+ handlerID := gobject.SignalConnect(x.GoPointer(), "ask-password", cbRefPtr)
875+ glib.SaveHandlerMapping(handlerID, cbPtr)
876+ return handlerID
869877 }
870878
871879 // Emitted when asking the user a question and gives a list of
@@ -874,10 +882,12 @@ func (x *MountOperation) ConnectAskPassword(cb *func(MountOperation, string, str
874882 // If the message contains a line break, the first line should be
875883 // presented as a heading. For example, it may be used as the
876884 // primary text in a #GtkMessageDialog.
877-func (x *MountOperation) ConnectAskQuestion(cb *func(MountOperation, string, []string)) uint32 {
885+func (x *MountOperation) ConnectAskQuestion(cb *func(MountOperation, string, []string)) uint {
878886 cbPtr := uintptr(unsafe.Pointer(cb))
879887 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
880- return gobject.SignalConnect(x.GoPointer(), "ask-question", cbRefPtr)
888+ handlerID := gobject.SignalConnect(x.GoPointer(), "ask-question", cbRefPtr)
889+ glib.SaveHandlerMapping(handlerID, cbPtr)
890+ return handlerID
881891 }
882892
883893 fcb := func(clsPtr uintptr, MessageVarp string, ChoicesVarp []string) {
@@ -890,14 +900,18 @@ func (x *MountOperation) ConnectAskQuestion(cb *func(MountOperation, string, []s
890900 }
891901 cbRefPtr := purego.NewCallback(fcb)
892902 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
893- return gobject.SignalConnect(x.GoPointer(), "ask-question", cbRefPtr)
903+ handlerID := gobject.SignalConnect(x.GoPointer(), "ask-question", cbRefPtr)
904+ glib.SaveHandlerMapping(handlerID, cbPtr)
905+ return handlerID
894906 }
895907
896908 // Emitted when the user has replied to the mount operation.
897-func (x *MountOperation) ConnectReply(cb *func(MountOperation, MountOperationResult)) uint32 {
909+func (x *MountOperation) ConnectReply(cb *func(MountOperation, MountOperationResult)) uint {
898910 cbPtr := uintptr(unsafe.Pointer(cb))
899911 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
900- return gobject.SignalConnect(x.GoPointer(), "reply", cbRefPtr)
912+ handlerID := gobject.SignalConnect(x.GoPointer(), "reply", cbRefPtr)
913+ glib.SaveHandlerMapping(handlerID, cbPtr)
914+ return handlerID
901915 }
902916
903917 fcb := func(clsPtr uintptr, ResultVarp MountOperationResult) {
@@ -910,7 +924,9 @@ func (x *MountOperation) ConnectReply(cb *func(MountOperation, MountOperationRes
910924 }
911925 cbRefPtr := purego.NewCallback(fcb)
912926 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
913- return gobject.SignalConnect(x.GoPointer(), "reply", cbRefPtr)
927+ handlerID := gobject.SignalConnect(x.GoPointer(), "reply", cbRefPtr)
928+ glib.SaveHandlerMapping(handlerID, cbPtr)
929+ return handlerID
914930 }
915931
916932 // Emitted when one or more processes are blocking an operation
@@ -925,10 +941,12 @@ func (x *MountOperation) ConnectReply(cb *func(MountOperation, MountOperationRes
925941 // If the message contains a line break, the first line should be
926942 // presented as a heading. For example, it may be used as the
927943 // primary text in a #GtkMessageDialog.
928-func (x *MountOperation) ConnectShowProcesses(cb *func(MountOperation, string, []glib.Pid, []string)) uint32 {
944+func (x *MountOperation) ConnectShowProcesses(cb *func(MountOperation, string, []glib.Pid, []string)) uint {
929945 cbPtr := uintptr(unsafe.Pointer(cb))
930946 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
931- return gobject.SignalConnect(x.GoPointer(), "show-processes", cbRefPtr)
947+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-processes", cbRefPtr)
948+ glib.SaveHandlerMapping(handlerID, cbPtr)
949+ return handlerID
932950 }
933951
934952 fcb := func(clsPtr uintptr, MessageVarp string, ProcessesVarp []glib.Pid, ChoicesVarp []string) {
@@ -941,7 +959,9 @@ func (x *MountOperation) ConnectShowProcesses(cb *func(MountOperation, string, [
941959 }
942960 cbRefPtr := purego.NewCallback(fcb)
943961 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
944- return gobject.SignalConnect(x.GoPointer(), "show-processes", cbRefPtr)
962+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-processes", cbRefPtr)
963+ glib.SaveHandlerMapping(handlerID, cbPtr)
964+ return handlerID
945965 }
946966
947967 // Emitted when an unmount operation has been busy for more than some time
@@ -960,10 +980,12 @@ func (x *MountOperation) ConnectShowProcesses(cb *func(MountOperation, string, [
960980 // If the message contains a line break, the first line should be
961981 // presented as a heading. For example, it may be used as the
962982 // primary text in a #GtkMessageDialog.
963-func (x *MountOperation) ConnectShowUnmountProgress(cb *func(MountOperation, string, int64, int64)) uint32 {
983+func (x *MountOperation) ConnectShowUnmountProgress(cb *func(MountOperation, string, int64, int64)) uint {
964984 cbPtr := uintptr(unsafe.Pointer(cb))
965985 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
966- return gobject.SignalConnect(x.GoPointer(), "show-unmount-progress", cbRefPtr)
986+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-unmount-progress", cbRefPtr)
987+ glib.SaveHandlerMapping(handlerID, cbPtr)
988+ return handlerID
967989 }
968990
969991 fcb := func(clsPtr uintptr, MessageVarp string, TimeLeftVarp int64, BytesLeftVarp int64) {
@@ -976,7 +998,9 @@ func (x *MountOperation) ConnectShowUnmountProgress(cb *func(MountOperation, str
976998 }
977999 cbRefPtr := purego.NewCallback(fcb)
9781000 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
979- return gobject.SignalConnect(x.GoPointer(), "show-unmount-progress", cbRefPtr)
1001+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-unmount-progress", cbRefPtr)
1002+ glib.SaveHandlerMapping(handlerID, cbPtr)
1003+ return handlerID
9801004 }
9811005
9821006 func init() {
M v4/gio/gresolver.go +7 -3
@@ -951,10 +951,12 @@ func (x *Resolver) GetPropertyTimeout() uint {
951951
952952 // Emitted when the resolver notices that the system resolver
953953 // configuration has changed.
954-func (x *Resolver) ConnectReload(cb *func(Resolver)) uint32 {
954+func (x *Resolver) ConnectReload(cb *func(Resolver)) uint {
955955 cbPtr := uintptr(unsafe.Pointer(cb))
956956 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
957- return gobject.SignalConnect(x.GoPointer(), "reload", cbRefPtr)
957+ handlerID := gobject.SignalConnect(x.GoPointer(), "reload", cbRefPtr)
958+ glib.SaveHandlerMapping(handlerID, cbPtr)
959+ return handlerID
958960 }
959961
960962 fcb := func(clsPtr uintptr) {
@@ -967,7 +969,9 @@ func (x *Resolver) ConnectReload(cb *func(Resolver)) uint32 {
967969 }
968970 cbRefPtr := purego.NewCallback(fcb)
969971 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
970- return gobject.SignalConnect(x.GoPointer(), "reload", cbRefPtr)
972+ handlerID := gobject.SignalConnect(x.GoPointer(), "reload", cbRefPtr)
973+ glib.SaveHandlerMapping(handlerID, cbPtr)
974+ return handlerID
971975 }
972976
973977 var xResolverFreeAddresses func(*glib.List)
M v4/gio/gsettings.go +42 -18
@@ -1701,10 +1701,12 @@ func (x *Settings) GetPropertySettingsSchema() uintptr {
17011701 // The default handler for this signal invokes the [signal@Gio.Settings::changed] signal
17021702 // for each affected key. If any other connected handler returns
17031703 // true then this default functionality will be suppressed.
1704-func (x *Settings) ConnectChangeEvent(cb *func(Settings, uintptr, int) bool) uint32 {
1704+func (x *Settings) ConnectChangeEvent(cb *func(Settings, uintptr, int) bool) uint {
17051705 cbPtr := uintptr(unsafe.Pointer(cb))
17061706 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1707- return gobject.SignalConnect(x.GoPointer(), "change-event", cbRefPtr)
1707+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-event", cbRefPtr)
1708+ glib.SaveHandlerMapping(handlerID, cbPtr)
1709+ return handlerID
17081710 }
17091711
17101712 fcb := func(clsPtr uintptr, KeysVarp uintptr, NKeysVarp int) bool {
@@ -1717,7 +1719,9 @@ func (x *Settings) ConnectChangeEvent(cb *func(Settings, uintptr, int) bool) uin
17171719 }
17181720 cbRefPtr := purego.NewCallback(fcb)
17191721 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1720- return gobject.SignalConnect(x.GoPointer(), "change-event", cbRefPtr)
1722+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-event", cbRefPtr)
1723+ glib.SaveHandlerMapping(handlerID, cbPtr)
1724+ return handlerID
17211725 }
17221726
17231727 // Emitted when a key has potentially changed.
@@ -1731,10 +1735,12 @@ func (x *Settings) ConnectChangeEvent(cb *func(Settings, uintptr, int) bool) uin
17311735 //
17321736 // Note that @settings only emits this signal if you have read @key at
17331737 // least once while a signal handler was already connected for @key.
1734-func (x *Settings) ConnectChanged(cb *func(Settings, string)) uint32 {
1738+func (x *Settings) ConnectChanged(cb *func(Settings, string)) uint {
17351739 cbPtr := uintptr(unsafe.Pointer(cb))
17361740 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1737- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1741+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1742+ glib.SaveHandlerMapping(handlerID, cbPtr)
1743+ return handlerID
17381744 }
17391745
17401746 fcb := func(clsPtr uintptr, KeyVarp string) {
@@ -1747,16 +1753,20 @@ func (x *Settings) ConnectChanged(cb *func(Settings, string)) uint32 {
17471753 }
17481754 cbRefPtr := purego.NewCallback(fcb)
17491755 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1750- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1756+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1757+ glib.SaveHandlerMapping(handlerID, cbPtr)
1758+ return handlerID
17511759 }
17521760
17531761 // ConnectChangedWithDetail connects to the "changed" signal with a detail string.
17541762 // The detail is appended as "changed::<detail>".
1755-func (x *Settings) ConnectChangedWithDetail(detail string, cb *func(Settings, string)) uint32 {
1763+func (x *Settings) ConnectChangedWithDetail(detail string, cb *func(Settings, string)) uint {
17561764 cbPtr := uintptr(unsafe.Pointer(cb))
17571765 signalName := fmt.Sprintf("changed::%s", detail)
17581766 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1759- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1767+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1768+ glib.SaveHandlerMapping(handlerID, cbPtr)
1769+ return handlerID
17601770 }
17611771
17621772 fcb := func(clsPtr uintptr, KeyVarp string) {
@@ -1769,7 +1779,9 @@ func (x *Settings) ConnectChangedWithDetail(detail string, cb *func(Settings, st
17691779 }
17701780 cbRefPtr := purego.NewCallback(fcb)
17711781 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1772- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1782+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1783+ glib.SaveHandlerMapping(handlerID, cbPtr)
1784+ return handlerID
17731785 }
17741786
17751787 // Emitted once per writability change event that affects this settings object.
@@ -1791,10 +1803,12 @@ func (x *Settings) ConnectChangedWithDetail(detail string, cb *func(Settings, st
17911803 // example, a new mandatory setting is introduced). If any other
17921804 // connected handler returns true then this default functionality
17931805 // will be suppressed.
1794-func (x *Settings) ConnectWritableChangeEvent(cb *func(Settings, uint) bool) uint32 {
1806+func (x *Settings) ConnectWritableChangeEvent(cb *func(Settings, uint) bool) uint {
17951807 cbPtr := uintptr(unsafe.Pointer(cb))
17961808 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1797- return gobject.SignalConnect(x.GoPointer(), "writable-change-event", cbRefPtr)
1809+ handlerID := gobject.SignalConnect(x.GoPointer(), "writable-change-event", cbRefPtr)
1810+ glib.SaveHandlerMapping(handlerID, cbPtr)
1811+ return handlerID
17981812 }
17991813
18001814 fcb := func(clsPtr uintptr, KeyVarp uint) bool {
@@ -1807,7 +1821,9 @@ func (x *Settings) ConnectWritableChangeEvent(cb *func(Settings, uint) bool) uin
18071821 }
18081822 cbRefPtr := purego.NewCallback(fcb)
18091823 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1810- return gobject.SignalConnect(x.GoPointer(), "writable-change-event", cbRefPtr)
1824+ handlerID := gobject.SignalConnect(x.GoPointer(), "writable-change-event", cbRefPtr)
1825+ glib.SaveHandlerMapping(handlerID, cbPtr)
1826+ return handlerID
18111827 }
18121828
18131829 // Emitted when the writability of a key has potentially changed.
@@ -1818,10 +1834,12 @@ func (x *Settings) ConnectWritableChangeEvent(cb *func(Settings, uint) bool) uin
18181834 // This signal supports detailed connections. You can connect to the
18191835 // detailed signal `writable-changed::x` in order to only receive
18201836 // callbacks when the writability of `x` changes.
1821-func (x *Settings) ConnectWritableChanged(cb *func(Settings, string)) uint32 {
1837+func (x *Settings) ConnectWritableChanged(cb *func(Settings, string)) uint {
18221838 cbPtr := uintptr(unsafe.Pointer(cb))
18231839 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1824- return gobject.SignalConnect(x.GoPointer(), "writable-changed", cbRefPtr)
1840+ handlerID := gobject.SignalConnect(x.GoPointer(), "writable-changed", cbRefPtr)
1841+ glib.SaveHandlerMapping(handlerID, cbPtr)
1842+ return handlerID
18251843 }
18261844
18271845 fcb := func(clsPtr uintptr, KeyVarp string) {
@@ -1834,16 +1852,20 @@ func (x *Settings) ConnectWritableChanged(cb *func(Settings, string)) uint32 {
18341852 }
18351853 cbRefPtr := purego.NewCallback(fcb)
18361854 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1837- return gobject.SignalConnect(x.GoPointer(), "writable-changed", cbRefPtr)
1855+ handlerID := gobject.SignalConnect(x.GoPointer(), "writable-changed", cbRefPtr)
1856+ glib.SaveHandlerMapping(handlerID, cbPtr)
1857+ return handlerID
18381858 }
18391859
18401860 // ConnectWritableChangedWithDetail connects to the "writable-changed" signal with a detail string.
18411861 // The detail is appended as "writable-changed::<detail>".
1842-func (x *Settings) ConnectWritableChangedWithDetail(detail string, cb *func(Settings, string)) uint32 {
1862+func (x *Settings) ConnectWritableChangedWithDetail(detail string, cb *func(Settings, string)) uint {
18431863 cbPtr := uintptr(unsafe.Pointer(cb))
18441864 signalName := fmt.Sprintf("writable-changed::%s", detail)
18451865 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1846- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1866+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1867+ glib.SaveHandlerMapping(handlerID, cbPtr)
1868+ return handlerID
18471869 }
18481870
18491871 fcb := func(clsPtr uintptr, KeyVarp string) {
@@ -1856,7 +1878,9 @@ func (x *Settings) ConnectWritableChangedWithDetail(detail string, cb *func(Sett
18561878 }
18571879 cbRefPtr := purego.NewCallback(fcb)
18581880 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1859- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1881+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
1882+ glib.SaveHandlerMapping(handlerID, cbPtr)
1883+ return handlerID
18601884 }
18611885
18621886 var xSettingsListRelocatableSchemas func() []string
M v4/gio/gsimpleaction.go +14 -6
@@ -226,10 +226,12 @@ func (x *SimpleAction) GetPropertyStateType() uintptr {
226226 // type, the default is to forward them directly to
227227 // #GSimpleAction::change-state. This should allow almost all users
228228 // of #GSimpleAction to connect only one handler or the other.
229-func (x *SimpleAction) ConnectActivate(cb *func(SimpleAction, uintptr)) uint32 {
229+func (x *SimpleAction) ConnectActivate(cb *func(SimpleAction, uintptr)) uint {
230230 cbPtr := uintptr(unsafe.Pointer(cb))
231231 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
232- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
232+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
233+ glib.SaveHandlerMapping(handlerID, cbPtr)
234+ return handlerID
233235 }
234236
235237 fcb := func(clsPtr uintptr, ParameterVarp uintptr) {
@@ -242,7 +244,9 @@ func (x *SimpleAction) ConnectActivate(cb *func(SimpleAction, uintptr)) uint32 {
242244 }
243245 cbRefPtr := purego.NewCallback(fcb)
244246 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
245- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
247+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
248+ glib.SaveHandlerMapping(handlerID, cbPtr)
249+ return handlerID
246250 }
247251
248252 // Indicates that the action just received a request to change its
@@ -281,10 +285,12 @@ func (x *SimpleAction) ConnectActivate(cb *func(SimpleAction, uintptr)) uint32 {
281285 //
282286 // The handler need not set the state to the requested value.
283287 // It could set it to any value at all, or take some other action.
284-func (x *SimpleAction) ConnectChangeState(cb *func(SimpleAction, uintptr)) uint32 {
288+func (x *SimpleAction) ConnectChangeState(cb *func(SimpleAction, uintptr)) uint {
285289 cbPtr := uintptr(unsafe.Pointer(cb))
286290 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
287- return gobject.SignalConnect(x.GoPointer(), "change-state", cbRefPtr)
291+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-state", cbRefPtr)
292+ glib.SaveHandlerMapping(handlerID, cbPtr)
293+ return handlerID
288294 }
289295
290296 fcb := func(clsPtr uintptr, ValueVarp uintptr) {
@@ -297,7 +303,9 @@ func (x *SimpleAction) ConnectChangeState(cb *func(SimpleAction, uintptr)) uint3
297303 }
298304 cbRefPtr := purego.NewCallback(fcb)
299305 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
300- return gobject.SignalConnect(x.GoPointer(), "change-state", cbRefPtr)
306+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-state", cbRefPtr)
307+ glib.SaveHandlerMapping(handlerID, cbPtr)
308+ return handlerID
301309 }
302310
303311 // Activates the action.
M v4/gio/gsocketclient.go +7 -3
@@ -967,10 +967,12 @@ func (x *SocketClient) GetPropertyTls() bool {
967967 //
968968 // Note that there may be additional #GSocketClientEvent values in
969969 // the future; unrecognized @event values should be ignored.
970-func (x *SocketClient) ConnectEvent(cb *func(SocketClient, SocketClientEvent, uintptr, uintptr)) uint32 {
970+func (x *SocketClient) ConnectEvent(cb *func(SocketClient, SocketClientEvent, uintptr, uintptr)) uint {
971971 cbPtr := uintptr(unsafe.Pointer(cb))
972972 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
973- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
973+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
974+ glib.SaveHandlerMapping(handlerID, cbPtr)
975+ return handlerID
974976 }
975977
976978 fcb := func(clsPtr uintptr, EventVarp SocketClientEvent, ConnectableVarp uintptr, ConnectionVarp uintptr) {
@@ -983,7 +985,9 @@ func (x *SocketClient) ConnectEvent(cb *func(SocketClient, SocketClientEvent, ui
983985 }
984986 cbRefPtr := purego.NewCallback(fcb)
985987 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
986- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
988+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
989+ glib.SaveHandlerMapping(handlerID, cbPtr)
990+ return handlerID
987991 }
988992
989993 func init() {
M v4/gio/gsocketlistener.go +7 -3
@@ -607,10 +607,12 @@ func (x *SocketListener) GetPropertyListenBacklog() int {
607607 // Note that when @listener is used to listen on both IPv4 and
608608 // IPv6, a separate set of signals will be emitted for each, and
609609 // the order they happen in is undefined.
610-func (x *SocketListener) ConnectEvent(cb *func(SocketListener, SocketListenerEvent, uintptr)) uint32 {
610+func (x *SocketListener) ConnectEvent(cb *func(SocketListener, SocketListenerEvent, uintptr)) uint {
611611 cbPtr := uintptr(unsafe.Pointer(cb))
612612 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
613- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
613+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
614+ glib.SaveHandlerMapping(handlerID, cbPtr)
615+ return handlerID
614616 }
615617
616618 fcb := func(clsPtr uintptr, EventVarp SocketListenerEvent, SocketVarp uintptr) {
@@ -623,7 +625,9 @@ func (x *SocketListener) ConnectEvent(cb *func(SocketListener, SocketListenerEve
623625 }
624626 cbRefPtr := purego.NewCallback(fcb)
625627 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
626- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
628+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
629+ glib.SaveHandlerMapping(handlerID, cbPtr)
630+ return handlerID
627631 }
628632
629633 func init() {
M v4/gio/gsocketservice.go +7 -3
@@ -358,10 +358,12 @@ func (x *SocketService) GetPropertyActive() bool {
358358 //
359359 // @connection will be unreffed once the signal handler returns,
360360 // so you need to ref it yourself if you are planning to use it.
361-func (x *SocketService) ConnectIncoming(cb *func(SocketService, uintptr, uintptr) bool) uint32 {
361+func (x *SocketService) ConnectIncoming(cb *func(SocketService, uintptr, uintptr) bool) uint {
362362 cbPtr := uintptr(unsafe.Pointer(cb))
363363 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
364- return gobject.SignalConnect(x.GoPointer(), "incoming", cbRefPtr)
364+ handlerID := gobject.SignalConnect(x.GoPointer(), "incoming", cbRefPtr)
365+ glib.SaveHandlerMapping(handlerID, cbPtr)
366+ return handlerID
365367 }
366368
367369 fcb := func(clsPtr uintptr, ConnectionVarp uintptr, SourceObjectVarp uintptr) bool {
@@ -374,7 +376,9 @@ func (x *SocketService) ConnectIncoming(cb *func(SocketService, uintptr, uintptr
374376 }
375377 cbRefPtr := purego.NewCallback(fcb)
376378 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
377- return gobject.SignalConnect(x.GoPointer(), "incoming", cbRefPtr)
379+ handlerID := gobject.SignalConnect(x.GoPointer(), "incoming", cbRefPtr)
380+ glib.SaveHandlerMapping(handlerID, cbPtr)
381+ return handlerID
378382 }
379383
380384 func init() {
M v4/gio/gthreadedsocketservice.go +7 -3
@@ -261,10 +261,12 @@ func (x *ThreadedSocketService) GetPropertyMaxThreads() int {
261261 // incoming connection. This thread is dedicated to handling
262262 // @connection and may perform blocking IO. The signal handler need
263263 // not return until the connection is closed.
264-func (x *ThreadedSocketService) ConnectRun(cb *func(ThreadedSocketService, uintptr, uintptr) bool) uint32 {
264+func (x *ThreadedSocketService) ConnectRun(cb *func(ThreadedSocketService, uintptr, uintptr) bool) uint {
265265 cbPtr := uintptr(unsafe.Pointer(cb))
266266 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
267- return gobject.SignalConnect(x.GoPointer(), "run", cbRefPtr)
267+ handlerID := gobject.SignalConnect(x.GoPointer(), "run", cbRefPtr)
268+ glib.SaveHandlerMapping(handlerID, cbPtr)
269+ return handlerID
268270 }
269271
270272 fcb := func(clsPtr uintptr, ConnectionVarp uintptr, SourceObjectVarp uintptr) bool {
@@ -277,7 +279,9 @@ func (x *ThreadedSocketService) ConnectRun(cb *func(ThreadedSocketService, uintp
277279 }
278280 cbRefPtr := purego.NewCallback(fcb)
279281 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
280- return gobject.SignalConnect(x.GoPointer(), "run", cbRefPtr)
282+ handlerID := gobject.SignalConnect(x.GoPointer(), "run", cbRefPtr)
283+ glib.SaveHandlerMapping(handlerID, cbPtr)
284+ return handlerID
281285 }
282286
283287 func init() {
M v4/gio/gtlscertificate.go +28 -4
@@ -462,7 +462,13 @@ func (x *TlsCertificate) GetPropertyCertificate() []byte {
462462 if ptr == 0 {
463463 return nil
464464 }
465- return unsafe.Slice((*byte)(unsafe.Pointer(ptr)), 0)[:0]
465+ // GByteArray layout: { guint8 *data; guint len; }
466+ dataPtr := *(*uintptr)(unsafe.Pointer(ptr))
467+ length := *(*uint32)(unsafe.Pointer(ptr + unsafe.Sizeof(uintptr(0))))
468+ if length == 0 || dataPtr == 0 {
469+ return nil
470+ }
471+ return unsafe.Slice((*byte)(unsafe.Pointer(dataPtr)), length)
466472 }
467473
468474 // SetPropertyCertificatePem sets the "certificate-pem" property.
@@ -496,7 +502,13 @@ func (x *TlsCertificate) GetPropertyDnsNames() []uintptr {
496502 if ptr == 0 {
497503 return nil
498504 }
499- return unsafe.Slice((*uintptr)(unsafe.Pointer(ptr)), 0)[:0]
505+ // GPtrArray layout: { gpointer *pdata; guint len; }
506+ dataPtr := *(*uintptr)(unsafe.Pointer(ptr))
507+ length := *(*uint32)(unsafe.Pointer(ptr + unsafe.Sizeof(uintptr(0))))
508+ if length == 0 || dataPtr == 0 {
509+ return nil
510+ }
511+ return unsafe.Slice((*uintptr)(unsafe.Pointer(dataPtr)), length)
500512 }
501513
502514 // GetPropertyIpAddresses gets the "ip-addresses" property.
@@ -509,7 +521,13 @@ func (x *TlsCertificate) GetPropertyIpAddresses() []uintptr {
509521 if ptr == 0 {
510522 return nil
511523 }
512- return unsafe.Slice((*uintptr)(unsafe.Pointer(ptr)), 0)[:0]
524+ // GPtrArray layout: { gpointer *pdata; guint len; }
525+ dataPtr := *(*uintptr)(unsafe.Pointer(ptr))
526+ length := *(*uint32)(unsafe.Pointer(ptr + unsafe.Sizeof(uintptr(0))))
527+ if length == 0 || dataPtr == 0 {
528+ return nil
529+ }
530+ return unsafe.Slice((*uintptr)(unsafe.Pointer(dataPtr)), length)
513531 }
514532
515533 // GetPropertyIssuerName gets the "issuer-name" property.
@@ -634,7 +652,13 @@ func (x *TlsCertificate) GetPropertyPrivateKey() []byte {
634652 if ptr == 0 {
635653 return nil
636654 }
637- return unsafe.Slice((*byte)(unsafe.Pointer(ptr)), 0)[:0]
655+ // GByteArray layout: { guint8 *data; guint len; }
656+ dataPtr := *(*uintptr)(unsafe.Pointer(ptr))
657+ length := *(*uint32)(unsafe.Pointer(ptr + unsafe.Sizeof(uintptr(0))))
658+ if length == 0 || dataPtr == 0 {
659+ return nil
660+ }
661+ return unsafe.Slice((*byte)(unsafe.Pointer(dataPtr)), length)
638662 }
639663
640664 // SetPropertyPrivateKeyPem sets the "private-key-pem" property.
M v4/gio/gtlsconnection.go +7 -3
@@ -800,10 +800,12 @@ func (x *TlsConnection) GetPropertyUseSystemCertdb() bool {
800800 // If you are doing I/O in another thread, you do not
801801 // need to worry about this, and can simply block in the signal
802802 // handler until the UI thread returns an answer.
803-func (x *TlsConnection) ConnectAcceptCertificate(cb *func(TlsConnection, uintptr, TlsCertificateFlags) bool) uint32 {
803+func (x *TlsConnection) ConnectAcceptCertificate(cb *func(TlsConnection, uintptr, TlsCertificateFlags) bool) uint {
804804 cbPtr := uintptr(unsafe.Pointer(cb))
805805 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
806- return gobject.SignalConnect(x.GoPointer(), "accept-certificate", cbRefPtr)
806+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept-certificate", cbRefPtr)
807+ glib.SaveHandlerMapping(handlerID, cbPtr)
808+ return handlerID
807809 }
808810
809811 fcb := func(clsPtr uintptr, PeerCertVarp uintptr, ErrorsVarp TlsCertificateFlags) bool {
@@ -816,7 +818,9 @@ func (x *TlsConnection) ConnectAcceptCertificate(cb *func(TlsConnection, uintptr
816818 }
817819 cbRefPtr := purego.NewCallback(fcb)
818820 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
819- return gobject.SignalConnect(x.GoPointer(), "accept-certificate", cbRefPtr)
821+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept-certificate", cbRefPtr)
822+ glib.SaveHandlerMapping(handlerID, cbPtr)
823+ return handlerID
820824 }
821825
822826 func init() {
M v4/gio/gunixsocketaddress.go +7 -1
@@ -257,7 +257,13 @@ func (x *UnixSocketAddress) GetPropertyPathAsArray() []byte {
257257 if ptr == 0 {
258258 return nil
259259 }
260- return unsafe.Slice((*byte)(unsafe.Pointer(ptr)), 0)[:0]
260+ // GByteArray layout: { guint8 *data; guint len; }
261+ dataPtr := *(*uintptr)(unsafe.Pointer(ptr))
262+ length := *(*uint32)(unsafe.Pointer(ptr + unsafe.Sizeof(uintptr(0))))
263+ if length == 0 || dataPtr == 0 {
264+ return nil
265+ }
266+ return unsafe.Slice((*byte)(unsafe.Pointer(dataPtr)), length)
261267 }
262268
263269 // Creates a #GSocketAddressEnumerator for @connectable.
M v4/gio/gvolumemonitor.go +84 -36
@@ -793,10 +793,12 @@ func (c *VolumeMonitor) SetGoPointer(ptr uintptr) {
793793 }
794794
795795 // Emitted when a drive changes.
796-func (x *VolumeMonitor) ConnectDriveChanged(cb *func(VolumeMonitor, uintptr)) uint32 {
796+func (x *VolumeMonitor) ConnectDriveChanged(cb *func(VolumeMonitor, uintptr)) uint {
797797 cbPtr := uintptr(unsafe.Pointer(cb))
798798 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
799- return gobject.SignalConnect(x.GoPointer(), "drive-changed", cbRefPtr)
799+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-changed", cbRefPtr)
800+ glib.SaveHandlerMapping(handlerID, cbPtr)
801+ return handlerID
800802 }
801803
802804 fcb := func(clsPtr uintptr, DriveVarp uintptr) {
@@ -809,14 +811,18 @@ func (x *VolumeMonitor) ConnectDriveChanged(cb *func(VolumeMonitor, uintptr)) ui
809811 }
810812 cbRefPtr := purego.NewCallback(fcb)
811813 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
812- return gobject.SignalConnect(x.GoPointer(), "drive-changed", cbRefPtr)
814+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-changed", cbRefPtr)
815+ glib.SaveHandlerMapping(handlerID, cbPtr)
816+ return handlerID
813817 }
814818
815819 // Emitted when a drive is connected to the system.
816-func (x *VolumeMonitor) ConnectDriveConnected(cb *func(VolumeMonitor, uintptr)) uint32 {
820+func (x *VolumeMonitor) ConnectDriveConnected(cb *func(VolumeMonitor, uintptr)) uint {
817821 cbPtr := uintptr(unsafe.Pointer(cb))
818822 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
819- return gobject.SignalConnect(x.GoPointer(), "drive-connected", cbRefPtr)
823+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-connected", cbRefPtr)
824+ glib.SaveHandlerMapping(handlerID, cbPtr)
825+ return handlerID
820826 }
821827
822828 fcb := func(clsPtr uintptr, DriveVarp uintptr) {
@@ -829,14 +835,18 @@ func (x *VolumeMonitor) ConnectDriveConnected(cb *func(VolumeMonitor, uintptr))
829835 }
830836 cbRefPtr := purego.NewCallback(fcb)
831837 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
832- return gobject.SignalConnect(x.GoPointer(), "drive-connected", cbRefPtr)
838+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-connected", cbRefPtr)
839+ glib.SaveHandlerMapping(handlerID, cbPtr)
840+ return handlerID
833841 }
834842
835843 // Emitted when a drive is disconnected from the system.
836-func (x *VolumeMonitor) ConnectDriveDisconnected(cb *func(VolumeMonitor, uintptr)) uint32 {
844+func (x *VolumeMonitor) ConnectDriveDisconnected(cb *func(VolumeMonitor, uintptr)) uint {
837845 cbPtr := uintptr(unsafe.Pointer(cb))
838846 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
839- return gobject.SignalConnect(x.GoPointer(), "drive-disconnected", cbRefPtr)
847+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-disconnected", cbRefPtr)
848+ glib.SaveHandlerMapping(handlerID, cbPtr)
849+ return handlerID
840850 }
841851
842852 fcb := func(clsPtr uintptr, DriveVarp uintptr) {
@@ -849,14 +859,18 @@ func (x *VolumeMonitor) ConnectDriveDisconnected(cb *func(VolumeMonitor, uintptr
849859 }
850860 cbRefPtr := purego.NewCallback(fcb)
851861 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
852- return gobject.SignalConnect(x.GoPointer(), "drive-disconnected", cbRefPtr)
862+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-disconnected", cbRefPtr)
863+ glib.SaveHandlerMapping(handlerID, cbPtr)
864+ return handlerID
853865 }
854866
855867 // Emitted when the eject button is pressed on @drive.
856-func (x *VolumeMonitor) ConnectDriveEjectButton(cb *func(VolumeMonitor, uintptr)) uint32 {
868+func (x *VolumeMonitor) ConnectDriveEjectButton(cb *func(VolumeMonitor, uintptr)) uint {
857869 cbPtr := uintptr(unsafe.Pointer(cb))
858870 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
859- return gobject.SignalConnect(x.GoPointer(), "drive-eject-button", cbRefPtr)
871+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-eject-button", cbRefPtr)
872+ glib.SaveHandlerMapping(handlerID, cbPtr)
873+ return handlerID
860874 }
861875
862876 fcb := func(clsPtr uintptr, DriveVarp uintptr) {
@@ -869,14 +883,18 @@ func (x *VolumeMonitor) ConnectDriveEjectButton(cb *func(VolumeMonitor, uintptr)
869883 }
870884 cbRefPtr := purego.NewCallback(fcb)
871885 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
872- return gobject.SignalConnect(x.GoPointer(), "drive-eject-button", cbRefPtr)
886+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-eject-button", cbRefPtr)
887+ glib.SaveHandlerMapping(handlerID, cbPtr)
888+ return handlerID
873889 }
874890
875891 // Emitted when the stop button is pressed on @drive.
876-func (x *VolumeMonitor) ConnectDriveStopButton(cb *func(VolumeMonitor, uintptr)) uint32 {
892+func (x *VolumeMonitor) ConnectDriveStopButton(cb *func(VolumeMonitor, uintptr)) uint {
877893 cbPtr := uintptr(unsafe.Pointer(cb))
878894 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
879- return gobject.SignalConnect(x.GoPointer(), "drive-stop-button", cbRefPtr)
895+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-stop-button", cbRefPtr)
896+ glib.SaveHandlerMapping(handlerID, cbPtr)
897+ return handlerID
880898 }
881899
882900 fcb := func(clsPtr uintptr, DriveVarp uintptr) {
@@ -889,14 +907,18 @@ func (x *VolumeMonitor) ConnectDriveStopButton(cb *func(VolumeMonitor, uintptr))
889907 }
890908 cbRefPtr := purego.NewCallback(fcb)
891909 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
892- return gobject.SignalConnect(x.GoPointer(), "drive-stop-button", cbRefPtr)
910+ handlerID := gobject.SignalConnect(x.GoPointer(), "drive-stop-button", cbRefPtr)
911+ glib.SaveHandlerMapping(handlerID, cbPtr)
912+ return handlerID
893913 }
894914
895915 // Emitted when a mount is added.
896-func (x *VolumeMonitor) ConnectMountAdded(cb *func(VolumeMonitor, uintptr)) uint32 {
916+func (x *VolumeMonitor) ConnectMountAdded(cb *func(VolumeMonitor, uintptr)) uint {
897917 cbPtr := uintptr(unsafe.Pointer(cb))
898918 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
899- return gobject.SignalConnect(x.GoPointer(), "mount-added", cbRefPtr)
919+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-added", cbRefPtr)
920+ glib.SaveHandlerMapping(handlerID, cbPtr)
921+ return handlerID
900922 }
901923
902924 fcb := func(clsPtr uintptr, MountVarp uintptr) {
@@ -909,14 +931,18 @@ func (x *VolumeMonitor) ConnectMountAdded(cb *func(VolumeMonitor, uintptr)) uint
909931 }
910932 cbRefPtr := purego.NewCallback(fcb)
911933 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
912- return gobject.SignalConnect(x.GoPointer(), "mount-added", cbRefPtr)
934+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-added", cbRefPtr)
935+ glib.SaveHandlerMapping(handlerID, cbPtr)
936+ return handlerID
913937 }
914938
915939 // Emitted when a mount changes.
916-func (x *VolumeMonitor) ConnectMountChanged(cb *func(VolumeMonitor, uintptr)) uint32 {
940+func (x *VolumeMonitor) ConnectMountChanged(cb *func(VolumeMonitor, uintptr)) uint {
917941 cbPtr := uintptr(unsafe.Pointer(cb))
918942 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
919- return gobject.SignalConnect(x.GoPointer(), "mount-changed", cbRefPtr)
943+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-changed", cbRefPtr)
944+ glib.SaveHandlerMapping(handlerID, cbPtr)
945+ return handlerID
920946 }
921947
922948 fcb := func(clsPtr uintptr, MountVarp uintptr) {
@@ -929,17 +955,21 @@ func (x *VolumeMonitor) ConnectMountChanged(cb *func(VolumeMonitor, uintptr)) ui
929955 }
930956 cbRefPtr := purego.NewCallback(fcb)
931957 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
932- return gobject.SignalConnect(x.GoPointer(), "mount-changed", cbRefPtr)
958+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-changed", cbRefPtr)
959+ glib.SaveHandlerMapping(handlerID, cbPtr)
960+ return handlerID
933961 }
934962
935963 // May be emitted when a mount is about to be removed.
936964 //
937965 // This signal depends on the backend and is only emitted if
938966 // GIO was used to unmount.
939-func (x *VolumeMonitor) ConnectMountPreUnmount(cb *func(VolumeMonitor, uintptr)) uint32 {
967+func (x *VolumeMonitor) ConnectMountPreUnmount(cb *func(VolumeMonitor, uintptr)) uint {
940968 cbPtr := uintptr(unsafe.Pointer(cb))
941969 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
942- return gobject.SignalConnect(x.GoPointer(), "mount-pre-unmount", cbRefPtr)
970+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-pre-unmount", cbRefPtr)
971+ glib.SaveHandlerMapping(handlerID, cbPtr)
972+ return handlerID
943973 }
944974
945975 fcb := func(clsPtr uintptr, MountVarp uintptr) {
@@ -952,14 +982,18 @@ func (x *VolumeMonitor) ConnectMountPreUnmount(cb *func(VolumeMonitor, uintptr))
952982 }
953983 cbRefPtr := purego.NewCallback(fcb)
954984 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
955- return gobject.SignalConnect(x.GoPointer(), "mount-pre-unmount", cbRefPtr)
985+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-pre-unmount", cbRefPtr)
986+ glib.SaveHandlerMapping(handlerID, cbPtr)
987+ return handlerID
956988 }
957989
958990 // Emitted when a mount is removed.
959-func (x *VolumeMonitor) ConnectMountRemoved(cb *func(VolumeMonitor, uintptr)) uint32 {
991+func (x *VolumeMonitor) ConnectMountRemoved(cb *func(VolumeMonitor, uintptr)) uint {
960992 cbPtr := uintptr(unsafe.Pointer(cb))
961993 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
962- return gobject.SignalConnect(x.GoPointer(), "mount-removed", cbRefPtr)
994+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-removed", cbRefPtr)
995+ glib.SaveHandlerMapping(handlerID, cbPtr)
996+ return handlerID
963997 }
964998
965999 fcb := func(clsPtr uintptr, MountVarp uintptr) {
@@ -972,14 +1006,18 @@ func (x *VolumeMonitor) ConnectMountRemoved(cb *func(VolumeMonitor, uintptr)) ui
9721006 }
9731007 cbRefPtr := purego.NewCallback(fcb)
9741008 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
975- return gobject.SignalConnect(x.GoPointer(), "mount-removed", cbRefPtr)
1009+ handlerID := gobject.SignalConnect(x.GoPointer(), "mount-removed", cbRefPtr)
1010+ glib.SaveHandlerMapping(handlerID, cbPtr)
1011+ return handlerID
9761012 }
9771013
9781014 // Emitted when a mountable volume is added to the system.
979-func (x *VolumeMonitor) ConnectVolumeAdded(cb *func(VolumeMonitor, uintptr)) uint32 {
1015+func (x *VolumeMonitor) ConnectVolumeAdded(cb *func(VolumeMonitor, uintptr)) uint {
9801016 cbPtr := uintptr(unsafe.Pointer(cb))
9811017 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
982- return gobject.SignalConnect(x.GoPointer(), "volume-added", cbRefPtr)
1018+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-added", cbRefPtr)
1019+ glib.SaveHandlerMapping(handlerID, cbPtr)
1020+ return handlerID
9831021 }
9841022
9851023 fcb := func(clsPtr uintptr, VolumeVarp uintptr) {
@@ -992,14 +1030,18 @@ func (x *VolumeMonitor) ConnectVolumeAdded(cb *func(VolumeMonitor, uintptr)) uin
9921030 }
9931031 cbRefPtr := purego.NewCallback(fcb)
9941032 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
995- return gobject.SignalConnect(x.GoPointer(), "volume-added", cbRefPtr)
1033+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-added", cbRefPtr)
1034+ glib.SaveHandlerMapping(handlerID, cbPtr)
1035+ return handlerID
9961036 }
9971037
9981038 // Emitted when mountable volume is changed.
999-func (x *VolumeMonitor) ConnectVolumeChanged(cb *func(VolumeMonitor, uintptr)) uint32 {
1039+func (x *VolumeMonitor) ConnectVolumeChanged(cb *func(VolumeMonitor, uintptr)) uint {
10001040 cbPtr := uintptr(unsafe.Pointer(cb))
10011041 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1002- return gobject.SignalConnect(x.GoPointer(), "volume-changed", cbRefPtr)
1042+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-changed", cbRefPtr)
1043+ glib.SaveHandlerMapping(handlerID, cbPtr)
1044+ return handlerID
10031045 }
10041046
10051047 fcb := func(clsPtr uintptr, VolumeVarp uintptr) {
@@ -1012,14 +1054,18 @@ func (x *VolumeMonitor) ConnectVolumeChanged(cb *func(VolumeMonitor, uintptr)) u
10121054 }
10131055 cbRefPtr := purego.NewCallback(fcb)
10141056 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1015- return gobject.SignalConnect(x.GoPointer(), "volume-changed", cbRefPtr)
1057+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-changed", cbRefPtr)
1058+ glib.SaveHandlerMapping(handlerID, cbPtr)
1059+ return handlerID
10161060 }
10171061
10181062 // Emitted when a mountable volume is removed from the system.
1019-func (x *VolumeMonitor) ConnectVolumeRemoved(cb *func(VolumeMonitor, uintptr)) uint32 {
1063+func (x *VolumeMonitor) ConnectVolumeRemoved(cb *func(VolumeMonitor, uintptr)) uint {
10201064 cbPtr := uintptr(unsafe.Pointer(cb))
10211065 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1022- return gobject.SignalConnect(x.GoPointer(), "volume-removed", cbRefPtr)
1066+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-removed", cbRefPtr)
1067+ glib.SaveHandlerMapping(handlerID, cbPtr)
1068+ return handlerID
10231069 }
10241070
10251071 fcb := func(clsPtr uintptr, VolumeVarp uintptr) {
@@ -1032,7 +1078,9 @@ func (x *VolumeMonitor) ConnectVolumeRemoved(cb *func(VolumeMonitor, uintptr)) u
10321078 }
10331079 cbRefPtr := purego.NewCallback(fcb)
10341080 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1035- return gobject.SignalConnect(x.GoPointer(), "volume-removed", cbRefPtr)
1081+ handlerID := gobject.SignalConnect(x.GoPointer(), "volume-removed", cbRefPtr)
1082+ glib.SaveHandlerMapping(handlerID, cbPtr)
1083+ return handlerID
10361084 }
10371085
10381086 var xVolumeMonitorAdoptOrphanMount func(uintptr) uintptr
M v4/glib/ggettext.go +2 -2
@@ -70,7 +70,7 @@ func Dgettext(DomainVar *string, MsgidVar string) string {
7070 return cret
7171 }
7272
73-var xDngettext func(uintptr, string, string, uint32) string
73+var xDngettext func(uintptr, string, string, uint) string
7474
7575 // This function is a wrapper of dngettext() which does not translate
7676 // the message if the default domain as set with textdomain() has no
@@ -78,7 +78,7 @@ var xDngettext func(uintptr, string, string, uint32) string
7878 //
7979 // See g_dgettext() for details of how this differs from dngettext()
8080 // proper.
81-func Dngettext(DomainVar *string, MsgidVar string, MsgidPluralVar string, NVar uint32) string {
81+func Dngettext(DomainVar *string, MsgidVar string, MsgidPluralVar string, NVar uint) string {
8282
8383 DomainVarPtr, DomainVarBytes := core.NullableStringToPtr(DomainVar)
8484
M v4/glib/ghook.go +4 -4
@@ -46,7 +46,7 @@ type Hook struct {
4646
4747 RefCount uint
4848
49- HookId uint32
49+ HookId uint
5050
5151 Flags uint
5252
@@ -74,7 +74,7 @@ func (x *Hook) CompareIds(SiblingVar *Hook) int {
7474 type HookList struct {
7575 _ structs.HostLayout
7676
77- SeqId uint32
77+ SeqId uint
7878
7979 HookSize uint
8080
@@ -202,10 +202,10 @@ const (
202202 GHookFlagMaskValue HookFlagMask = 15
203203 )
204204
205-var xHookDestroy func(*HookList, uint32) bool
205+var xHookDestroy func(*HookList, uint) bool
206206
207207 // Destroys a #GHook, given its ID.
208-func HookDestroy(HookListVar *HookList, HookIdVar uint32) bool {
208+func HookDestroy(HookListVar *HookList, HookIdVar uint) bool {
209209
210210 cret := xHookDestroy(HookListVar, HookIdVar)
211211
M v4/glib/gstring.go +1 -5
@@ -80,11 +80,7 @@ var xNewStringTake func(uintptr) *String
8080 // allocated and will eventually be freed with g_free().
8181 func NewStringTake(InitVar *string) *String {
8282
83- InitVarPtr, InitVarBytes := core.NullableStringToPtr(InitVar)
84-
85- cret := xNewStringTake(InitVarPtr)
86-
87- runtime.KeepAlive(InitVarBytes)
83+ cret := xNewStringTake(core.GStrdupNullable(InitVar))
8884
8985 return cret
9086 }
M v4/glib/gstrvbuilder.go +2 -2
@@ -106,7 +106,7 @@ func (x *StrvBuilder) Ref() *StrvBuilder {
106106 return cret
107107 }
108108
109-var xStrvBuilderTake func(uintptr, string)
109+var xStrvBuilderTake func(uintptr, uintptr)
110110
111111 // Add a string to the end of the array. After @value belongs to the
112112 // #GStrvBuilder and may no longer be modified by the caller.
@@ -114,7 +114,7 @@ var xStrvBuilderTake func(uintptr, string)
114114 // Since 2.80
115115 func (x *StrvBuilder) Take(ValueVar string) {
116116
117- xStrvBuilderTake(x.GoPointer(), ValueVar)
117+ xStrvBuilderTake(x.GoPointer(), core.GStrdup(ValueVar))
118118
119119 }
120120
M v4/glib/gthread.go +7 -7
@@ -1830,11 +1830,11 @@ func (x *ThreadFunctions) GetPrivateSet() func(*Private, uintptr) {
18301830
18311831 // OverrideThreadCreate sets the "thread_create" callback function.
18321832 // virtual function pointer for g_thread_create()
1833-func (x *ThreadFunctions) OverrideThreadCreate(cb func(*ThreadFunc, uintptr, uint32, bool, bool, ThreadPriority, uintptr)) {
1833+func (x *ThreadFunctions) OverrideThreadCreate(cb func(*ThreadFunc, uintptr, uint, bool, bool, ThreadPriority, uintptr)) {
18341834 if cb == nil {
18351835 x.xThreadCreate = 0
18361836 } else {
1837- x.xThreadCreate = purego.NewCallback(func(FuncVarp uintptr, DataVarp uintptr, StackSizeVarp uint32, JoinableVarp bool, BoundVarp bool, PriorityVarp ThreadPriority, ThreadVarp uintptr) {
1837+ x.xThreadCreate = purego.NewCallback(func(FuncVarp uintptr, DataVarp uintptr, StackSizeVarp uint, JoinableVarp bool, BoundVarp bool, PriorityVarp ThreadPriority, ThreadVarp uintptr) {
18381838 cb((*ThreadFunc)(unsafe.Pointer(FuncVarp)), DataVarp, StackSizeVarp, JoinableVarp, BoundVarp, PriorityVarp, ThreadVarp)
18391839 })
18401840 }
@@ -1842,13 +1842,13 @@ func (x *ThreadFunctions) OverrideThreadCreate(cb func(*ThreadFunc, uintptr, uin
18421842
18431843 // GetThreadCreate gets the "thread_create" callback function.
18441844 // virtual function pointer for g_thread_create()
1845-func (x *ThreadFunctions) GetThreadCreate() func(*ThreadFunc, uintptr, uint32, bool, bool, ThreadPriority, uintptr) {
1845+func (x *ThreadFunctions) GetThreadCreate() func(*ThreadFunc, uintptr, uint, bool, bool, ThreadPriority, uintptr) {
18461846 if x.xThreadCreate == 0 {
18471847 return nil
18481848 }
1849- var rawCallback func(FuncVarp uintptr, DataVarp uintptr, StackSizeVarp uint32, JoinableVarp bool, BoundVarp bool, PriorityVarp ThreadPriority, ThreadVarp uintptr)
1849+ var rawCallback func(FuncVarp uintptr, DataVarp uintptr, StackSizeVarp uint, JoinableVarp bool, BoundVarp bool, PriorityVarp ThreadPriority, ThreadVarp uintptr)
18501850 purego.RegisterFunc(&rawCallback, x.xThreadCreate)
1851- return func(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority, ThreadVar uintptr) {
1851+ return func(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority, ThreadVar uintptr) {
18521852 rawCallback(NewCallback(FuncVar), DataVar, StackSizeVar, JoinableVar, BoundVar, PriorityVar, ThreadVar)
18531853 }
18541854 }
@@ -2314,10 +2314,10 @@ func ThreadCreate(FuncVar *ThreadFunc, DataVar uintptr, JoinableVar bool) (*Thre
23142314
23152315 }
23162316
2317-var xThreadCreateFull func(uintptr, uintptr, uint32, bool, bool, ThreadPriority, **Error) *Thread
2317+var xThreadCreateFull func(uintptr, uintptr, uint, bool, bool, ThreadPriority, **Error) *Thread
23182318
23192319 // This function creates a new thread.
2320-func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint32, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {
2320+func ThreadCreateFull(FuncVar *ThreadFunc, DataVar uintptr, StackSizeVar uint, JoinableVar bool, BoundVar bool, PriorityVar ThreadPriority) (*Thread, error) {
23212321 var cerr *Error
23222322
23232323 var FuncVarRef uintptr
M v4/glib/gtimer.go +4 -4
@@ -42,7 +42,7 @@ func (x *Timer) Destroy() {
4242
4343 }
4444
45-var xTimerElapsed func(uintptr, uint32) float64
45+var xTimerElapsed func(uintptr, uint) float64
4646
4747 // If @timer has been started but not stopped, obtains the time since
4848 // the timer was started. If @timer has been stopped, obtains the
@@ -50,7 +50,7 @@ var xTimerElapsed func(uintptr, uint32) float64
5050 // stopped. The return value is the number of seconds elapsed,
5151 // including any fractional part. The @microseconds out parameter is
5252 // essentially useless.
53-func (x *Timer) Elapsed(MicrosecondsVar uint32) float64 {
53+func (x *Timer) Elapsed(MicrosecondsVar uint) float64 {
5454
5555 cret := xTimerElapsed(x.GoPointer(), MicrosecondsVar)
5656
@@ -132,7 +132,7 @@ func TimeValFromIso8601(IsoDateVar string, TimeVar *TimeVal) bool {
132132 return cret
133133 }
134134
135-var xUsleep func(uint32)
135+var xUsleep func(uint)
136136
137137 // Pauses the current thread for the given number of microseconds.
138138 //
@@ -140,7 +140,7 @@ var xUsleep func(uint32)
140140 // %G_USEC_PER_SEC macro). g_usleep() may have limited precision,
141141 // depending on hardware and operating system; don't rely on the exact
142142 // length of the sleep.
143-func Usleep(MicrosecondsVar uint32) {
143+func Usleep(MicrosecondsVar uint) {
144144
145145 xUsleep(MicrosecondsVar)
146146
M v4/glib/gtypes.go +4 -4
@@ -106,20 +106,20 @@ type TranslateFunc func(string, uintptr) string
106106 type TimeVal struct {
107107 _ structs.HostLayout
108108
109- TvSec int32
109+ TvSec int
110110
111- TvUsec int32
111+ TvUsec int
112112 }
113113
114114 func (x *TimeVal) GoPointer() uintptr {
115115 return uintptr(unsafe.Pointer(x))
116116 }
117117
118-var xTimeValAdd func(uintptr, int32)
118+var xTimeValAdd func(uintptr, int)
119119
120120 // Adds the given number of microseconds to @time_. @microseconds can
121121 // also be negative to decrease the value of @time_.
122-func (x *TimeVal) Add(MicrosecondsVar int32) {
122+func (x *TimeVal) Add(MicrosecondsVar int) {
123123
124124 xTimeValAdd(x.GoPointer(), MicrosecondsVar)
125125
M v4/glib/gunicode.go +22 -22
@@ -615,12 +615,12 @@ const (
615615 GUnicodeSpaceSeparatorValue UnicodeType = 29
616616 )
617617
618-var xUcs4ToUtf16 func([]uint32, int32, *int32, *int32, **Error) uint16
618+var xUcs4ToUtf16 func([]uint32, int, *int, *int, **Error) uint16
619619
620620 // Convert a string from UCS-4 to UTF-16.
621621 //
622622 // A nul character (U+0000) will be added to the result after the converted text.
623-func Ucs4ToUtf16(StrVar []uint32, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (uint16, error) {
623+func Ucs4ToUtf16(StrVar []uint32, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (uint16, error) {
624624 var cerr *Error
625625
626626 cret := xUcs4ToUtf16(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
@@ -632,13 +632,13 @@ func Ucs4ToUtf16(StrVar []uint32, LenVar int32, ItemsReadVar *int32, ItemsWritte
632632
633633 }
634634
635-var xUcs4ToUtf8 func([]uint32, int32, *int32, *int32, **Error) string
635+var xUcs4ToUtf8 func([]uint32, int, *int, *int, **Error) string
636636
637637 // Convert a string from a 32-bit fixed width representation as UCS-4.
638638 // to UTF-8.
639639 //
640640 // The result will be terminated with a nul byte.
641-func Ucs4ToUtf8(StrVar []uint32, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (string, error) {
641+func Ucs4ToUtf8(StrVar []uint32, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (string, error) {
642642 var cerr *Error
643643
644644 cret := xUcs4ToUtf8(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
@@ -1164,12 +1164,12 @@ func UnicodeScriptToIso15924(ScriptVar UnicodeScript) uint32 {
11641164 return cret
11651165 }
11661166
1167-var xUtf16ToUcs4 func([]uint16, int32, *int32, *int32, **Error) uint32
1167+var xUtf16ToUcs4 func([]uint16, int, *int, *int, **Error) uint32
11681168
11691169 // Convert a string from UTF-16 to UCS-4.
11701170 //
11711171 // The result will be nul-terminated.
1172-func Utf16ToUcs4(StrVar []uint16, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (uint32, error) {
1172+func Utf16ToUcs4(StrVar []uint16, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (uint32, error) {
11731173 var cerr *Error
11741174
11751175 cret := xUtf16ToUcs4(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
@@ -1181,7 +1181,7 @@ func Utf16ToUcs4(StrVar []uint16, LenVar int32, ItemsReadVar *int32, ItemsWritte
11811181
11821182 }
11831183
1184-var xUtf16ToUtf8 func([]uint16, int32, *int32, *int32, **Error) string
1184+var xUtf16ToUtf8 func([]uint16, int, *int, *int, **Error) string
11851185
11861186 // Convert a string from UTF-16 to UTF-8.
11871187 //
@@ -1197,7 +1197,7 @@ var xUtf16ToUtf8 func([]uint16, int32, *int32, *int32, **Error) string
11971197 // validation done by this function is to ensure that the input can
11981198 // be correctly interpreted as UTF-16, i.e. it doesn’t contain
11991199 // unpaired surrogates or partial character sequences.
1200-func Utf16ToUtf8(StrVar []uint16, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (string, error) {
1200+func Utf16ToUtf8(StrVar []uint16, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (string, error) {
12011201 var cerr *Error
12021202
12031203 cret := xUtf16ToUtf8(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
@@ -1418,7 +1418,7 @@ func Utf8Normalize(StrVar string, LenVar int, ModeVar NormalizeMode) string {
14181418 return cret
14191419 }
14201420
1421-var xUtf8OffsetToPointer func(string, int32) string
1421+var xUtf8OffsetToPointer func(string, int) string
14221422
14231423 // Converts from an integer character offset to a pointer to a position
14241424 // within the string.
@@ -1433,21 +1433,21 @@ var xUtf8OffsetToPointer func(string, int32) string
14331433 // before calling that function. Call [func@GLib.utf8_strlen] when unsure.
14341434 // This limitation exists as this function is called frequently during
14351435 // text rendering and therefore has to be as fast as possible.
1436-func Utf8OffsetToPointer(StrVar string, OffsetVar int32) string {
1436+func Utf8OffsetToPointer(StrVar string, OffsetVar int) string {
14371437
14381438 cret := xUtf8OffsetToPointer(StrVar, OffsetVar)
14391439
14401440 return cret
14411441 }
14421442
1443-var xUtf8PointerToOffset func(string, string) int32
1443+var xUtf8PointerToOffset func(string, string) int
14441444
14451445 // Converts from a pointer to position within a string to an integer
14461446 // character offset.
14471447 //
14481448 // Since 2.10, this function allows @pos to be before @str, and returns
14491449 // a negative offset in this case.
1450-func Utf8PointerToOffset(StrVar string, PosVar string) int32 {
1450+func Utf8PointerToOffset(StrVar string, PosVar string) int {
14511451
14521452 cret := xUtf8PointerToOffset(StrVar, PosVar)
14531453
@@ -1496,12 +1496,12 @@ func Utf8Strdown(StrVar string, LenVar int) string {
14961496 return cret
14971497 }
14981498
1499-var xUtf8Strlen func(string, int) int32
1499+var xUtf8Strlen func(string, int) int
15001500
15011501 // Computes the length of the string in characters, not including
15021502 // the terminating nul character. If the @max’th byte falls in the
15031503 // middle of a character, the last (partial) character is not counted.
1504-func Utf8Strlen(PVar string, MaxVar int) int32 {
1504+func Utf8Strlen(PVar string, MaxVar int) int {
15051505
15061506 cret := xUtf8Strlen(PVar, MaxVar)
15071507
@@ -1576,27 +1576,27 @@ func Utf8Strup(StrVar string, LenVar int) string {
15761576 return cret
15771577 }
15781578
1579-var xUtf8Substring func(string, int32, int32) string
1579+var xUtf8Substring func(string, int, int) string
15801580
15811581 // Copies a substring out of a UTF-8 encoded string.
15821582 // The substring will contain @end_pos - @start_pos characters.
15831583 //
15841584 // Since GLib 2.72, `-1` can be passed to @end_pos to indicate the
15851585 // end of the string.
1586-func Utf8Substring(StrVar string, StartPosVar int32, EndPosVar int32) string {
1586+func Utf8Substring(StrVar string, StartPosVar int, EndPosVar int) string {
15871587
15881588 cret := xUtf8Substring(StrVar, StartPosVar, EndPosVar)
15891589
15901590 return cret
15911591 }
15921592
1593-var xUtf8ToUcs4 func(string, int32, *int32, *int32, **Error) uint32
1593+var xUtf8ToUcs4 func(string, int, *int, *int, **Error) uint32
15941594
15951595 // Convert a string from UTF-8 to a 32-bit fixed width representation as UCS-4.
15961596 //
15971597 // A trailing nul character (U+0000) will be added to the string after the
15981598 // converted text.
1599-func Utf8ToUcs4(StrVar string, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (uint32, error) {
1599+func Utf8ToUcs4(StrVar string, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (uint32, error) {
16001600 var cerr *Error
16011601
16021602 cret := xUtf8ToUcs4(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
@@ -1608,7 +1608,7 @@ func Utf8ToUcs4(StrVar string, LenVar int32, ItemsReadVar *int32, ItemsWrittenVa
16081608
16091609 }
16101610
1611-var xUtf8ToUcs4Fast func(string, int32, *int32) uint32
1611+var xUtf8ToUcs4Fast func(string, int, *int) uint32
16121612
16131613 // Convert a string from UTF-8 to a 32-bit fixed width
16141614 // representation as UCS-4, assuming valid UTF-8 input.
@@ -1616,19 +1616,19 @@ var xUtf8ToUcs4Fast func(string, int32, *int32) uint32
16161616 // This function is roughly twice as fast as [func@GLib.utf8_to_ucs4]
16171617 // but does no error checking on the input. A trailing nul character (U+0000)
16181618 // will be added to the string after the converted text.
1619-func Utf8ToUcs4Fast(StrVar string, LenVar int32, ItemsWrittenVar *int32) uint32 {
1619+func Utf8ToUcs4Fast(StrVar string, LenVar int, ItemsWrittenVar *int) uint32 {
16201620
16211621 cret := xUtf8ToUcs4Fast(StrVar, LenVar, ItemsWrittenVar)
16221622
16231623 return cret
16241624 }
16251625
1626-var xUtf8ToUtf16 func(string, int32, *int32, *int32, **Error) uint16
1626+var xUtf8ToUtf16 func(string, int, *int, *int, **Error) uint16
16271627
16281628 // Convert a string from UTF-8 to UTF-16.
16291629 //
16301630 // A nul character (U+0000) will be added to the result after the converted text.
1631-func Utf8ToUtf16(StrVar string, LenVar int32, ItemsReadVar *int32, ItemsWrittenVar *int32) (uint16, error) {
1631+func Utf8ToUtf16(StrVar string, LenVar int, ItemsReadVar *int, ItemsWrittenVar *int) (uint16, error) {
16321632 var cerr *Error
16331633
16341634 cret := xUtf8ToUtf16(StrVar, LenVar, ItemsReadVar, ItemsWrittenVar, &cerr)
M v4/glib/gutils.go +10 -10
@@ -141,38 +141,38 @@ func Atexit(FuncVar *VoidFunc) {
141141
142142 }
143143
144-var xBitNthLsf func(uint32, int) int
144+var xBitNthLsf func(uint, int) int
145145
146146 // Find the position of the first bit set in @mask, searching
147147 // from (but not including) @nth_bit upwards. Bits are numbered
148148 // from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
149149 // usually). To start searching from the 0th bit, set @nth_bit to -1.
150-func BitNthLsf(MaskVar uint32, NthBitVar int) int {
150+func BitNthLsf(MaskVar uint, NthBitVar int) int {
151151
152152 cret := xBitNthLsf(MaskVar, NthBitVar)
153153
154154 return cret
155155 }
156156
157-var xBitNthMsf func(uint32, int) int
157+var xBitNthMsf func(uint, int) int
158158
159159 // Find the position of the first bit set in @mask, searching
160160 // from (but not including) @nth_bit downwards. Bits are numbered
161161 // from 0 (least significant) to sizeof(#gulong) * 8 - 1 (31 or 63,
162162 // usually). To start searching from the last bit, set @nth_bit to
163163 // -1 or GLIB_SIZEOF_LONG * 8.
164-func BitNthMsf(MaskVar uint32, NthBitVar int) int {
164+func BitNthMsf(MaskVar uint, NthBitVar int) int {
165165
166166 cret := xBitNthMsf(MaskVar, NthBitVar)
167167
168168 return cret
169169 }
170170
171-var xBitStorage func(uint32) uint
171+var xBitStorage func(uint) uint
172172
173173 // Gets the number of bits used to hold @number,
174174 // e.g. if @number is 4, 3 bits are needed.
175-func BitStorage(NumberVar uint32) uint {
175+func BitStorage(NumberVar uint) uint {
176176
177177 cret := xBitStorage(NumberVar)
178178
@@ -718,7 +718,7 @@ func SetPrgname(PrgnameVar string) {
718718
719719 }
720720
721-var xSnprintf func(string, uint32, string, ...interface{}) int
721+var xSnprintf func(string, uint, string, ...interface{}) int
722722
723723 // A safer form of the standard sprintf() function. The output is guaranteed
724724 // to not exceed @n characters (including the terminating nul character), so
@@ -737,14 +737,14 @@ var xSnprintf func(string, uint32, string, ...interface{}) int
737737 //
738738 // The format string may contain positional parameters, as specified in
739739 // the Single Unix Specification.
740-func Snprintf(StringVar string, NVar uint32, FormatVar string, varArgs ...interface{}) int {
740+func Snprintf(StringVar string, NVar uint, FormatVar string, varArgs ...interface{}) int {
741741
742742 cret := xSnprintf(StringVar, NVar, FormatVar, varArgs...)
743743
744744 return cret
745745 }
746746
747-var xVsnprintf func(string, uint32, string, []interface{}) int
747+var xVsnprintf func(string, uint, string, []interface{}) int
748748
749749 // A safer form of the standard `vsprintf()` function. The output is guaranteed
750750 // to not exceed @n characters (including the terminating nul character), so
@@ -763,7 +763,7 @@ var xVsnprintf func(string, uint32, string, []interface{}) int
763763 //
764764 // The format string may contain positional parameters, as specified in
765765 // the Single Unix Specification.
766-func Vsnprintf(StringVar string, NVar uint32, FormatVar string, ArgsVar []interface{}) int {
766+func Vsnprintf(StringVar string, NVar uint, FormatVar string, ArgsVar []interface{}) int {
767767
768768 cret := xVsnprintf(StringVar, NVar, FormatVar, ArgsVar)
769769
M v4/glib/more.go +25 -4
@@ -11,11 +11,13 @@ import (
1111
1212 var callbacks = struct {
1313 sync.RWMutex
14- refs map[uintptr]uintptr
15- closures map[uintptr]interface{}
14+ refs map[uintptr]uintptr
15+ closures map[uintptr]interface{}
16+ handlerToCallback map[uint]uintptr
1617 }{
17- refs: make(map[uintptr]uintptr),
18- closures: make(map[uintptr]interface{}),
18+ refs: make(map[uintptr]uintptr),
19+ closures: make(map[uintptr]interface{}),
20+ handlerToCallback: make(map[uint]uintptr),
1921 }
2022
2123 // GetCallback retrives a callback reference by value.
@@ -55,6 +57,25 @@ func RemoveCallback(cbPtr uintptr) {
5557 callbacks.Unlock()
5658 }
5759
60+// SaveHandlerMapping records a signal handler ID → callback pointer mapping
61+// so that DisconnectSignal can clean up the callback registry.
62+func SaveHandlerMapping(handlerID uint, cbPtr uintptr) {
63+ callbacks.Lock()
64+ callbacks.handlerToCallback[handlerID] = cbPtr
65+ callbacks.Unlock()
66+}
67+
68+// RemoveCallbackByHandler removes a callback from the registry using a signal handler ID.
69+func RemoveCallbackByHandler(handlerID uint) {
70+ callbacks.Lock()
71+ if cbPtr, ok := callbacks.handlerToCallback[handlerID]; ok {
72+ delete(callbacks.refs, cbPtr)
73+ delete(callbacks.closures, cbPtr)
74+ delete(callbacks.handlerToCallback, handlerID)
75+ }
76+ callbacks.Unlock()
77+}
78+
5879 // UnrefCallbackValue unreferences the provided callback by reflect.value to free a purego slot
5980 //
6081 // NOTE: Windows does not support unreferencing callbacks, so on that platform this operation is
M v4/gobject/gobject.go +16 -8
@@ -1000,7 +1000,7 @@ func ClearObject(ObjectPtrVar **Object) {
10001000
10011001 }
10021002
1003-var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFlags) uint32
1003+var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFlags) uint
10041004
10051005 // This is similar to g_signal_connect_data(), but uses a closure which
10061006 // ensures that the @gobject stays alive during the call to @c_handler
@@ -1018,7 +1018,7 @@ var xSignalConnectObject func(*TypeInstance, string, uintptr, uintptr, ConnectFl
10181018 //
10191019 // Refer to the [signals documentation](signals.html) for more
10201020 // details.
1021-func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint32 {
1021+func SignalConnectObject(InstanceVar *TypeInstance, DetailedSignalVar string, CHandlerVar *Callback, GobjectVar *Object, ConnectFlagsVar ConnectFlags) uint {
10221022
10231023 var CHandlerVarRef uintptr
10241024 if CHandlerVar != nil {
@@ -2359,10 +2359,12 @@ func (c *Object) SetGoPointer(ptr uintptr) {
23592359 // It is important to note that you must use
23602360 // [canonical parameter names][class@GObject.ParamSpec#parameter-names] as
23612361 // detail strings for the notify signal.
2362-func (x *Object) ConnectNotify(cb *func(Object, uintptr)) uint32 {
2362+func (x *Object) ConnectNotify(cb *func(Object, uintptr)) uint {
23632363 cbPtr := uintptr(unsafe.Pointer(cb))
23642364 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2365- return SignalConnect(x.GoPointer(), "notify", cbRefPtr)
2365+ handlerID := SignalConnect(x.GoPointer(), "notify", cbRefPtr)
2366+ glib.SaveHandlerMapping(handlerID, cbPtr)
2367+ return handlerID
23662368 }
23672369
23682370 fcb := func(clsPtr uintptr, PspecVarp uintptr) {
@@ -2375,16 +2377,20 @@ func (x *Object) ConnectNotify(cb *func(Object, uintptr)) uint32 {
23752377 }
23762378 cbRefPtr := purego.NewCallback(fcb)
23772379 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2378- return SignalConnect(x.GoPointer(), "notify", cbRefPtr)
2380+ handlerID := SignalConnect(x.GoPointer(), "notify", cbRefPtr)
2381+ glib.SaveHandlerMapping(handlerID, cbPtr)
2382+ return handlerID
23792383 }
23802384
23812385 // ConnectNotifyWithDetail connects to the "notify" signal with a detail string.
23822386 // The detail is appended as "notify::<detail>".
2383-func (x *Object) ConnectNotifyWithDetail(detail string, cb *func(Object, uintptr)) uint32 {
2387+func (x *Object) ConnectNotifyWithDetail(detail string, cb *func(Object, uintptr)) uint {
23842388 cbPtr := uintptr(unsafe.Pointer(cb))
23852389 signalName := fmt.Sprintf("notify::%s", detail)
23862390 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2387- return SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2391+ handlerID := SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2392+ glib.SaveHandlerMapping(handlerID, cbPtr)
2393+ return handlerID
23882394 }
23892395
23902396 fcb := func(clsPtr uintptr, PspecVarp uintptr) {
@@ -2397,7 +2403,9 @@ func (x *Object) ConnectNotifyWithDetail(detail string, cb *func(Object, uintptr
23972403 }
23982404 cbRefPtr := purego.NewCallback(fcb)
23992405 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2400- return SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2406+ handlerID := SignalConnect(x.GoPointer(), signalName, cbRefPtr)
2407+ glib.SaveHandlerMapping(handlerID, cbPtr)
2408+ return handlerID
24012409 }
24022410
24032411 var xObjectCompatControl func(uint, uintptr) uint
M v4/gobject/gparamspecs.go +4 -4
@@ -277,12 +277,12 @@ func NewParamSpecInt64(NameVar string, NickVar *string, BlurbVar *string, Minimu
277277 return cls
278278 }
279279
280-var xNewParamSpecLong func(string, uintptr, uintptr, int32, int32, int32, ParamFlags) uintptr
280+var xNewParamSpecLong func(string, uintptr, uintptr, int, int, int, ParamFlags) uintptr
281281
282282 // Creates a new #GParamSpecLong instance specifying a %G_TYPE_LONG property.
283283 //
284284 // See g_param_spec_internal() for details on property names.
285-func NewParamSpecLong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int32, MaximumVar int32, DefaultValueVar int32, FlagsVar ParamFlags) *ParamSpec {
285+func NewParamSpecLong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar int, MaximumVar int, DefaultValueVar int, FlagsVar ParamFlags) *ParamSpec {
286286 var cls *ParamSpec
287287
288288 NickVarPtr, NickVarBytes := core.NullableStringToPtr(NickVar)
@@ -510,13 +510,13 @@ func ParamSpecUint64(NameVar string, NickVar *string, BlurbVar *string, MinimumV
510510 return cls
511511 }
512512
513-var xParamSpecUlong func(string, uintptr, uintptr, uint32, uint32, uint32, ParamFlags) uintptr
513+var xParamSpecUlong func(string, uintptr, uintptr, uint, uint, uint, ParamFlags) uintptr
514514
515515 // Creates a new #GParamSpecULong instance specifying a %G_TYPE_ULONG
516516 // property.
517517 //
518518 // See g_param_spec_internal() for details on property names.
519-func ParamSpecUlong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar uint32, MaximumVar uint32, DefaultValueVar uint32, FlagsVar ParamFlags) *ParamSpec {
519+func ParamSpecUlong(NameVar string, NickVar *string, BlurbVar *string, MinimumVar uint, MaximumVar uint, DefaultValueVar uint, FlagsVar ParamFlags) *ParamSpec {
520520 var cls *ParamSpec
521521
522522 NickVarPtr, NickVarBytes := core.NullableStringToPtr(NickVar)
M v4/gobject/gsignal.go +22 -22
@@ -172,7 +172,7 @@ const (
172172 GSignalMatchUnblockedValue SignalMatchType = 32
173173 )
174174
175-var xClearSignalHandler func(uint32, uintptr)
175+var xClearSignalHandler func(uint, uintptr)
176176
177177 // Disconnects a handler from @instance so it will not be called during
178178 // any future or currently ongoing emissions of the signal it has been
@@ -182,7 +182,7 @@ var xClearSignalHandler func(uint32, uintptr)
182182 //
183183 // There is also a macro version of this function so that the code
184184 // will be inlined.
185-func ClearSignalHandler(HandlerIdPtrVar uint32, InstanceVar *Object) {
185+func ClearSignalHandler(HandlerIdPtrVar uint, InstanceVar *Object) {
186186
187187 xClearSignalHandler(HandlerIdPtrVar, InstanceVar.GoPointer())
188188
@@ -223,12 +223,12 @@ func SignalAccumulatorTrueHandled(IhintVar *SignalInvocationHint, ReturnAccuVar
223223 return cret
224224 }
225225
226-var xSignalAddEmissionHook func(uint, glib.Quark, uintptr, uintptr, uintptr) uint32
226+var xSignalAddEmissionHook func(uint, glib.Quark, uintptr, uintptr, uintptr) uint
227227
228228 // Adds an emission hook for a signal, which will get called for any emission
229229 // of that signal, independent of the instance. This is possible only
230230 // for signals which don't have %G_SIGNAL_NO_HOOKS flag set.
231-func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint32 {
231+func SignalAddEmissionHook(SignalIdVar uint, DetailVar glib.Quark, HookFuncVar *SignalEmissionHook, HookDataVar uintptr, DataDestroyVar *glib.DestroyNotify) uint {
232232
233233 var HookFuncVarRef uintptr
234234 if HookFuncVar != nil {
@@ -289,7 +289,7 @@ func SignalChainFromOverriddenHandler(InstanceVar *TypeInstance, varArgs ...inte
289289
290290 }
291291
292-var xSignalConnectClosure func(uintptr, string, *Closure, bool) uint32
292+var xSignalConnectClosure func(uintptr, string, *Closure, bool) uint
293293
294294 // Connects a closure to a signal for a particular object.
295295 //
@@ -303,14 +303,14 @@ var xSignalConnectClosure func(uintptr, string, *Closure, bool) uint32
303303 //
304304 // Refer to the [signals documentation](signals.html) for more
305305 // details.
306-func SignalConnectClosure(InstanceVar *Object, DetailedSignalVar string, ClosureVar *Closure, AfterVar bool) uint32 {
306+func SignalConnectClosure(InstanceVar *Object, DetailedSignalVar string, ClosureVar *Closure, AfterVar bool) uint {
307307
308308 cret := xSignalConnectClosure(InstanceVar.GoPointer(), DetailedSignalVar, ClosureVar, AfterVar)
309309
310310 return cret
311311 }
312312
313-var xSignalConnectClosureById func(uintptr, uint, glib.Quark, *Closure, bool) uint32
313+var xSignalConnectClosureById func(uintptr, uint, glib.Quark, *Closure, bool) uint
314314
315315 // Connects a closure to a signal for a particular object.
316316 //
@@ -324,14 +324,14 @@ var xSignalConnectClosureById func(uintptr, uint, glib.Quark, *Closure, bool) ui
324324 //
325325 // Refer to the [signals documentation](signals.html) for more
326326 // details.
327-func SignalConnectClosureById(InstanceVar *Object, SignalIdVar uint, DetailVar glib.Quark, ClosureVar *Closure, AfterVar bool) uint32 {
327+func SignalConnectClosureById(InstanceVar *Object, SignalIdVar uint, DetailVar glib.Quark, ClosureVar *Closure, AfterVar bool) uint {
328328
329329 cret := xSignalConnectClosureById(InstanceVar.GoPointer(), SignalIdVar, DetailVar, ClosureVar, AfterVar)
330330
331331 return cret
332332 }
333333
334-var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectFlags) uint32
334+var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectFlags) uint
335335
336336 // Connects a #GCallback function to a signal for a particular object. Similar
337337 // to g_signal_connect(), but allows to provide a #GClosureNotify for the data
@@ -346,7 +346,7 @@ var xSignalConnectData func(uintptr, string, uintptr, uintptr, uintptr, ConnectF
346346 //
347347 // Refer to the [signals documentation](signals.html) for more
348348 // details.
349-func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint32 {
349+func SignalConnectData(InstanceVar *Object, DetailedSignalVar string, CHandlerVar *Callback, DataVar uintptr, DestroyDataVar *ClosureNotify, ConnectFlagsVar ConnectFlags) uint {
350350
351351 var CHandlerVarRef uintptr
352352 if CHandlerVar != nil {
@@ -445,7 +445,7 @@ func SignalGetInvocationHint(InstanceVar *Object) *SignalInvocationHint {
445445 return cret
446446 }
447447
448-var xSignalHandlerBlock func(uintptr, uint32)
448+var xSignalHandlerBlock func(uintptr, uint)
449449
450450 // Blocks a handler of an instance so it will not be called during any
451451 // signal emissions unless it is unblocked again. Thus "blocking" a
@@ -455,13 +455,13 @@ var xSignalHandlerBlock func(uintptr, uint32)
455455 //
456456 // The @handler_id has to be a valid signal handler id, connected to a
457457 // signal of @instance.
458-func SignalHandlerBlock(InstanceVar *Object, HandlerIdVar uint32) {
458+func SignalHandlerBlock(InstanceVar *Object, HandlerIdVar uint) {
459459
460460 xSignalHandlerBlock(InstanceVar.GoPointer(), HandlerIdVar)
461461
462462 }
463463
464-var xSignalHandlerDisconnect func(uintptr, uint32)
464+var xSignalHandlerDisconnect func(uintptr, uint)
465465
466466 // Disconnects a handler from an instance so it will not be called during
467467 // any future or currently ongoing emissions of the signal it has been
@@ -469,37 +469,37 @@ var xSignalHandlerDisconnect func(uintptr, uint32)
469469 //
470470 // The @handler_id has to be a valid signal handler id, connected to a
471471 // signal of @instance.
472-func SignalHandlerDisconnect(InstanceVar *Object, HandlerIdVar uint32) {
472+func SignalHandlerDisconnect(InstanceVar *Object, HandlerIdVar uint) {
473473
474474 xSignalHandlerDisconnect(InstanceVar.GoPointer(), HandlerIdVar)
475475
476476 }
477477
478-var xSignalHandlerFind func(uintptr, SignalMatchType, uint, glib.Quark, *Closure, uintptr, uintptr) uint32
478+var xSignalHandlerFind func(uintptr, SignalMatchType, uint, glib.Quark, *Closure, uintptr, uintptr) uint
479479
480480 // Finds the first signal handler that matches certain selection criteria.
481481 // The criteria mask is passed as an OR-ed combination of #GSignalMatchType
482482 // flags, and the criteria values are passed as arguments.
483483 // The match @mask has to be non-0 for successful matches.
484484 // If no handler was found, 0 is returned.
485-func SignalHandlerFind(InstanceVar *Object, MaskVar SignalMatchType, SignalIdVar uint, DetailVar glib.Quark, ClosureVar *Closure, FuncVar uintptr, DataVar uintptr) uint32 {
485+func SignalHandlerFind(InstanceVar *Object, MaskVar SignalMatchType, SignalIdVar uint, DetailVar glib.Quark, ClosureVar *Closure, FuncVar uintptr, DataVar uintptr) uint {
486486
487487 cret := xSignalHandlerFind(InstanceVar.GoPointer(), MaskVar, SignalIdVar, DetailVar, ClosureVar, FuncVar, DataVar)
488488
489489 return cret
490490 }
491491
492-var xSignalHandlerIsConnected func(uintptr, uint32) bool
492+var xSignalHandlerIsConnected func(uintptr, uint) bool
493493
494494 // Returns whether @handler_id is the ID of a handler connected to @instance.
495-func SignalHandlerIsConnected(InstanceVar *Object, HandlerIdVar uint32) bool {
495+func SignalHandlerIsConnected(InstanceVar *Object, HandlerIdVar uint) bool {
496496
497497 cret := xSignalHandlerIsConnected(InstanceVar.GoPointer(), HandlerIdVar)
498498
499499 return cret
500500 }
501501
502-var xSignalHandlerUnblock func(uintptr, uint32)
502+var xSignalHandlerUnblock func(uintptr, uint)
503503
504504 // Undoes the effect of a previous g_signal_handler_block() call. A
505505 // blocked handler is skipped during signal emissions and will not be
@@ -514,7 +514,7 @@ var xSignalHandlerUnblock func(uintptr, uint32)
514514 //
515515 // The @handler_id has to be a valid id of a signal handler that is
516516 // connected to a signal of @instance and is currently blocked.
517-func SignalHandlerUnblock(InstanceVar *Object, HandlerIdVar uint32) {
517+func SignalHandlerUnblock(InstanceVar *Object, HandlerIdVar uint) {
518518
519519 xSignalHandlerUnblock(InstanceVar.GoPointer(), HandlerIdVar)
520520
@@ -917,10 +917,10 @@ func NewSignalQuery(SignalIdVar uint, QueryVar *SignalQuery) {
917917
918918 }
919919
920-var xSignalRemoveEmissionHook func(uint, uint32)
920+var xSignalRemoveEmissionHook func(uint, uint)
921921
922922 // Deletes an emission hook.
923-func SignalRemoveEmissionHook(SignalIdVar uint, HookIdVar uint32) {
923+func SignalRemoveEmissionHook(SignalIdVar uint, HookIdVar uint) {
924924
925925 xSignalRemoveEmissionHook(SignalIdVar, HookIdVar)
926926
M v4/gobject/gsignalgroup.go +14 -6
@@ -300,10 +300,12 @@ func (c *SignalGroup) SetGoPointer(ptr uintptr) {
300300 // other than %NULL. It is similar to #GObject::notify on `target` except it
301301 // will not emit when #GSignalGroup:target is %NULL and also allows for
302302 // receiving the #GObject without a data-race.
303-func (x *SignalGroup) ConnectBind(cb *func(SignalGroup, uintptr)) uint32 {
303+func (x *SignalGroup) ConnectBind(cb *func(SignalGroup, uintptr)) uint {
304304 cbPtr := uintptr(unsafe.Pointer(cb))
305305 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
306- return SignalConnect(x.GoPointer(), "bind", cbRefPtr)
306+ handlerID := SignalConnect(x.GoPointer(), "bind", cbRefPtr)
307+ glib.SaveHandlerMapping(handlerID, cbPtr)
308+ return handlerID
307309 }
308310
309311 fcb := func(clsPtr uintptr, InstanceVarp uintptr) {
@@ -316,7 +318,9 @@ func (x *SignalGroup) ConnectBind(cb *func(SignalGroup, uintptr)) uint32 {
316318 }
317319 cbRefPtr := purego.NewCallback(fcb)
318320 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
319- return SignalConnect(x.GoPointer(), "bind", cbRefPtr)
321+ handlerID := SignalConnect(x.GoPointer(), "bind", cbRefPtr)
322+ glib.SaveHandlerMapping(handlerID, cbPtr)
323+ return handlerID
320324 }
321325
322326 // This signal is emitted when the target instance of @self is set to a
@@ -324,10 +328,12 @@ func (x *SignalGroup) ConnectBind(cb *func(SignalGroup, uintptr)) uint32 {
324328 //
325329 // This signal will only be emitted if the previous target of @self is
326330 // non-%NULL.
327-func (x *SignalGroup) ConnectUnbind(cb *func(SignalGroup)) uint32 {
331+func (x *SignalGroup) ConnectUnbind(cb *func(SignalGroup)) uint {
328332 cbPtr := uintptr(unsafe.Pointer(cb))
329333 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
330- return SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
334+ handlerID := SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
335+ glib.SaveHandlerMapping(handlerID, cbPtr)
336+ return handlerID
331337 }
332338
333339 fcb := func(clsPtr uintptr) {
@@ -340,7 +346,9 @@ func (x *SignalGroup) ConnectUnbind(cb *func(SignalGroup)) uint32 {
340346 }
341347 cbRefPtr := purego.NewCallback(fcb)
342348 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
343- return SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
349+ handlerID := SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
350+ glib.SaveHandlerMapping(handlerID, cbPtr)
351+ return handlerID
344352 }
345353
346354 func init() {
M v4/gobject/gvalue.go +9 -13
@@ -248,10 +248,10 @@ func (x *Value) GetInt64() int64 {
248248 return cret
249249 }
250250
251-var xValueGetLong func(uintptr) int32
251+var xValueGetLong func(uintptr) int
252252
253253 // Get the contents of a %G_TYPE_LONG #GValue.
254-func (x *Value) GetLong() int32 {
254+func (x *Value) GetLong() int {
255255
256256 cret := xValueGetLong(x.GoPointer())
257257
@@ -352,10 +352,10 @@ func (x *Value) GetUint64() uint64 {
352352 return cret
353353 }
354354
355-var xValueGetUlong func(uintptr) uint32
355+var xValueGetUlong func(uintptr) uint
356356
357357 // Get the contents of a %G_TYPE_ULONG #GValue.
358-func (x *Value) GetUlong() uint32 {
358+func (x *Value) GetUlong() uint {
359359
360360 cret := xValueGetUlong(x.GoPointer())
361361
@@ -566,10 +566,10 @@ func (x *Value) SetInternedString(VStringVar *string) {
566566
567567 }
568568
569-var xValueSetLong func(uintptr, int32)
569+var xValueSetLong func(uintptr, int)
570570
571571 // Set the contents of a %G_TYPE_LONG #GValue to @v_long.
572-func (x *Value) SetLong(VLongVar int32) {
572+func (x *Value) SetLong(VLongVar int) {
573573
574574 xValueSetLong(x.GoPointer(), VLongVar)
575575
@@ -722,10 +722,10 @@ func (x *Value) SetUint64(VUint64Var uint64) {
722722
723723 }
724724
725-var xValueSetUlong func(uintptr, uint32)
725+var xValueSetUlong func(uintptr, uint)
726726
727727 // Set the contents of a %G_TYPE_ULONG #GValue to @v_ulong.
728-func (x *Value) SetUlong(VUlongVar uint32) {
728+func (x *Value) SetUlong(VUlongVar uint) {
729729
730730 xValueSetUlong(x.GoPointer(), VUlongVar)
731731
@@ -801,11 +801,7 @@ var xValueTakeString func(uintptr, uintptr)
801801 // Sets the contents of a %G_TYPE_STRING #GValue to @v_string.
802802 func (x *Value) TakeString(VStringVar *string) {
803803
804- VStringVarPtr, VStringVarBytes := core.NullableStringToPtr(VStringVar)
805-
806- xValueTakeString(x.GoPointer(), VStringVarPtr)
807-
808- runtime.KeepAlive(VStringVarBytes)
804+ xValueTakeString(x.GoPointer(), core.GStrdupNullable(VStringVar))
809805
810806 }
811807
M v4/gobject/more.go +4 -3
@@ -28,7 +28,7 @@ func IncreaseRef(a uintptr) {
2828 xObjectRefSink(a)
2929 }
3030
31-func SignalConnect(a uintptr, b string, c uintptr) uint32 {
31+func SignalConnect(a uintptr, b string, c uintptr) uint {
3232 return xSignalConnectData(a, b, c, 0, 0, 0)
3333 }
3434
@@ -36,12 +36,13 @@ func (o Object) Cast(v Ptr) {
3636 v.SetGoPointer(o.GoPointer())
3737 }
3838
39-func (o Object) ConnectSignal(signal string, cb *func()) uint32 {
39+func (o Object) ConnectSignal(signal string, cb *func()) uint {
4040 return SignalConnect(o.GoPointer(), signal, glib.NewCallback(cb))
4141 }
4242
43-func (o Object) DisconnectSignal(handler uint32) {
43+func (o Object) DisconnectSignal(handler uint) {
4444 SignalHandlerDisconnect(&o, handler)
45+ glib.RemoveCallbackByHandler(handler)
4546 }
4647
4748 // types
M v4/gsk/gskrendernodeimpl.go +2 -2
@@ -822,7 +822,7 @@ func DebugNodeNewFromInternalPtr(ptr uintptr) *DebugNode {
822822 return cls
823823 }
824824
825-var xNewDebugNode func(uintptr, string) uintptr
825+var xNewDebugNode func(uintptr, uintptr) uintptr
826826
827827 // Creates a `GskRenderNode` that will add debug information about
828828 // the given @child.
@@ -831,7 +831,7 @@ var xNewDebugNode func(uintptr, string) uintptr
831831 func NewDebugNode(ChildVar *RenderNode, MessageVar string) *DebugNode {
832832 var cls *DebugNode
833833
834- cret := xNewDebugNode(ChildVar.GoPointer(), MessageVar)
834+ cret := xNewDebugNode(ChildVar.GoPointer(), core.GStrdup(MessageVar))
835835
836836 if cret == 0 {
837837 return nil
M v4/gtk/gtkaboutdialog.go +7 -3
@@ -921,10 +921,12 @@ func (x *AboutDialog) GetPropertyWrapLicense() bool {
921921 //
922922 // Applications may connect to it to override the default behaviour,
923923 // which is to call [method@Gtk.FileLauncher.launch].
924-func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) uint32 {
924+func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) uint {
925925 cbPtr := uintptr(unsafe.Pointer(cb))
926926 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
927- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
927+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
928+ glib.SaveHandlerMapping(handlerID, cbPtr)
929+ return handlerID
928930 }
929931
930932 fcb := func(clsPtr uintptr, UriVarp string) bool {
@@ -937,7 +939,9 @@ func (x *AboutDialog) ConnectActivateLink(cb *func(AboutDialog, string) bool) ui
937939 }
938940 cbRefPtr := purego.NewCallback(fcb)
939941 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
940- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
942+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
943+ glib.SaveHandlerMapping(handlerID, cbPtr)
944+ return handlerID
941945 }
942946
943947 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkadjustment.go +14 -6
@@ -543,10 +543,12 @@ func (x *Adjustment) GetPropertyValue() float64 {
543543 //
544544 // Note that the [property@Gtk.Adjustment:value] property is
545545 // covered by the [signal@Gtk.Adjustment::value-changed] signal.
546-func (x *Adjustment) ConnectChanged(cb *func(Adjustment)) uint32 {
546+func (x *Adjustment) ConnectChanged(cb *func(Adjustment)) uint {
547547 cbPtr := uintptr(unsafe.Pointer(cb))
548548 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
549- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
549+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
550+ glib.SaveHandlerMapping(handlerID, cbPtr)
551+ return handlerID
550552 }
551553
552554 fcb := func(clsPtr uintptr) {
@@ -559,14 +561,18 @@ func (x *Adjustment) ConnectChanged(cb *func(Adjustment)) uint32 {
559561 }
560562 cbRefPtr := purego.NewCallback(fcb)
561563 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
562- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
564+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
565+ glib.SaveHandlerMapping(handlerID, cbPtr)
566+ return handlerID
563567 }
564568
565569 // Emitted when the value has been changed.
566-func (x *Adjustment) ConnectValueChanged(cb *func(Adjustment)) uint32 {
570+func (x *Adjustment) ConnectValueChanged(cb *func(Adjustment)) uint {
567571 cbPtr := uintptr(unsafe.Pointer(cb))
568572 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
569- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
573+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
574+ glib.SaveHandlerMapping(handlerID, cbPtr)
575+ return handlerID
570576 }
571577
572578 fcb := func(clsPtr uintptr) {
@@ -579,7 +585,9 @@ func (x *Adjustment) ConnectValueChanged(cb *func(Adjustment)) uint32 {
579585 }
580586 cbRefPtr := purego.NewCallback(fcb)
581587 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
582- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
588+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
589+ glib.SaveHandlerMapping(handlerID, cbPtr)
590+ return handlerID
583591 }
584592
585593 func init() {
M v4/gtk/gtkappchooserbutton.go +28 -12
@@ -295,10 +295,12 @@ func (x *AppChooserButton) GetPropertyShowDialogItem() bool {
295295 //
296296 // The `::activate` signal on `GtkAppChooserButton` is an action signal and
297297 // emitting it causes the button to pop up its dialog.
298-func (x *AppChooserButton) ConnectActivate(cb *func(AppChooserButton)) uint32 {
298+func (x *AppChooserButton) ConnectActivate(cb *func(AppChooserButton)) uint {
299299 cbPtr := uintptr(unsafe.Pointer(cb))
300300 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
301- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
301+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
302+ glib.SaveHandlerMapping(handlerID, cbPtr)
303+ return handlerID
302304 }
303305
304306 fcb := func(clsPtr uintptr) {
@@ -311,14 +313,18 @@ func (x *AppChooserButton) ConnectActivate(cb *func(AppChooserButton)) uint32 {
311313 }
312314 cbRefPtr := purego.NewCallback(fcb)
313315 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
314- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
316+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
317+ glib.SaveHandlerMapping(handlerID, cbPtr)
318+ return handlerID
315319 }
316320
317321 // Emitted when the active application changes.
318-func (x *AppChooserButton) ConnectChanged(cb *func(AppChooserButton)) uint32 {
322+func (x *AppChooserButton) ConnectChanged(cb *func(AppChooserButton)) uint {
319323 cbPtr := uintptr(unsafe.Pointer(cb))
320324 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
321- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
325+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
326+ glib.SaveHandlerMapping(handlerID, cbPtr)
327+ return handlerID
322328 }
323329
324330 fcb := func(clsPtr uintptr) {
@@ -331,17 +337,21 @@ func (x *AppChooserButton) ConnectChanged(cb *func(AppChooserButton)) uint32 {
331337 }
332338 cbRefPtr := purego.NewCallback(fcb)
333339 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
334- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
340+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
341+ glib.SaveHandlerMapping(handlerID, cbPtr)
342+ return handlerID
335343 }
336344
337345 // Emitted when a custom item is activated.
338346 //
339347 // Use [method@Gtk.AppChooserButton.append_custom_item],
340348 // to add custom items.
341-func (x *AppChooserButton) ConnectCustomItemActivated(cb *func(AppChooserButton, string)) uint32 {
349+func (x *AppChooserButton) ConnectCustomItemActivated(cb *func(AppChooserButton, string)) uint {
342350 cbPtr := uintptr(unsafe.Pointer(cb))
343351 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
344- return gobject.SignalConnect(x.GoPointer(), "custom-item-activated", cbRefPtr)
352+ handlerID := gobject.SignalConnect(x.GoPointer(), "custom-item-activated", cbRefPtr)
353+ glib.SaveHandlerMapping(handlerID, cbPtr)
354+ return handlerID
345355 }
346356
347357 fcb := func(clsPtr uintptr, ItemNameVarp string) {
@@ -354,16 +364,20 @@ func (x *AppChooserButton) ConnectCustomItemActivated(cb *func(AppChooserButton,
354364 }
355365 cbRefPtr := purego.NewCallback(fcb)
356366 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
357- return gobject.SignalConnect(x.GoPointer(), "custom-item-activated", cbRefPtr)
367+ handlerID := gobject.SignalConnect(x.GoPointer(), "custom-item-activated", cbRefPtr)
368+ glib.SaveHandlerMapping(handlerID, cbPtr)
369+ return handlerID
358370 }
359371
360372 // ConnectCustomItemActivatedWithDetail connects to the "custom-item-activated" signal with a detail string.
361373 // The detail is appended as "custom-item-activated::<detail>".
362-func (x *AppChooserButton) ConnectCustomItemActivatedWithDetail(detail string, cb *func(AppChooserButton, string)) uint32 {
374+func (x *AppChooserButton) ConnectCustomItemActivatedWithDetail(detail string, cb *func(AppChooserButton, string)) uint {
363375 cbPtr := uintptr(unsafe.Pointer(cb))
364376 signalName := fmt.Sprintf("custom-item-activated::%s", detail)
365377 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
366- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
378+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
379+ glib.SaveHandlerMapping(handlerID, cbPtr)
380+ return handlerID
367381 }
368382
369383 fcb := func(clsPtr uintptr, ItemNameVarp string) {
@@ -376,7 +390,9 @@ func (x *AppChooserButton) ConnectCustomItemActivatedWithDetail(detail string, c
376390 }
377391 cbRefPtr := purego.NewCallback(fcb)
378392 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
379- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
393+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
394+ glib.SaveHandlerMapping(handlerID, cbPtr)
395+ return handlerID
380396 }
381397
382398 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkappchooserwidget.go +14 -6
@@ -345,10 +345,12 @@ func (x *AppChooserWidget) GetPropertyShowRecommended() bool {
345345 // This usually happens when the user double clicks an item, or an item
346346 // is selected and the user presses one of the keys Space, Shift+Space,
347347 // Return or Enter.
348-func (x *AppChooserWidget) ConnectApplicationActivated(cb *func(AppChooserWidget, uintptr)) uint32 {
348+func (x *AppChooserWidget) ConnectApplicationActivated(cb *func(AppChooserWidget, uintptr)) uint {
349349 cbPtr := uintptr(unsafe.Pointer(cb))
350350 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
351- return gobject.SignalConnect(x.GoPointer(), "application-activated", cbRefPtr)
351+ handlerID := gobject.SignalConnect(x.GoPointer(), "application-activated", cbRefPtr)
352+ glib.SaveHandlerMapping(handlerID, cbPtr)
353+ return handlerID
352354 }
353355
354356 fcb := func(clsPtr uintptr, ApplicationVarp uintptr) {
@@ -361,14 +363,18 @@ func (x *AppChooserWidget) ConnectApplicationActivated(cb *func(AppChooserWidget
361363 }
362364 cbRefPtr := purego.NewCallback(fcb)
363365 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
364- return gobject.SignalConnect(x.GoPointer(), "application-activated", cbRefPtr)
366+ handlerID := gobject.SignalConnect(x.GoPointer(), "application-activated", cbRefPtr)
367+ glib.SaveHandlerMapping(handlerID, cbPtr)
368+ return handlerID
365369 }
366370
367371 // Emitted when an application item is selected from the widget's list.
368-func (x *AppChooserWidget) ConnectApplicationSelected(cb *func(AppChooserWidget, uintptr)) uint32 {
372+func (x *AppChooserWidget) ConnectApplicationSelected(cb *func(AppChooserWidget, uintptr)) uint {
369373 cbPtr := uintptr(unsafe.Pointer(cb))
370374 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
371- return gobject.SignalConnect(x.GoPointer(), "application-selected", cbRefPtr)
375+ handlerID := gobject.SignalConnect(x.GoPointer(), "application-selected", cbRefPtr)
376+ glib.SaveHandlerMapping(handlerID, cbPtr)
377+ return handlerID
372378 }
373379
374380 fcb := func(clsPtr uintptr, ApplicationVarp uintptr) {
@@ -381,7 +387,9 @@ func (x *AppChooserWidget) ConnectApplicationSelected(cb *func(AppChooserWidget,
381387 }
382388 cbRefPtr := purego.NewCallback(fcb)
383389 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
384- return gobject.SignalConnect(x.GoPointer(), "application-selected", cbRefPtr)
390+ handlerID := gobject.SignalConnect(x.GoPointer(), "application-selected", cbRefPtr)
391+ glib.SaveHandlerMapping(handlerID, cbPtr)
392+ return handlerID
385393 }
386394
387395 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkapplication.go +21 -9
@@ -570,10 +570,12 @@ func (x *Application) GetPropertyScreensaverActive() bool {
570570 // Applications can connect to this signal and call
571571 // [method@Gtk.Application.inhibit] with [flags@Gtk.ApplicationInhibitFlags.logout]
572572 // to delay the end of the session until state has been saved.
573-func (x *Application) ConnectQueryEnd(cb *func(Application)) uint32 {
573+func (x *Application) ConnectQueryEnd(cb *func(Application)) uint {
574574 cbPtr := uintptr(unsafe.Pointer(cb))
575575 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
576- return gobject.SignalConnect(x.GoPointer(), "query-end", cbRefPtr)
576+ handlerID := gobject.SignalConnect(x.GoPointer(), "query-end", cbRefPtr)
577+ glib.SaveHandlerMapping(handlerID, cbPtr)
578+ return handlerID
577579 }
578580
579581 fcb := func(clsPtr uintptr) {
@@ -586,16 +588,20 @@ func (x *Application) ConnectQueryEnd(cb *func(Application)) uint32 {
586588 }
587589 cbRefPtr := purego.NewCallback(fcb)
588590 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
589- return gobject.SignalConnect(x.GoPointer(), "query-end", cbRefPtr)
591+ handlerID := gobject.SignalConnect(x.GoPointer(), "query-end", cbRefPtr)
592+ glib.SaveHandlerMapping(handlerID, cbPtr)
593+ return handlerID
590594 }
591595
592596 // Emitted when a window is added to an application.
593597 //
594598 // See [method@Gtk.Application.add_window].
595-func (x *Application) ConnectWindowAdded(cb *func(Application, uintptr)) uint32 {
599+func (x *Application) ConnectWindowAdded(cb *func(Application, uintptr)) uint {
596600 cbPtr := uintptr(unsafe.Pointer(cb))
597601 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
598- return gobject.SignalConnect(x.GoPointer(), "window-added", cbRefPtr)
602+ handlerID := gobject.SignalConnect(x.GoPointer(), "window-added", cbRefPtr)
603+ glib.SaveHandlerMapping(handlerID, cbPtr)
604+ return handlerID
599605 }
600606
601607 fcb := func(clsPtr uintptr, WindowVarp uintptr) {
@@ -608,17 +614,21 @@ func (x *Application) ConnectWindowAdded(cb *func(Application, uintptr)) uint32
608614 }
609615 cbRefPtr := purego.NewCallback(fcb)
610616 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
611- return gobject.SignalConnect(x.GoPointer(), "window-added", cbRefPtr)
617+ handlerID := gobject.SignalConnect(x.GoPointer(), "window-added", cbRefPtr)
618+ glib.SaveHandlerMapping(handlerID, cbPtr)
619+ return handlerID
612620 }
613621
614622 // Emitted when a window is removed from an application.
615623 //
616624 // This can happen as a side-effect of the window being destroyed
617625 // or explicitly through [method@Gtk.Application.remove_window].
618-func (x *Application) ConnectWindowRemoved(cb *func(Application, uintptr)) uint32 {
626+func (x *Application) ConnectWindowRemoved(cb *func(Application, uintptr)) uint {
619627 cbPtr := uintptr(unsafe.Pointer(cb))
620628 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
621- return gobject.SignalConnect(x.GoPointer(), "window-removed", cbRefPtr)
629+ handlerID := gobject.SignalConnect(x.GoPointer(), "window-removed", cbRefPtr)
630+ glib.SaveHandlerMapping(handlerID, cbPtr)
631+ return handlerID
622632 }
623633
624634 fcb := func(clsPtr uintptr, WindowVarp uintptr) {
@@ -631,7 +641,9 @@ func (x *Application) ConnectWindowRemoved(cb *func(Application, uintptr)) uint3
631641 }
632642 cbRefPtr := purego.NewCallback(fcb)
633643 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
634- return gobject.SignalConnect(x.GoPointer(), "window-removed", cbRefPtr)
644+ handlerID := gobject.SignalConnect(x.GoPointer(), "window-removed", cbRefPtr)
645+ glib.SaveHandlerMapping(handlerID, cbPtr)
646+ return handlerID
635647 }
636648
637649 // Emits the [signal@Gio.ActionGroup::action-added] signal on @action_group.
M v4/gtk/gtkassistant.go +35 -15
@@ -501,10 +501,12 @@ func (x *Assistant) GetPropertyUseHeaderBar() int {
501501 // %GTK_ASSISTANT_PAGE_PROGRESS after the confirmation page and handle
502502 // this operation within the [signal@Gtk.Assistant::prepare] signal of
503503 // the progress page.
504-func (x *Assistant) ConnectApply(cb *func(Assistant)) uint32 {
504+func (x *Assistant) ConnectApply(cb *func(Assistant)) uint {
505505 cbPtr := uintptr(unsafe.Pointer(cb))
506506 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
507- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
507+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
508+ glib.SaveHandlerMapping(handlerID, cbPtr)
509+ return handlerID
508510 }
509511
510512 fcb := func(clsPtr uintptr) {
@@ -517,14 +519,18 @@ func (x *Assistant) ConnectApply(cb *func(Assistant)) uint32 {
517519 }
518520 cbRefPtr := purego.NewCallback(fcb)
519521 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
520- return gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
522+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply", cbRefPtr)
523+ glib.SaveHandlerMapping(handlerID, cbPtr)
524+ return handlerID
521525 }
522526
523527 // Emitted when then the cancel button is clicked.
524-func (x *Assistant) ConnectCancel(cb *func(Assistant)) uint32 {
528+func (x *Assistant) ConnectCancel(cb *func(Assistant)) uint {
525529 cbPtr := uintptr(unsafe.Pointer(cb))
526530 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
527- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
531+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
532+ glib.SaveHandlerMapping(handlerID, cbPtr)
533+ return handlerID
528534 }
529535
530536 fcb := func(clsPtr uintptr) {
@@ -537,16 +543,20 @@ func (x *Assistant) ConnectCancel(cb *func(Assistant)) uint32 {
537543 }
538544 cbRefPtr := purego.NewCallback(fcb)
539545 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
540- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
546+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
547+ glib.SaveHandlerMapping(handlerID, cbPtr)
548+ return handlerID
541549 }
542550
543551 // Emitted either when the close button of a summary page is clicked,
544552 // or when the apply button in the last page in the flow (of type
545553 // %GTK_ASSISTANT_PAGE_CONFIRM) is clicked.
546-func (x *Assistant) ConnectClose(cb *func(Assistant)) uint32 {
554+func (x *Assistant) ConnectClose(cb *func(Assistant)) uint {
547555 cbPtr := uintptr(unsafe.Pointer(cb))
548556 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
549- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
557+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
558+ glib.SaveHandlerMapping(handlerID, cbPtr)
559+ return handlerID
550560 }
551561
552562 fcb := func(clsPtr uintptr) {
@@ -559,14 +569,18 @@ func (x *Assistant) ConnectClose(cb *func(Assistant)) uint32 {
559569 }
560570 cbRefPtr := purego.NewCallback(fcb)
561571 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
562- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
572+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
573+ glib.SaveHandlerMapping(handlerID, cbPtr)
574+ return handlerID
563575 }
564576
565577 // The action signal for the Escape binding.
566-func (x *Assistant) ConnectEscape(cb *func(Assistant)) uint32 {
578+func (x *Assistant) ConnectEscape(cb *func(Assistant)) uint {
567579 cbPtr := uintptr(unsafe.Pointer(cb))
568580 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
569- return gobject.SignalConnect(x.GoPointer(), "escape", cbRefPtr)
581+ handlerID := gobject.SignalConnect(x.GoPointer(), "escape", cbRefPtr)
582+ glib.SaveHandlerMapping(handlerID, cbPtr)
583+ return handlerID
570584 }
571585
572586 fcb := func(clsPtr uintptr) {
@@ -579,7 +593,9 @@ func (x *Assistant) ConnectEscape(cb *func(Assistant)) uint32 {
579593 }
580594 cbRefPtr := purego.NewCallback(fcb)
581595 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
582- return gobject.SignalConnect(x.GoPointer(), "escape", cbRefPtr)
596+ handlerID := gobject.SignalConnect(x.GoPointer(), "escape", cbRefPtr)
597+ glib.SaveHandlerMapping(handlerID, cbPtr)
598+ return handlerID
583599 }
584600
585601 // Emitted when a new page is set as the assistant's current page,
@@ -587,10 +603,12 @@ func (x *Assistant) ConnectEscape(cb *func(Assistant)) uint32 {
587603 //
588604 // A handler for this signal can do any preparations which are
589605 // necessary before showing @page.
590-func (x *Assistant) ConnectPrepare(cb *func(Assistant, uintptr)) uint32 {
606+func (x *Assistant) ConnectPrepare(cb *func(Assistant, uintptr)) uint {
591607 cbPtr := uintptr(unsafe.Pointer(cb))
592608 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
593- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
609+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
610+ glib.SaveHandlerMapping(handlerID, cbPtr)
611+ return handlerID
594612 }
595613
596614 fcb := func(clsPtr uintptr, PageVarp uintptr) {
@@ -603,7 +621,9 @@ func (x *Assistant) ConnectPrepare(cb *func(Assistant, uintptr)) uint32 {
603621 }
604622 cbRefPtr := purego.NewCallback(fcb)
605623 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
606- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
624+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
625+ glib.SaveHandlerMapping(handlerID, cbPtr)
626+ return handlerID
607627 }
608628
609629 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkatcontext.go +7 -3
@@ -102,10 +102,12 @@ func (c *ATContext) SetGoPointer(ptr uintptr) {
102102
103103 // Emitted when the attributes of the accessible for the
104104 // `GtkATContext` instance change.
105-func (x *ATContext) ConnectStateChange(cb *func(ATContext)) uint32 {
105+func (x *ATContext) ConnectStateChange(cb *func(ATContext)) uint {
106106 cbPtr := uintptr(unsafe.Pointer(cb))
107107 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
108- return gobject.SignalConnect(x.GoPointer(), "state-change", cbRefPtr)
108+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-change", cbRefPtr)
109+ glib.SaveHandlerMapping(handlerID, cbPtr)
110+ return handlerID
109111 }
110112
111113 fcb := func(clsPtr uintptr) {
@@ -118,7 +120,9 @@ func (x *ATContext) ConnectStateChange(cb *func(ATContext)) uint32 {
118120 }
119121 cbRefPtr := purego.NewCallback(fcb)
120122 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
121- return gobject.SignalConnect(x.GoPointer(), "state-change", cbRefPtr)
123+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-change", cbRefPtr)
124+ glib.SaveHandlerMapping(handlerID, cbPtr)
125+ return handlerID
122126 }
123127
124128 func init() {
M v4/gtk/gtkbutton.go +14 -6
@@ -499,10 +499,12 @@ func (x *Button) GetPropertyUseUnderline() bool {
499499 //
500500 // The default bindings for this signal are all forms of the
501501 // &lt;kbd&gt;␣&lt;/kbd&gt; and &lt;kbd&gt;Enter&lt;/kbd&gt; keys.
502-func (x *Button) ConnectActivate(cb *func(Button)) uint32 {
502+func (x *Button) ConnectActivate(cb *func(Button)) uint {
503503 cbPtr := uintptr(unsafe.Pointer(cb))
504504 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
505- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
505+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
506+ glib.SaveHandlerMapping(handlerID, cbPtr)
507+ return handlerID
506508 }
507509
508510 fcb := func(clsPtr uintptr) {
@@ -515,14 +517,18 @@ func (x *Button) ConnectActivate(cb *func(Button)) uint32 {
515517 }
516518 cbRefPtr := purego.NewCallback(fcb)
517519 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
518- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
520+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
521+ glib.SaveHandlerMapping(handlerID, cbPtr)
522+ return handlerID
519523 }
520524
521525 // Emitted when the button has been activated (pressed and released).
522-func (x *Button) ConnectClicked(cb *func(Button)) uint32 {
526+func (x *Button) ConnectClicked(cb *func(Button)) uint {
523527 cbPtr := uintptr(unsafe.Pointer(cb))
524528 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
525- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
529+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
530+ glib.SaveHandlerMapping(handlerID, cbPtr)
531+ return handlerID
526532 }
527533
528534 fcb := func(clsPtr uintptr) {
@@ -535,7 +541,9 @@ func (x *Button) ConnectClicked(cb *func(Button)) uint32 {
535541 }
536542 cbRefPtr := purego.NewCallback(fcb)
537543 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
538- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
544+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
545+ glib.SaveHandlerMapping(handlerID, cbPtr)
546+ return handlerID
539547 }
540548
541549 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcalendar.go +35 -15
@@ -452,10 +452,12 @@ func (x *Calendar) GetPropertyYear() int {
452452 }
453453
454454 // Emitted when the user selects a day.
455-func (x *Calendar) ConnectDaySelected(cb *func(Calendar)) uint32 {
455+func (x *Calendar) ConnectDaySelected(cb *func(Calendar)) uint {
456456 cbPtr := uintptr(unsafe.Pointer(cb))
457457 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
458- return gobject.SignalConnect(x.GoPointer(), "day-selected", cbRefPtr)
458+ handlerID := gobject.SignalConnect(x.GoPointer(), "day-selected", cbRefPtr)
459+ glib.SaveHandlerMapping(handlerID, cbPtr)
460+ return handlerID
459461 }
460462
461463 fcb := func(clsPtr uintptr) {
@@ -468,14 +470,18 @@ func (x *Calendar) ConnectDaySelected(cb *func(Calendar)) uint32 {
468470 }
469471 cbRefPtr := purego.NewCallback(fcb)
470472 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
471- return gobject.SignalConnect(x.GoPointer(), "day-selected", cbRefPtr)
473+ handlerID := gobject.SignalConnect(x.GoPointer(), "day-selected", cbRefPtr)
474+ glib.SaveHandlerMapping(handlerID, cbPtr)
475+ return handlerID
472476 }
473477
474478 // Emitted when the user switches to the next month.
475-func (x *Calendar) ConnectNextMonth(cb *func(Calendar)) uint32 {
479+func (x *Calendar) ConnectNextMonth(cb *func(Calendar)) uint {
476480 cbPtr := uintptr(unsafe.Pointer(cb))
477481 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
478- return gobject.SignalConnect(x.GoPointer(), "next-month", cbRefPtr)
482+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-month", cbRefPtr)
483+ glib.SaveHandlerMapping(handlerID, cbPtr)
484+ return handlerID
479485 }
480486
481487 fcb := func(clsPtr uintptr) {
@@ -488,14 +494,18 @@ func (x *Calendar) ConnectNextMonth(cb *func(Calendar)) uint32 {
488494 }
489495 cbRefPtr := purego.NewCallback(fcb)
490496 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
491- return gobject.SignalConnect(x.GoPointer(), "next-month", cbRefPtr)
497+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-month", cbRefPtr)
498+ glib.SaveHandlerMapping(handlerID, cbPtr)
499+ return handlerID
492500 }
493501
494502 // Emitted when user switches to the next year.
495-func (x *Calendar) ConnectNextYear(cb *func(Calendar)) uint32 {
503+func (x *Calendar) ConnectNextYear(cb *func(Calendar)) uint {
496504 cbPtr := uintptr(unsafe.Pointer(cb))
497505 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
498- return gobject.SignalConnect(x.GoPointer(), "next-year", cbRefPtr)
506+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-year", cbRefPtr)
507+ glib.SaveHandlerMapping(handlerID, cbPtr)
508+ return handlerID
499509 }
500510
501511 fcb := func(clsPtr uintptr) {
@@ -508,14 +518,18 @@ func (x *Calendar) ConnectNextYear(cb *func(Calendar)) uint32 {
508518 }
509519 cbRefPtr := purego.NewCallback(fcb)
510520 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
511- return gobject.SignalConnect(x.GoPointer(), "next-year", cbRefPtr)
521+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-year", cbRefPtr)
522+ glib.SaveHandlerMapping(handlerID, cbPtr)
523+ return handlerID
512524 }
513525
514526 // Emitted when the user switches to the previous month.
515-func (x *Calendar) ConnectPrevMonth(cb *func(Calendar)) uint32 {
527+func (x *Calendar) ConnectPrevMonth(cb *func(Calendar)) uint {
516528 cbPtr := uintptr(unsafe.Pointer(cb))
517529 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
518- return gobject.SignalConnect(x.GoPointer(), "prev-month", cbRefPtr)
530+ handlerID := gobject.SignalConnect(x.GoPointer(), "prev-month", cbRefPtr)
531+ glib.SaveHandlerMapping(handlerID, cbPtr)
532+ return handlerID
519533 }
520534
521535 fcb := func(clsPtr uintptr) {
@@ -528,14 +542,18 @@ func (x *Calendar) ConnectPrevMonth(cb *func(Calendar)) uint32 {
528542 }
529543 cbRefPtr := purego.NewCallback(fcb)
530544 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
531- return gobject.SignalConnect(x.GoPointer(), "prev-month", cbRefPtr)
545+ handlerID := gobject.SignalConnect(x.GoPointer(), "prev-month", cbRefPtr)
546+ glib.SaveHandlerMapping(handlerID, cbPtr)
547+ return handlerID
532548 }
533549
534550 // Emitted when user switches to the previous year.
535-func (x *Calendar) ConnectPrevYear(cb *func(Calendar)) uint32 {
551+func (x *Calendar) ConnectPrevYear(cb *func(Calendar)) uint {
536552 cbPtr := uintptr(unsafe.Pointer(cb))
537553 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
538- return gobject.SignalConnect(x.GoPointer(), "prev-year", cbRefPtr)
554+ handlerID := gobject.SignalConnect(x.GoPointer(), "prev-year", cbRefPtr)
555+ glib.SaveHandlerMapping(handlerID, cbPtr)
556+ return handlerID
539557 }
540558
541559 fcb := func(clsPtr uintptr) {
@@ -548,7 +566,9 @@ func (x *Calendar) ConnectPrevYear(cb *func(Calendar)) uint32 {
548566 }
549567 cbRefPtr := purego.NewCallback(fcb)
550568 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
551- return gobject.SignalConnect(x.GoPointer(), "prev-year", cbRefPtr)
569+ handlerID := gobject.SignalConnect(x.GoPointer(), "prev-year", cbRefPtr)
570+ glib.SaveHandlerMapping(handlerID, cbPtr)
571+ return handlerID
552572 }
553573
554574 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcellarea.go +28 -12
@@ -1690,10 +1690,12 @@ func (c *CellArea) SetGoPointer(ptr uintptr) {
16901690
16911691 // Indicates that editing has started on @renderer and that @editable
16921692 // should be added to the owning cell-layouting widget at @cell_area.
1693-func (x *CellArea) ConnectAddEditable(cb *func(CellArea, uintptr, uintptr, uintptr, string)) uint32 {
1693+func (x *CellArea) ConnectAddEditable(cb *func(CellArea, uintptr, uintptr, uintptr, string)) uint {
16941694 cbPtr := uintptr(unsafe.Pointer(cb))
16951695 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1696- return gobject.SignalConnect(x.GoPointer(), "add-editable", cbRefPtr)
1696+ handlerID := gobject.SignalConnect(x.GoPointer(), "add-editable", cbRefPtr)
1697+ glib.SaveHandlerMapping(handlerID, cbPtr)
1698+ return handlerID
16971699 }
16981700
16991701 fcb := func(clsPtr uintptr, RendererVarp uintptr, EditableVarp uintptr, CellAreaVarp uintptr, PathVarp string) {
@@ -1706,14 +1708,18 @@ func (x *CellArea) ConnectAddEditable(cb *func(CellArea, uintptr, uintptr, uintp
17061708 }
17071709 cbRefPtr := purego.NewCallback(fcb)
17081710 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1709- return gobject.SignalConnect(x.GoPointer(), "add-editable", cbRefPtr)
1711+ handlerID := gobject.SignalConnect(x.GoPointer(), "add-editable", cbRefPtr)
1712+ glib.SaveHandlerMapping(handlerID, cbPtr)
1713+ return handlerID
17101714 }
17111715
17121716 // This signal is emitted whenever applying attributes to @area from @model
1713-func (x *CellArea) ConnectApplyAttributes(cb *func(CellArea, uintptr, uintptr, bool, bool)) uint32 {
1717+func (x *CellArea) ConnectApplyAttributes(cb *func(CellArea, uintptr, uintptr, bool, bool)) uint {
17141718 cbPtr := uintptr(unsafe.Pointer(cb))
17151719 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1716- return gobject.SignalConnect(x.GoPointer(), "apply-attributes", cbRefPtr)
1720+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply-attributes", cbRefPtr)
1721+ glib.SaveHandlerMapping(handlerID, cbPtr)
1722+ return handlerID
17171723 }
17181724
17191725 fcb := func(clsPtr uintptr, ModelVarp uintptr, IterVarp uintptr, IsExpanderVarp bool, IsExpandedVarp bool) {
@@ -1726,7 +1732,9 @@ func (x *CellArea) ConnectApplyAttributes(cb *func(CellArea, uintptr, uintptr, b
17261732 }
17271733 cbRefPtr := purego.NewCallback(fcb)
17281734 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1729- return gobject.SignalConnect(x.GoPointer(), "apply-attributes", cbRefPtr)
1735+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply-attributes", cbRefPtr)
1736+ glib.SaveHandlerMapping(handlerID, cbPtr)
1737+ return handlerID
17301738 }
17311739
17321740 // Indicates that focus changed on this @area. This signal
@@ -1737,10 +1745,12 @@ func (x *CellArea) ConnectApplyAttributes(cb *func(CellArea, uintptr, uintptr, b
17371745 // currently focused renderer did not change, this is
17381746 // because focus may change to the same renderer in the
17391747 // same cell area for a different row of data.
1740-func (x *CellArea) ConnectFocusChanged(cb *func(CellArea, uintptr, string)) uint32 {
1748+func (x *CellArea) ConnectFocusChanged(cb *func(CellArea, uintptr, string)) uint {
17411749 cbPtr := uintptr(unsafe.Pointer(cb))
17421750 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1743- return gobject.SignalConnect(x.GoPointer(), "focus-changed", cbRefPtr)
1751+ handlerID := gobject.SignalConnect(x.GoPointer(), "focus-changed", cbRefPtr)
1752+ glib.SaveHandlerMapping(handlerID, cbPtr)
1753+ return handlerID
17441754 }
17451755
17461756 fcb := func(clsPtr uintptr, RendererVarp uintptr, PathVarp string) {
@@ -1753,15 +1763,19 @@ func (x *CellArea) ConnectFocusChanged(cb *func(CellArea, uintptr, string)) uint
17531763 }
17541764 cbRefPtr := purego.NewCallback(fcb)
17551765 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1756- return gobject.SignalConnect(x.GoPointer(), "focus-changed", cbRefPtr)
1766+ handlerID := gobject.SignalConnect(x.GoPointer(), "focus-changed", cbRefPtr)
1767+ glib.SaveHandlerMapping(handlerID, cbPtr)
1768+ return handlerID
17571769 }
17581770
17591771 // Indicates that editing finished on @renderer and that @editable
17601772 // should be removed from the owning cell-layouting widget.
1761-func (x *CellArea) ConnectRemoveEditable(cb *func(CellArea, uintptr, uintptr)) uint32 {
1773+func (x *CellArea) ConnectRemoveEditable(cb *func(CellArea, uintptr, uintptr)) uint {
17621774 cbPtr := uintptr(unsafe.Pointer(cb))
17631775 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1764- return gobject.SignalConnect(x.GoPointer(), "remove-editable", cbRefPtr)
1776+ handlerID := gobject.SignalConnect(x.GoPointer(), "remove-editable", cbRefPtr)
1777+ glib.SaveHandlerMapping(handlerID, cbPtr)
1778+ return handlerID
17651779 }
17661780
17671781 fcb := func(clsPtr uintptr, RendererVarp uintptr, EditableVarp uintptr) {
@@ -1774,7 +1788,9 @@ func (x *CellArea) ConnectRemoveEditable(cb *func(CellArea, uintptr, uintptr)) u
17741788 }
17751789 cbRefPtr := purego.NewCallback(fcb)
17761790 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1777- return gobject.SignalConnect(x.GoPointer(), "remove-editable", cbRefPtr)
1791+ handlerID := gobject.SignalConnect(x.GoPointer(), "remove-editable", cbRefPtr)
1792+ glib.SaveHandlerMapping(handlerID, cbPtr)
1793+ return handlerID
17781794 }
17791795
17801796 // Gets the ID of the @buildable object.
M v4/gtk/gtkcellrenderer.go +14 -6
@@ -949,10 +949,12 @@ func (x *CellRenderer) GetPropertyYpad() uint {
949949 // editing when the user presses Escape.
950950 //
951951 // See also: gtk_cell_renderer_stop_editing().
952-func (x *CellRenderer) ConnectEditingCanceled(cb *func(CellRenderer)) uint32 {
952+func (x *CellRenderer) ConnectEditingCanceled(cb *func(CellRenderer)) uint {
953953 cbPtr := uintptr(unsafe.Pointer(cb))
954954 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
955- return gobject.SignalConnect(x.GoPointer(), "editing-canceled", cbRefPtr)
955+ handlerID := gobject.SignalConnect(x.GoPointer(), "editing-canceled", cbRefPtr)
956+ glib.SaveHandlerMapping(handlerID, cbPtr)
957+ return handlerID
956958 }
957959
958960 fcb := func(clsPtr uintptr) {
@@ -965,7 +967,9 @@ func (x *CellRenderer) ConnectEditingCanceled(cb *func(CellRenderer)) uint32 {
965967 }
966968 cbRefPtr := purego.NewCallback(fcb)
967969 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
968- return gobject.SignalConnect(x.GoPointer(), "editing-canceled", cbRefPtr)
970+ handlerID := gobject.SignalConnect(x.GoPointer(), "editing-canceled", cbRefPtr)
971+ glib.SaveHandlerMapping(handlerID, cbPtr)
972+ return handlerID
969973 }
970974
971975 // This signal gets emitted when a cell starts to be edited.
@@ -1001,10 +1005,12 @@ func (x *CellRenderer) ConnectEditingCanceled(cb *func(CellRenderer)) uint32 {
10011005 // }
10021006 //
10031007 // ```
1004-func (x *CellRenderer) ConnectEditingStarted(cb *func(CellRenderer, uintptr, string)) uint32 {
1008+func (x *CellRenderer) ConnectEditingStarted(cb *func(CellRenderer, uintptr, string)) uint {
10051009 cbPtr := uintptr(unsafe.Pointer(cb))
10061010 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1007- return gobject.SignalConnect(x.GoPointer(), "editing-started", cbRefPtr)
1011+ handlerID := gobject.SignalConnect(x.GoPointer(), "editing-started", cbRefPtr)
1012+ glib.SaveHandlerMapping(handlerID, cbPtr)
1013+ return handlerID
10081014 }
10091015
10101016 fcb := func(clsPtr uintptr, EditableVarp uintptr, PathVarp string) {
@@ -1017,7 +1023,9 @@ func (x *CellRenderer) ConnectEditingStarted(cb *func(CellRenderer, uintptr, str
10171023 }
10181024 cbRefPtr := purego.NewCallback(fcb)
10191025 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1020- return gobject.SignalConnect(x.GoPointer(), "editing-started", cbRefPtr)
1026+ handlerID := gobject.SignalConnect(x.GoPointer(), "editing-started", cbRefPtr)
1027+ glib.SaveHandlerMapping(handlerID, cbPtr)
1028+ return handlerID
10211029 }
10221030
10231031 func init() {
M v4/gtk/gtkcellrendereraccel.go +14 -6
@@ -117,10 +117,12 @@ func (x *CellRendererAccel) GetPropertyKeycode() uint {
117117 }
118118
119119 // Gets emitted when the user has removed the accelerator.
120-func (x *CellRendererAccel) ConnectAccelCleared(cb *func(CellRendererAccel, string)) uint32 {
120+func (x *CellRendererAccel) ConnectAccelCleared(cb *func(CellRendererAccel, string)) uint {
121121 cbPtr := uintptr(unsafe.Pointer(cb))
122122 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
123- return gobject.SignalConnect(x.GoPointer(), "accel-cleared", cbRefPtr)
123+ handlerID := gobject.SignalConnect(x.GoPointer(), "accel-cleared", cbRefPtr)
124+ glib.SaveHandlerMapping(handlerID, cbPtr)
125+ return handlerID
124126 }
125127
126128 fcb := func(clsPtr uintptr, PathStringVarp string) {
@@ -133,14 +135,18 @@ func (x *CellRendererAccel) ConnectAccelCleared(cb *func(CellRendererAccel, stri
133135 }
134136 cbRefPtr := purego.NewCallback(fcb)
135137 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
136- return gobject.SignalConnect(x.GoPointer(), "accel-cleared", cbRefPtr)
138+ handlerID := gobject.SignalConnect(x.GoPointer(), "accel-cleared", cbRefPtr)
139+ glib.SaveHandlerMapping(handlerID, cbPtr)
140+ return handlerID
137141 }
138142
139143 // Gets emitted when the user has selected a new accelerator.
140-func (x *CellRendererAccel) ConnectAccelEdited(cb *func(CellRendererAccel, string, uint, gdk.ModifierType, uint)) uint32 {
144+func (x *CellRendererAccel) ConnectAccelEdited(cb *func(CellRendererAccel, string, uint, gdk.ModifierType, uint)) uint {
141145 cbPtr := uintptr(unsafe.Pointer(cb))
142146 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
143- return gobject.SignalConnect(x.GoPointer(), "accel-edited", cbRefPtr)
147+ handlerID := gobject.SignalConnect(x.GoPointer(), "accel-edited", cbRefPtr)
148+ glib.SaveHandlerMapping(handlerID, cbPtr)
149+ return handlerID
144150 }
145151
146152 fcb := func(clsPtr uintptr, PathStringVarp string, AccelKeyVarp uint, AccelModsVarp gdk.ModifierType, HardwareKeycodeVarp uint) {
@@ -153,7 +159,9 @@ func (x *CellRendererAccel) ConnectAccelEdited(cb *func(CellRendererAccel, strin
153159 }
154160 cbRefPtr := purego.NewCallback(fcb)
155161 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
156- return gobject.SignalConnect(x.GoPointer(), "accel-edited", cbRefPtr)
162+ handlerID := gobject.SignalConnect(x.GoPointer(), "accel-edited", cbRefPtr)
163+ glib.SaveHandlerMapping(handlerID, cbPtr)
164+ return handlerID
157165 }
158166
159167 func init() {
M v4/gtk/gtkcellrenderercombo.go +7 -3
@@ -136,10 +136,12 @@ func (x *CellRendererCombo) GetPropertyTextColumn() int {
136136 // the tree view will immediately cease the editing operating. This
137137 // means that you most probably want to refrain from changing the model
138138 // until the combo cell renderer emits the edited or editing_canceled signal.
139-func (x *CellRendererCombo) ConnectChanged(cb *func(CellRendererCombo, string, uintptr)) uint32 {
139+func (x *CellRendererCombo) ConnectChanged(cb *func(CellRendererCombo, string, uintptr)) uint {
140140 cbPtr := uintptr(unsafe.Pointer(cb))
141141 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
142- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
142+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
143+ glib.SaveHandlerMapping(handlerID, cbPtr)
144+ return handlerID
143145 }
144146
145147 fcb := func(clsPtr uintptr, PathStringVarp string, NewIterVarp uintptr) {
@@ -152,7 +154,9 @@ func (x *CellRendererCombo) ConnectChanged(cb *func(CellRendererCombo, string, u
152154 }
153155 cbRefPtr := purego.NewCallback(fcb)
154156 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
155- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
157+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
158+ glib.SaveHandlerMapping(handlerID, cbPtr)
159+ return handlerID
156160 }
157161
158162 func init() {
M v4/gtk/gtkcellrenderertext.go +7 -3
@@ -726,10 +726,12 @@ func (x *CellRendererText) GetPropertyWrapWidth() int {
726726 //
727727 // It is the responsibility of the application to update the model
728728 // and store @new_text at the position indicated by @path.
729-func (x *CellRendererText) ConnectEdited(cb *func(CellRendererText, string, string)) uint32 {
729+func (x *CellRendererText) ConnectEdited(cb *func(CellRendererText, string, string)) uint {
730730 cbPtr := uintptr(unsafe.Pointer(cb))
731731 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
732- return gobject.SignalConnect(x.GoPointer(), "edited", cbRefPtr)
732+ handlerID := gobject.SignalConnect(x.GoPointer(), "edited", cbRefPtr)
733+ glib.SaveHandlerMapping(handlerID, cbPtr)
734+ return handlerID
733735 }
734736
735737 fcb := func(clsPtr uintptr, PathVarp string, NewTextVarp string) {
@@ -742,7 +744,9 @@ func (x *CellRendererText) ConnectEdited(cb *func(CellRendererText, string, stri
742744 }
743745 cbRefPtr := purego.NewCallback(fcb)
744746 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
745- return gobject.SignalConnect(x.GoPointer(), "edited", cbRefPtr)
747+ handlerID := gobject.SignalConnect(x.GoPointer(), "edited", cbRefPtr)
748+ glib.SaveHandlerMapping(handlerID, cbPtr)
749+ return handlerID
746750 }
747751
748752 func init() {
M v4/gtk/gtkcellrenderertoggle.go +7 -3
@@ -197,10 +197,12 @@ func (x *CellRendererToggle) GetPropertyRadio() bool {
197197 // It is the responsibility of the application to update the model
198198 // with the correct value to store at @path. Often this is simply the
199199 // opposite of the value currently stored at @path.
200-func (x *CellRendererToggle) ConnectToggled(cb *func(CellRendererToggle, string)) uint32 {
200+func (x *CellRendererToggle) ConnectToggled(cb *func(CellRendererToggle, string)) uint {
201201 cbPtr := uintptr(unsafe.Pointer(cb))
202202 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
203- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
203+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
204+ glib.SaveHandlerMapping(handlerID, cbPtr)
205+ return handlerID
204206 }
205207
206208 fcb := func(clsPtr uintptr, PathVarp string) {
@@ -213,7 +215,9 @@ func (x *CellRendererToggle) ConnectToggled(cb *func(CellRendererToggle, string)
213215 }
214216 cbRefPtr := purego.NewCallback(fcb)
215217 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
216- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
218+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
219+ glib.SaveHandlerMapping(handlerID, cbPtr)
220+ return handlerID
217221 }
218222
219223 func init() {
M v4/gtk/gtkcheckbutton.go +14 -6
@@ -472,10 +472,12 @@ func (x *CheckButton) GetPropertyUseUnderline() bool {
472472 //
473473 // The default bindings for this signal are all forms of the
474474 // &lt;kbd&gt;␣&lt;/kbd&gt; and &lt;kbd&gt;Enter&lt;/kbd&gt; keys.
475-func (x *CheckButton) ConnectActivate(cb *func(CheckButton)) uint32 {
475+func (x *CheckButton) ConnectActivate(cb *func(CheckButton)) uint {
476476 cbPtr := uintptr(unsafe.Pointer(cb))
477477 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
478- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
478+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
479+ glib.SaveHandlerMapping(handlerID, cbPtr)
480+ return handlerID
479481 }
480482
481483 fcb := func(clsPtr uintptr) {
@@ -488,15 +490,19 @@ func (x *CheckButton) ConnectActivate(cb *func(CheckButton)) uint32 {
488490 }
489491 cbRefPtr := purego.NewCallback(fcb)
490492 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
491- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
493+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
494+ glib.SaveHandlerMapping(handlerID, cbPtr)
495+ return handlerID
492496 }
493497
494498 // Emitted when the buttons's [property@Gtk.CheckButton:active]
495499 // property changes.
496-func (x *CheckButton) ConnectToggled(cb *func(CheckButton)) uint32 {
500+func (x *CheckButton) ConnectToggled(cb *func(CheckButton)) uint {
497501 cbPtr := uintptr(unsafe.Pointer(cb))
498502 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
499- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
503+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
504+ glib.SaveHandlerMapping(handlerID, cbPtr)
505+ return handlerID
500506 }
501507
502508 fcb := func(clsPtr uintptr) {
@@ -509,7 +515,9 @@ func (x *CheckButton) ConnectToggled(cb *func(CheckButton)) uint32 {
509515 }
510516 cbRefPtr := purego.NewCallback(fcb)
511517 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
512- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
518+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
519+ glib.SaveHandlerMapping(handlerID, cbPtr)
520+ return handlerID
513521 }
514522
515523 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcolorbutton.go +14 -6
@@ -205,10 +205,12 @@ func (x *ColorButton) GetPropertyTitle() string {
205205 //
206206 // The `::activate` signal on `GtkMenuButton` is an action signal and
207207 // emitting it causes the button to pop up its dialog.
208-func (x *ColorButton) ConnectActivate(cb *func(ColorButton)) uint32 {
208+func (x *ColorButton) ConnectActivate(cb *func(ColorButton)) uint {
209209 cbPtr := uintptr(unsafe.Pointer(cb))
210210 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
211- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
211+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
212+ glib.SaveHandlerMapping(handlerID, cbPtr)
213+ return handlerID
212214 }
213215
214216 fcb := func(clsPtr uintptr) {
@@ -221,7 +223,9 @@ func (x *ColorButton) ConnectActivate(cb *func(ColorButton)) uint32 {
221223 }
222224 cbRefPtr := purego.NewCallback(fcb)
223225 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
224- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
226+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
227+ glib.SaveHandlerMapping(handlerID, cbPtr)
228+ return handlerID
225229 }
226230
227231 // Emitted when the user selects a color.
@@ -232,10 +236,12 @@ func (x *ColorButton) ConnectActivate(cb *func(ColorButton)) uint32 {
232236 // Note that this signal is only emitted when the user changes the color.
233237 // If you need to react to programmatic color changes as well, use
234238 // the notify::rgba signal.
235-func (x *ColorButton) ConnectColorSet(cb *func(ColorButton)) uint32 {
239+func (x *ColorButton) ConnectColorSet(cb *func(ColorButton)) uint {
236240 cbPtr := uintptr(unsafe.Pointer(cb))
237241 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
238- return gobject.SignalConnect(x.GoPointer(), "color-set", cbRefPtr)
242+ handlerID := gobject.SignalConnect(x.GoPointer(), "color-set", cbRefPtr)
243+ glib.SaveHandlerMapping(handlerID, cbPtr)
244+ return handlerID
239245 }
240246
241247 fcb := func(clsPtr uintptr) {
@@ -248,7 +254,9 @@ func (x *ColorButton) ConnectColorSet(cb *func(ColorButton)) uint32 {
248254 }
249255 cbRefPtr := purego.NewCallback(fcb)
250256 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
251- return gobject.SignalConnect(x.GoPointer(), "color-set", cbRefPtr)
257+ handlerID := gobject.SignalConnect(x.GoPointer(), "color-set", cbRefPtr)
258+ glib.SaveHandlerMapping(handlerID, cbPtr)
259+ return handlerID
252260 }
253261
254262 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcolordialogbutton.go +7 -3
@@ -181,10 +181,12 @@ func (x *ColorDialogButton) GetPropertyRgba() uintptr {
181181 //
182182 // The `::activate` signal on `GtkColorDialogButton` is an action signal
183183 // and emitting it causes the button to pop up its dialog.
184-func (x *ColorDialogButton) ConnectActivate(cb *func(ColorDialogButton)) uint32 {
184+func (x *ColorDialogButton) ConnectActivate(cb *func(ColorDialogButton)) uint {
185185 cbPtr := uintptr(unsafe.Pointer(cb))
186186 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
187- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
187+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
188+ glib.SaveHandlerMapping(handlerID, cbPtr)
189+ return handlerID
188190 }
189191
190192 fcb := func(clsPtr uintptr) {
@@ -197,7 +199,9 @@ func (x *ColorDialogButton) ConnectActivate(cb *func(ColorDialogButton)) uint32
197199 }
198200 cbRefPtr := purego.NewCallback(fcb)
199201 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
200- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
202+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
203+ glib.SaveHandlerMapping(handlerID, cbPtr)
204+ return handlerID
201205 }
202206
203207 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcolumnview.go +7 -3
@@ -554,10 +554,12 @@ func (x *ColumnView) GetPropertySingleClickActivate() bool {
554554 // This allows for a convenient way to handle activation in a columnview.
555555 // See [method@Gtk.ListItem.set_activatable] for details on how to use this
556556 // signal.
557-func (x *ColumnView) ConnectActivate(cb *func(ColumnView, uint)) uint32 {
557+func (x *ColumnView) ConnectActivate(cb *func(ColumnView, uint)) uint {
558558 cbPtr := uintptr(unsafe.Pointer(cb))
559559 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
560- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
560+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
561+ glib.SaveHandlerMapping(handlerID, cbPtr)
562+ return handlerID
561563 }
562564
563565 fcb := func(clsPtr uintptr, PositionVarp uint) {
@@ -570,7 +572,9 @@ func (x *ColumnView) ConnectActivate(cb *func(ColumnView, uint)) uint32 {
570572 }
571573 cbRefPtr := purego.NewCallback(fcb)
572574 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
573- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
575+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
576+ glib.SaveHandlerMapping(handlerID, cbPtr)
577+ return handlerID
574578 }
575579
576580 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcombobox.go +42 -18
@@ -779,10 +779,12 @@ func (x *ComboBox) GetPropertyPopupShown() bool {
779779 //
780780 // The `::activate` signal on `GtkComboBox` is an action signal and
781781 // emitting it causes the combo box to pop up its dropdown.
782-func (x *ComboBox) ConnectActivate(cb *func(ComboBox)) uint32 {
782+func (x *ComboBox) ConnectActivate(cb *func(ComboBox)) uint {
783783 cbPtr := uintptr(unsafe.Pointer(cb))
784784 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
785- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
785+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
786+ glib.SaveHandlerMapping(handlerID, cbPtr)
787+ return handlerID
786788 }
787789
788790 fcb := func(clsPtr uintptr) {
@@ -795,7 +797,9 @@ func (x *ComboBox) ConnectActivate(cb *func(ComboBox)) uint32 {
795797 }
796798 cbRefPtr := purego.NewCallback(fcb)
797799 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
798- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
800+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
801+ glib.SaveHandlerMapping(handlerID, cbPtr)
802+ return handlerID
799803 }
800804
801805 // Emitted when the active item is changed.
@@ -803,10 +807,12 @@ func (x *ComboBox) ConnectActivate(cb *func(ComboBox)) uint32 {
803807 // The can be due to the user selecting a different item from the list,
804808 // or due to a call to [method@Gtk.ComboBox.set_active_iter]. It will
805809 // also be emitted while typing into the entry of a combo box with an entry.
806-func (x *ComboBox) ConnectChanged(cb *func(ComboBox)) uint32 {
810+func (x *ComboBox) ConnectChanged(cb *func(ComboBox)) uint {
807811 cbPtr := uintptr(unsafe.Pointer(cb))
808812 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
809- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
813+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
814+ glib.SaveHandlerMapping(handlerID, cbPtr)
815+ return handlerID
810816 }
811817
812818 fcb := func(clsPtr uintptr) {
@@ -819,7 +825,9 @@ func (x *ComboBox) ConnectChanged(cb *func(ComboBox)) uint32 {
819825 }
820826 cbRefPtr := purego.NewCallback(fcb)
821827 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
822- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
828+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
829+ glib.SaveHandlerMapping(handlerID, cbPtr)
830+ return handlerID
823831 }
824832
825833 // Emitted to allow changing how the text in a combo box's entry is displayed.
@@ -856,10 +864,12 @@ func (x *ComboBox) ConnectChanged(cb *func(ComboBox)) uint32 {
856864 // }
857865 //
858866 // ```
859-func (x *ComboBox) ConnectFormatEntryText(cb *func(ComboBox, string) string) uint32 {
867+func (x *ComboBox) ConnectFormatEntryText(cb *func(ComboBox, string) string) uint {
860868 cbPtr := uintptr(unsafe.Pointer(cb))
861869 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
862- return gobject.SignalConnect(x.GoPointer(), "format-entry-text", cbRefPtr)
870+ handlerID := gobject.SignalConnect(x.GoPointer(), "format-entry-text", cbRefPtr)
871+ glib.SaveHandlerMapping(handlerID, cbPtr)
872+ return handlerID
863873 }
864874
865875 fcb := func(clsPtr uintptr, PathVarp string) string {
@@ -872,16 +882,20 @@ func (x *ComboBox) ConnectFormatEntryText(cb *func(ComboBox, string) string) uin
872882 }
873883 cbRefPtr := purego.NewCallback(fcb)
874884 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
875- return gobject.SignalConnect(x.GoPointer(), "format-entry-text", cbRefPtr)
885+ handlerID := gobject.SignalConnect(x.GoPointer(), "format-entry-text", cbRefPtr)
886+ glib.SaveHandlerMapping(handlerID, cbPtr)
887+ return handlerID
876888 }
877889
878890 // Emitted to move the active selection.
879891 //
880892 // This is an [keybinding signal](class.SignalAction.html).
881-func (x *ComboBox) ConnectMoveActive(cb *func(ComboBox, ScrollType)) uint32 {
893+func (x *ComboBox) ConnectMoveActive(cb *func(ComboBox, ScrollType)) uint {
882894 cbPtr := uintptr(unsafe.Pointer(cb))
883895 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
884- return gobject.SignalConnect(x.GoPointer(), "move-active", cbRefPtr)
896+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-active", cbRefPtr)
897+ glib.SaveHandlerMapping(handlerID, cbPtr)
898+ return handlerID
885899 }
886900
887901 fcb := func(clsPtr uintptr, ScrollTypeVarp ScrollType) {
@@ -894,7 +908,9 @@ func (x *ComboBox) ConnectMoveActive(cb *func(ComboBox, ScrollType)) uint32 {
894908 }
895909 cbRefPtr := purego.NewCallback(fcb)
896910 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
897- return gobject.SignalConnect(x.GoPointer(), "move-active", cbRefPtr)
911+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-active", cbRefPtr)
912+ glib.SaveHandlerMapping(handlerID, cbPtr)
913+ return handlerID
898914 }
899915
900916 // Emitted to popdown the combo box list.
@@ -902,10 +918,12 @@ func (x *ComboBox) ConnectMoveActive(cb *func(ComboBox, ScrollType)) uint32 {
902918 // This is an [keybinding signal](class.SignalAction.html).
903919 //
904920 // The default bindings for this signal are Alt+Up and Escape.
905-func (x *ComboBox) ConnectPopdown(cb *func(ComboBox) bool) uint32 {
921+func (x *ComboBox) ConnectPopdown(cb *func(ComboBox) bool) uint {
906922 cbPtr := uintptr(unsafe.Pointer(cb))
907923 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
908- return gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
924+ handlerID := gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
925+ glib.SaveHandlerMapping(handlerID, cbPtr)
926+ return handlerID
909927 }
910928
911929 fcb := func(clsPtr uintptr) bool {
@@ -918,7 +936,9 @@ func (x *ComboBox) ConnectPopdown(cb *func(ComboBox) bool) uint32 {
918936 }
919937 cbRefPtr := purego.NewCallback(fcb)
920938 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
921- return gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
939+ handlerID := gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
940+ glib.SaveHandlerMapping(handlerID, cbPtr)
941+ return handlerID
922942 }
923943
924944 // Emitted to popup the combo box list.
@@ -926,10 +946,12 @@ func (x *ComboBox) ConnectPopdown(cb *func(ComboBox) bool) uint32 {
926946 // This is an [keybinding signal](class.SignalAction.html).
927947 //
928948 // The default binding for this signal is Alt+Down.
929-func (x *ComboBox) ConnectPopup(cb *func(ComboBox)) uint32 {
949+func (x *ComboBox) ConnectPopup(cb *func(ComboBox)) uint {
930950 cbPtr := uintptr(unsafe.Pointer(cb))
931951 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
932- return gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
952+ handlerID := gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
953+ glib.SaveHandlerMapping(handlerID, cbPtr)
954+ return handlerID
933955 }
934956
935957 fcb := func(clsPtr uintptr) {
@@ -942,7 +964,9 @@ func (x *ComboBox) ConnectPopup(cb *func(ComboBox)) uint32 {
942964 }
943965 cbRefPtr := purego.NewCallback(fcb)
944966 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
945- return gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
967+ handlerID := gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
968+ glib.SaveHandlerMapping(handlerID, cbPtr)
969+ return handlerID
946970 }
947971
948972 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkcssprovider.go +7 -3
@@ -220,10 +220,12 @@ func (c *CssProvider) SetGoPointer(ptr uintptr) {
220220 // Note that this signal may be emitted at any time as the css provider
221221 // may opt to defer parsing parts or all of the input to a later time
222222 // than when a loading function was called.
223-func (x *CssProvider) ConnectParsingError(cb *func(CssProvider, uintptr, uintptr)) uint32 {
223+func (x *CssProvider) ConnectParsingError(cb *func(CssProvider, uintptr, uintptr)) uint {
224224 cbPtr := uintptr(unsafe.Pointer(cb))
225225 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
226- return gobject.SignalConnect(x.GoPointer(), "parsing-error", cbRefPtr)
226+ handlerID := gobject.SignalConnect(x.GoPointer(), "parsing-error", cbRefPtr)
227+ glib.SaveHandlerMapping(handlerID, cbPtr)
228+ return handlerID
227229 }
228230
229231 fcb := func(clsPtr uintptr, SectionVarp uintptr, ErrorVarp uintptr) {
@@ -236,7 +238,9 @@ func (x *CssProvider) ConnectParsingError(cb *func(CssProvider, uintptr, uintptr
236238 }
237239 cbRefPtr := purego.NewCallback(fcb)
238240 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
239- return gobject.SignalConnect(x.GoPointer(), "parsing-error", cbRefPtr)
241+ handlerID := gobject.SignalConnect(x.GoPointer(), "parsing-error", cbRefPtr)
242+ glib.SaveHandlerMapping(handlerID, cbPtr)
243+ return handlerID
240244 }
241245
242246 func init() {
M v4/gtk/gtkdialog.go +14 -6
@@ -586,10 +586,12 @@ func (x *Dialog) GetPropertyUseHeaderBar() int {
586586 // This is a [keybinding signal](class.SignalAction.html).
587587 //
588588 // The default binding for this signal is the Escape key.
589-func (x *Dialog) ConnectClose(cb *func(Dialog)) uint32 {
589+func (x *Dialog) ConnectClose(cb *func(Dialog)) uint {
590590 cbPtr := uintptr(unsafe.Pointer(cb))
591591 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
592- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
592+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
593+ glib.SaveHandlerMapping(handlerID, cbPtr)
594+ return handlerID
593595 }
594596
595597 fcb := func(clsPtr uintptr) {
@@ -602,7 +604,9 @@ func (x *Dialog) ConnectClose(cb *func(Dialog)) uint32 {
602604 }
603605 cbRefPtr := purego.NewCallback(fcb)
604606 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
605- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
607+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
608+ glib.SaveHandlerMapping(handlerID, cbPtr)
609+ return handlerID
606610 }
607611
608612 // Emitted when an action widget is clicked.
@@ -611,10 +615,12 @@ func (x *Dialog) ConnectClose(cb *func(Dialog)) uint32 {
611615 // delete event, and when [method@Gtk.Dialog.response] is called.
612616 // On a delete event, the response ID is %GTK_RESPONSE_DELETE_EVENT.
613617 // Otherwise, it depends on which action widget was clicked.
614-func (x *Dialog) ConnectResponse(cb *func(Dialog, int)) uint32 {
618+func (x *Dialog) ConnectResponse(cb *func(Dialog, int)) uint {
615619 cbPtr := uintptr(unsafe.Pointer(cb))
616620 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
617- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
621+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
622+ glib.SaveHandlerMapping(handlerID, cbPtr)
623+ return handlerID
618624 }
619625
620626 fcb := func(clsPtr uintptr, ResponseIdVarp int) {
@@ -627,7 +633,9 @@ func (x *Dialog) ConnectResponse(cb *func(Dialog, int)) uint32 {
627633 }
628634 cbRefPtr := purego.NewCallback(fcb)
629635 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
630- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
636+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
637+ glib.SaveHandlerMapping(handlerID, cbPtr)
638+ return handlerID
631639 }
632640
633641 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkdragsource.go +28 -12
@@ -258,10 +258,12 @@ func (c *DragSource) SetGoPointer(ptr uintptr) {
258258 //
259259 // It can be used to e.g. set a custom drag icon with
260260 // [method@Gtk.DragSource.set_icon].
261-func (x *DragSource) ConnectDragBegin(cb *func(DragSource, uintptr)) uint32 {
261+func (x *DragSource) ConnectDragBegin(cb *func(DragSource, uintptr)) uint {
262262 cbPtr := uintptr(unsafe.Pointer(cb))
263263 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
264- return gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
264+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
265+ glib.SaveHandlerMapping(handlerID, cbPtr)
266+ return handlerID
265267 }
266268
267269 fcb := func(clsPtr uintptr, DragVarp uintptr) {
@@ -274,7 +276,9 @@ func (x *DragSource) ConnectDragBegin(cb *func(DragSource, uintptr)) uint32 {
274276 }
275277 cbRefPtr := purego.NewCallback(fcb)
276278 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
277- return gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
279+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
280+ glib.SaveHandlerMapping(handlerID, cbPtr)
281+ return handlerID
278282 }
279283
280284 // Emitted on the drag source when a drag has failed.
@@ -282,10 +286,12 @@ func (x *DragSource) ConnectDragBegin(cb *func(DragSource, uintptr)) uint32 {
282286 // The signal handler may handle a failed drag operation based on
283287 // the type of error. It should return %TRUE if the failure has been handled
284288 // and the default "drag operation failed" animation should not be shown.
285-func (x *DragSource) ConnectDragCancel(cb *func(DragSource, uintptr, gdk.DragCancelReason) bool) uint32 {
289+func (x *DragSource) ConnectDragCancel(cb *func(DragSource, uintptr, gdk.DragCancelReason) bool) uint {
286290 cbPtr := uintptr(unsafe.Pointer(cb))
287291 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
288- return gobject.SignalConnect(x.GoPointer(), "drag-cancel", cbRefPtr)
292+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-cancel", cbRefPtr)
293+ glib.SaveHandlerMapping(handlerID, cbPtr)
294+ return handlerID
289295 }
290296
291297 fcb := func(clsPtr uintptr, DragVarp uintptr, ReasonVarp gdk.DragCancelReason) bool {
@@ -298,7 +304,9 @@ func (x *DragSource) ConnectDragCancel(cb *func(DragSource, uintptr, gdk.DragCan
298304 }
299305 cbRefPtr := purego.NewCallback(fcb)
300306 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
301- return gobject.SignalConnect(x.GoPointer(), "drag-cancel", cbRefPtr)
307+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-cancel", cbRefPtr)
308+ glib.SaveHandlerMapping(handlerID, cbPtr)
309+ return handlerID
302310 }
303311
304312 // Emitted on the drag source when a drag is finished.
@@ -306,10 +314,12 @@ func (x *DragSource) ConnectDragCancel(cb *func(DragSource, uintptr, gdk.DragCan
306314 // A typical reason to connect to this signal is to undo
307315 // things done in [signal@Gtk.DragSource::prepare] or
308316 // [signal@Gtk.DragSource::drag-begin] handlers.
309-func (x *DragSource) ConnectDragEnd(cb *func(DragSource, uintptr, bool)) uint32 {
317+func (x *DragSource) ConnectDragEnd(cb *func(DragSource, uintptr, bool)) uint {
310318 cbPtr := uintptr(unsafe.Pointer(cb))
311319 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
312- return gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
320+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
321+ glib.SaveHandlerMapping(handlerID, cbPtr)
322+ return handlerID
313323 }
314324
315325 fcb := func(clsPtr uintptr, DragVarp uintptr, DeleteDataVarp bool) {
@@ -322,7 +332,9 @@ func (x *DragSource) ConnectDragEnd(cb *func(DragSource, uintptr, bool)) uint32
322332 }
323333 cbRefPtr := purego.NewCallback(fcb)
324334 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
325- return gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
335+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
336+ glib.SaveHandlerMapping(handlerID, cbPtr)
337+ return handlerID
326338 }
327339
328340 // Emitted when a drag is about to be initiated.
@@ -331,10 +343,12 @@ func (x *DragSource) ConnectDragEnd(cb *func(DragSource, uintptr, bool)) uint32
331343 // to start. The default handler for this signal returns the value of
332344 // the [property@Gtk.DragSource:content] property, so if you set up that
333345 // property ahead of time, you don't need to connect to this signal.
334-func (x *DragSource) ConnectPrepare(cb *func(DragSource, float64, float64) gdk.ContentProvider) uint32 {
346+func (x *DragSource) ConnectPrepare(cb *func(DragSource, float64, float64) gdk.ContentProvider) uint {
335347 cbPtr := uintptr(unsafe.Pointer(cb))
336348 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
337- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
349+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
350+ glib.SaveHandlerMapping(handlerID, cbPtr)
351+ return handlerID
338352 }
339353
340354 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) uintptr {
@@ -348,7 +362,9 @@ func (x *DragSource) ConnectPrepare(cb *func(DragSource, float64, float64) gdk.C
348362 }
349363 cbRefPtr := purego.NewCallback(fcb)
350364 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
351- return gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
365+ handlerID := gobject.SignalConnect(x.GoPointer(), "prepare", cbRefPtr)
366+ glib.SaveHandlerMapping(handlerID, cbPtr)
367+ return handlerID
352368 }
353369
354370 func init() {
M v4/gtk/gtkdrawingarea.go +7 -3
@@ -330,10 +330,12 @@ func (x *DrawingArea) GetPropertyContentWidth() int {
330330 //
331331 // This is useful in order to keep state up to date with the widget size,
332332 // like for instance a backing surface.
333-func (x *DrawingArea) ConnectResize(cb *func(DrawingArea, int, int)) uint32 {
333+func (x *DrawingArea) ConnectResize(cb *func(DrawingArea, int, int)) uint {
334334 cbPtr := uintptr(unsafe.Pointer(cb))
335335 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
336- return gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
336+ handlerID := gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
337+ glib.SaveHandlerMapping(handlerID, cbPtr)
338+ return handlerID
337339 }
338340
339341 fcb := func(clsPtr uintptr, WidthVarp int, HeightVarp int) {
@@ -346,7 +348,9 @@ func (x *DrawingArea) ConnectResize(cb *func(DrawingArea, int, int)) uint32 {
346348 }
347349 cbRefPtr := purego.NewCallback(fcb)
348350 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
349- return gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
351+ handlerID := gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
352+ glib.SaveHandlerMapping(handlerID, cbPtr)
353+ return handlerID
350354 }
351355
352356 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkdropcontrollermotion.go +21 -9
@@ -143,10 +143,12 @@ func (x *DropControllerMotion) GetPropertyIsPointer() bool {
143143 }
144144
145145 // Signals that the pointer has entered the widget.
146-func (x *DropControllerMotion) ConnectEnter(cb *func(DropControllerMotion, float64, float64)) uint32 {
146+func (x *DropControllerMotion) ConnectEnter(cb *func(DropControllerMotion, float64, float64)) uint {
147147 cbPtr := uintptr(unsafe.Pointer(cb))
148148 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
149- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
149+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
150+ glib.SaveHandlerMapping(handlerID, cbPtr)
151+ return handlerID
150152 }
151153
152154 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -159,14 +161,18 @@ func (x *DropControllerMotion) ConnectEnter(cb *func(DropControllerMotion, float
159161 }
160162 cbRefPtr := purego.NewCallback(fcb)
161163 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
162- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
164+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
165+ glib.SaveHandlerMapping(handlerID, cbPtr)
166+ return handlerID
163167 }
164168
165169 // Signals that the pointer has left the widget.
166-func (x *DropControllerMotion) ConnectLeave(cb *func(DropControllerMotion)) uint32 {
170+func (x *DropControllerMotion) ConnectLeave(cb *func(DropControllerMotion)) uint {
167171 cbPtr := uintptr(unsafe.Pointer(cb))
168172 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
169- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
173+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
174+ glib.SaveHandlerMapping(handlerID, cbPtr)
175+ return handlerID
170176 }
171177
172178 fcb := func(clsPtr uintptr) {
@@ -179,14 +185,18 @@ func (x *DropControllerMotion) ConnectLeave(cb *func(DropControllerMotion)) uint
179185 }
180186 cbRefPtr := purego.NewCallback(fcb)
181187 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
182- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
188+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
189+ glib.SaveHandlerMapping(handlerID, cbPtr)
190+ return handlerID
183191 }
184192
185193 // Emitted when the pointer moves inside the widget.
186-func (x *DropControllerMotion) ConnectMotion(cb *func(DropControllerMotion, float64, float64)) uint32 {
194+func (x *DropControllerMotion) ConnectMotion(cb *func(DropControllerMotion, float64, float64)) uint {
187195 cbPtr := uintptr(unsafe.Pointer(cb))
188196 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
189- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
197+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
198+ glib.SaveHandlerMapping(handlerID, cbPtr)
199+ return handlerID
190200 }
191201
192202 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -199,7 +209,9 @@ func (x *DropControllerMotion) ConnectMotion(cb *func(DropControllerMotion, floa
199209 }
200210 cbRefPtr := purego.NewCallback(fcb)
201211 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
202- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
212+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
213+ glib.SaveHandlerMapping(handlerID, cbPtr)
214+ return handlerID
203215 }
204216
205217 func init() {
M v4/gtk/gtkdropdown.go +7 -3
@@ -453,10 +453,12 @@ func (x *DropDown) GetPropertyShowArrow() bool {
453453 //
454454 // The `::activate` signal on `GtkDropDown` is an action signal and
455455 // emitting it causes the drop down to pop up its dropdown.
456-func (x *DropDown) ConnectActivate(cb *func(DropDown)) uint32 {
456+func (x *DropDown) ConnectActivate(cb *func(DropDown)) uint {
457457 cbPtr := uintptr(unsafe.Pointer(cb))
458458 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
459- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
459+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
460+ glib.SaveHandlerMapping(handlerID, cbPtr)
461+ return handlerID
460462 }
461463
462464 fcb := func(clsPtr uintptr) {
@@ -469,7 +471,9 @@ func (x *DropDown) ConnectActivate(cb *func(DropDown)) uint32 {
469471 }
470472 cbRefPtr := purego.NewCallback(fcb)
471473 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
472- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
474+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
475+ glib.SaveHandlerMapping(handlerID, cbPtr)
476+ return handlerID
473477 }
474478
475479 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkdroptarget.go +35 -15
@@ -378,10 +378,12 @@ func (x *DropTarget) GetPropertyValue() uintptr {
378378 // [property@Gtk.DropTarget:preload] property should be set and the value
379379 // should be inspected via the ::notify:value signal, calling
380380 // [method@Gtk.DropTarget.reject] if required.
381-func (x *DropTarget) ConnectAccept(cb *func(DropTarget, uintptr) bool) uint32 {
381+func (x *DropTarget) ConnectAccept(cb *func(DropTarget, uintptr) bool) uint {
382382 cbPtr := uintptr(unsafe.Pointer(cb))
383383 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
384- return gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
384+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
385+ glib.SaveHandlerMapping(handlerID, cbPtr)
386+ return handlerID
385387 }
386388
387389 fcb := func(clsPtr uintptr, DropVarp uintptr) bool {
@@ -394,7 +396,9 @@ func (x *DropTarget) ConnectAccept(cb *func(DropTarget, uintptr) bool) uint32 {
394396 }
395397 cbRefPtr := purego.NewCallback(fcb)
396398 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
397- return gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
399+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
400+ glib.SaveHandlerMapping(handlerID, cbPtr)
401+ return handlerID
398402 }
399403
400404 // Emitted on the drop site when the user drops the data onto the widget.
@@ -406,10 +410,12 @@ func (x *DropTarget) ConnectAccept(cb *func(DropTarget, uintptr) bool) uint32 {
406410 // Otherwise, the handler returns %TRUE. In this case, this handler will
407411 // accept the drop. The handler is responsible for using the given @value
408412 // and performing the drop operation.
409-func (x *DropTarget) ConnectDrop(cb *func(DropTarget, uintptr, float64, float64) bool) uint32 {
413+func (x *DropTarget) ConnectDrop(cb *func(DropTarget, uintptr, float64, float64) bool) uint {
410414 cbPtr := uintptr(unsafe.Pointer(cb))
411415 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
412- return gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
416+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
417+ glib.SaveHandlerMapping(handlerID, cbPtr)
418+ return handlerID
413419 }
414420
415421 fcb := func(clsPtr uintptr, ValueVarp uintptr, XVarp float64, YVarp float64) bool {
@@ -422,16 +428,20 @@ func (x *DropTarget) ConnectDrop(cb *func(DropTarget, uintptr, float64, float64)
422428 }
423429 cbRefPtr := purego.NewCallback(fcb)
424430 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
425- return gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
431+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
432+ glib.SaveHandlerMapping(handlerID, cbPtr)
433+ return handlerID
426434 }
427435
428436 // Emitted on the drop site when the pointer enters the widget.
429437 //
430438 // It can be used to set up custom highlighting.
431-func (x *DropTarget) ConnectEnter(cb *func(DropTarget, float64, float64) gdk.DragAction) uint32 {
439+func (x *DropTarget) ConnectEnter(cb *func(DropTarget, float64, float64) gdk.DragAction) uint {
432440 cbPtr := uintptr(unsafe.Pointer(cb))
433441 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
434- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
442+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
443+ glib.SaveHandlerMapping(handlerID, cbPtr)
444+ return handlerID
435445 }
436446
437447 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) gdk.DragAction {
@@ -444,17 +454,21 @@ func (x *DropTarget) ConnectEnter(cb *func(DropTarget, float64, float64) gdk.Dra
444454 }
445455 cbRefPtr := purego.NewCallback(fcb)
446456 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
447- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
457+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
458+ glib.SaveHandlerMapping(handlerID, cbPtr)
459+ return handlerID
448460 }
449461
450462 // Emitted on the drop site when the pointer leaves the widget.
451463 //
452464 // Its main purpose it to undo things done in
453465 // [signal@Gtk.DropTarget::enter].
454-func (x *DropTarget) ConnectLeave(cb *func(DropTarget)) uint32 {
466+func (x *DropTarget) ConnectLeave(cb *func(DropTarget)) uint {
455467 cbPtr := uintptr(unsafe.Pointer(cb))
456468 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
457- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
469+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
470+ glib.SaveHandlerMapping(handlerID, cbPtr)
471+ return handlerID
458472 }
459473
460474 fcb := func(clsPtr uintptr) {
@@ -467,14 +481,18 @@ func (x *DropTarget) ConnectLeave(cb *func(DropTarget)) uint32 {
467481 }
468482 cbRefPtr := purego.NewCallback(fcb)
469483 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
470- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
484+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
485+ glib.SaveHandlerMapping(handlerID, cbPtr)
486+ return handlerID
471487 }
472488
473489 // Emitted while the pointer is moving over the drop target.
474-func (x *DropTarget) ConnectMotion(cb *func(DropTarget, float64, float64) gdk.DragAction) uint32 {
490+func (x *DropTarget) ConnectMotion(cb *func(DropTarget, float64, float64) gdk.DragAction) uint {
475491 cbPtr := uintptr(unsafe.Pointer(cb))
476492 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
477- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
493+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
494+ glib.SaveHandlerMapping(handlerID, cbPtr)
495+ return handlerID
478496 }
479497
480498 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) gdk.DragAction {
@@ -487,7 +505,9 @@ func (x *DropTarget) ConnectMotion(cb *func(DropTarget, float64, float64) gdk.Dr
487505 }
488506 cbRefPtr := purego.NewCallback(fcb)
489507 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
490- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
508+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
509+ glib.SaveHandlerMapping(handlerID, cbPtr)
510+ return handlerID
491511 }
492512
493513 func init() {
M v4/gtk/gtkdroptargetasync.go +35 -15
@@ -182,10 +182,12 @@ func (x *DropTargetAsync) GetPropertyFormats() uintptr {
182182 // further processing, such as inspecting the data, this function should
183183 // return %TRUE and proceed as is @drop was accepted and if it decides to
184184 // reject the drop later, it should call [method@Gtk.DropTargetAsync.reject_drop].
185-func (x *DropTargetAsync) ConnectAccept(cb *func(DropTargetAsync, uintptr) bool) uint32 {
185+func (x *DropTargetAsync) ConnectAccept(cb *func(DropTargetAsync, uintptr) bool) uint {
186186 cbPtr := uintptr(unsafe.Pointer(cb))
187187 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
188- return gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
188+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
189+ glib.SaveHandlerMapping(handlerID, cbPtr)
190+ return handlerID
189191 }
190192
191193 fcb := func(clsPtr uintptr, DropVarp uintptr) bool {
@@ -198,16 +200,20 @@ func (x *DropTargetAsync) ConnectAccept(cb *func(DropTargetAsync, uintptr) bool)
198200 }
199201 cbRefPtr := purego.NewCallback(fcb)
200202 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
201- return gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
203+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept", cbRefPtr)
204+ glib.SaveHandlerMapping(handlerID, cbPtr)
205+ return handlerID
202206 }
203207
204208 // Emitted on the drop site when the pointer enters the widget.
205209 //
206210 // It can be used to set up custom highlighting.
207-func (x *DropTargetAsync) ConnectDragEnter(cb *func(DropTargetAsync, uintptr, float64, float64) gdk.DragAction) uint32 {
211+func (x *DropTargetAsync) ConnectDragEnter(cb *func(DropTargetAsync, uintptr, float64, float64) gdk.DragAction) uint {
208212 cbPtr := uintptr(unsafe.Pointer(cb))
209213 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
210- return gobject.SignalConnect(x.GoPointer(), "drag-enter", cbRefPtr)
214+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-enter", cbRefPtr)
215+ glib.SaveHandlerMapping(handlerID, cbPtr)
216+ return handlerID
211217 }
212218
213219 fcb := func(clsPtr uintptr, DropVarp uintptr, XVarp float64, YVarp float64) gdk.DragAction {
@@ -220,17 +226,21 @@ func (x *DropTargetAsync) ConnectDragEnter(cb *func(DropTargetAsync, uintptr, fl
220226 }
221227 cbRefPtr := purego.NewCallback(fcb)
222228 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
223- return gobject.SignalConnect(x.GoPointer(), "drag-enter", cbRefPtr)
229+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-enter", cbRefPtr)
230+ glib.SaveHandlerMapping(handlerID, cbPtr)
231+ return handlerID
224232 }
225233
226234 // Emitted on the drop site when the pointer leaves the widget.
227235 //
228236 // Its main purpose it to undo things done in
229237 // `GtkDropTargetAsync`::drag-enter.
230-func (x *DropTargetAsync) ConnectDragLeave(cb *func(DropTargetAsync, uintptr)) uint32 {
238+func (x *DropTargetAsync) ConnectDragLeave(cb *func(DropTargetAsync, uintptr)) uint {
231239 cbPtr := uintptr(unsafe.Pointer(cb))
232240 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
233- return gobject.SignalConnect(x.GoPointer(), "drag-leave", cbRefPtr)
241+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-leave", cbRefPtr)
242+ glib.SaveHandlerMapping(handlerID, cbPtr)
243+ return handlerID
234244 }
235245
236246 fcb := func(clsPtr uintptr, DropVarp uintptr) {
@@ -243,14 +253,18 @@ func (x *DropTargetAsync) ConnectDragLeave(cb *func(DropTargetAsync, uintptr)) u
243253 }
244254 cbRefPtr := purego.NewCallback(fcb)
245255 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
246- return gobject.SignalConnect(x.GoPointer(), "drag-leave", cbRefPtr)
256+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-leave", cbRefPtr)
257+ glib.SaveHandlerMapping(handlerID, cbPtr)
258+ return handlerID
247259 }
248260
249261 // Emitted while the pointer is moving over the drop target.
250-func (x *DropTargetAsync) ConnectDragMotion(cb *func(DropTargetAsync, uintptr, float64, float64) gdk.DragAction) uint32 {
262+func (x *DropTargetAsync) ConnectDragMotion(cb *func(DropTargetAsync, uintptr, float64, float64) gdk.DragAction) uint {
251263 cbPtr := uintptr(unsafe.Pointer(cb))
252264 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
253- return gobject.SignalConnect(x.GoPointer(), "drag-motion", cbRefPtr)
265+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-motion", cbRefPtr)
266+ glib.SaveHandlerMapping(handlerID, cbPtr)
267+ return handlerID
254268 }
255269
256270 fcb := func(clsPtr uintptr, DropVarp uintptr, XVarp float64, YVarp float64) gdk.DragAction {
@@ -263,7 +277,9 @@ func (x *DropTargetAsync) ConnectDragMotion(cb *func(DropTargetAsync, uintptr, f
263277 }
264278 cbRefPtr := purego.NewCallback(fcb)
265279 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
266- return gobject.SignalConnect(x.GoPointer(), "drag-motion", cbRefPtr)
280+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-motion", cbRefPtr)
281+ glib.SaveHandlerMapping(handlerID, cbPtr)
282+ return handlerID
267283 }
268284
269285 // Emitted on the drop site when the user drops the data onto the widget.
@@ -280,10 +296,12 @@ func (x *DropTargetAsync) ConnectDragMotion(cb *func(DropTargetAsync, uintptr, f
280296 // To receive the data, use one of the read functions provided by
281297 // [class@Gdk.Drop] such as [method@Gdk.Drop.read_async] or
282298 // [method@Gdk.Drop.read_value_async].
283-func (x *DropTargetAsync) ConnectDrop(cb *func(DropTargetAsync, uintptr, float64, float64) bool) uint32 {
299+func (x *DropTargetAsync) ConnectDrop(cb *func(DropTargetAsync, uintptr, float64, float64) bool) uint {
284300 cbPtr := uintptr(unsafe.Pointer(cb))
285301 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
286- return gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
302+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
303+ glib.SaveHandlerMapping(handlerID, cbPtr)
304+ return handlerID
287305 }
288306
289307 fcb := func(clsPtr uintptr, DropVarp uintptr, XVarp float64, YVarp float64) bool {
@@ -296,7 +314,9 @@ func (x *DropTargetAsync) ConnectDrop(cb *func(DropTargetAsync, uintptr, float64
296314 }
297315 cbRefPtr := purego.NewCallback(fcb)
298316 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
299- return gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
317+ handlerID := gobject.SignalConnect(x.GoPointer(), "drop", cbRefPtr)
318+ glib.SaveHandlerMapping(handlerID, cbPtr)
319+ return handlerID
300320 }
301321
302322 func init() {
M v4/gtk/gtkemojichooser.go +7 -3
@@ -114,10 +114,12 @@ func (c *EmojiChooser) SetGoPointer(ptr uintptr) {
114114 }
115115
116116 // Emitted when the user selects an Emoji.
117-func (x *EmojiChooser) ConnectEmojiPicked(cb *func(EmojiChooser, string)) uint32 {
117+func (x *EmojiChooser) ConnectEmojiPicked(cb *func(EmojiChooser, string)) uint {
118118 cbPtr := uintptr(unsafe.Pointer(cb))
119119 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
120- return gobject.SignalConnect(x.GoPointer(), "emoji-picked", cbRefPtr)
120+ handlerID := gobject.SignalConnect(x.GoPointer(), "emoji-picked", cbRefPtr)
121+ glib.SaveHandlerMapping(handlerID, cbPtr)
122+ return handlerID
121123 }
122124
123125 fcb := func(clsPtr uintptr, TextVarp string) {
@@ -130,7 +132,9 @@ func (x *EmojiChooser) ConnectEmojiPicked(cb *func(EmojiChooser, string)) uint32
130132 }
131133 cbRefPtr := purego.NewCallback(fcb)
132134 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
133- return gobject.SignalConnect(x.GoPointer(), "emoji-picked", cbRefPtr)
135+ handlerID := gobject.SignalConnect(x.GoPointer(), "emoji-picked", cbRefPtr)
136+ glib.SaveHandlerMapping(handlerID, cbPtr)
137+ return handlerID
134138 }
135139
136140 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkentry.go +21 -9
@@ -1685,10 +1685,12 @@ func (x *Entry) GetPropertyVisibility() bool {
16851685 // Emitted when the entry is activated.
16861686 //
16871687 // The keybindings for this signal are all forms of the Enter key.
1688-func (x *Entry) ConnectActivate(cb *func(Entry)) uint32 {
1688+func (x *Entry) ConnectActivate(cb *func(Entry)) uint {
16891689 cbPtr := uintptr(unsafe.Pointer(cb))
16901690 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1691- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1691+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1692+ glib.SaveHandlerMapping(handlerID, cbPtr)
1693+ return handlerID
16921694 }
16931695
16941696 fcb := func(clsPtr uintptr) {
@@ -1701,14 +1703,18 @@ func (x *Entry) ConnectActivate(cb *func(Entry)) uint32 {
17011703 }
17021704 cbRefPtr := purego.NewCallback(fcb)
17031705 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1704- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1706+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1707+ glib.SaveHandlerMapping(handlerID, cbPtr)
1708+ return handlerID
17051709 }
17061710
17071711 // Emitted when an activatable icon is clicked.
1708-func (x *Entry) ConnectIconPress(cb *func(Entry, EntryIconPosition)) uint32 {
1712+func (x *Entry) ConnectIconPress(cb *func(Entry, EntryIconPosition)) uint {
17091713 cbPtr := uintptr(unsafe.Pointer(cb))
17101714 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1711- return gobject.SignalConnect(x.GoPointer(), "icon-press", cbRefPtr)
1715+ handlerID := gobject.SignalConnect(x.GoPointer(), "icon-press", cbRefPtr)
1716+ glib.SaveHandlerMapping(handlerID, cbPtr)
1717+ return handlerID
17121718 }
17131719
17141720 fcb := func(clsPtr uintptr, IconPosVarp EntryIconPosition) {
@@ -1721,15 +1727,19 @@ func (x *Entry) ConnectIconPress(cb *func(Entry, EntryIconPosition)) uint32 {
17211727 }
17221728 cbRefPtr := purego.NewCallback(fcb)
17231729 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1724- return gobject.SignalConnect(x.GoPointer(), "icon-press", cbRefPtr)
1730+ handlerID := gobject.SignalConnect(x.GoPointer(), "icon-press", cbRefPtr)
1731+ glib.SaveHandlerMapping(handlerID, cbPtr)
1732+ return handlerID
17251733 }
17261734
17271735 // Emitted on the button release from a mouse click
17281736 // over an activatable icon.
1729-func (x *Entry) ConnectIconRelease(cb *func(Entry, EntryIconPosition)) uint32 {
1737+func (x *Entry) ConnectIconRelease(cb *func(Entry, EntryIconPosition)) uint {
17301738 cbPtr := uintptr(unsafe.Pointer(cb))
17311739 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1732- return gobject.SignalConnect(x.GoPointer(), "icon-release", cbRefPtr)
1740+ handlerID := gobject.SignalConnect(x.GoPointer(), "icon-release", cbRefPtr)
1741+ glib.SaveHandlerMapping(handlerID, cbPtr)
1742+ return handlerID
17331743 }
17341744
17351745 fcb := func(clsPtr uintptr, IconPosVarp EntryIconPosition) {
@@ -1742,7 +1752,9 @@ func (x *Entry) ConnectIconRelease(cb *func(Entry, EntryIconPosition)) uint32 {
17421752 }
17431753 cbRefPtr := purego.NewCallback(fcb)
17441754 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1745- return gobject.SignalConnect(x.GoPointer(), "icon-release", cbRefPtr)
1755+ handlerID := gobject.SignalConnect(x.GoPointer(), "icon-release", cbRefPtr)
1756+ glib.SaveHandlerMapping(handlerID, cbPtr)
1757+ return handlerID
17461758 }
17471759
17481760 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkentrybuffer.go +14 -6
@@ -606,10 +606,12 @@ func (x *EntryBuffer) GetPropertyText() string {
606606 //
607607 // If you want access to the text after the text has been modified,
608608 // use %G_CONNECT_AFTER.
609-func (x *EntryBuffer) ConnectDeletedText(cb *func(EntryBuffer, uint, uint)) uint32 {
609+func (x *EntryBuffer) ConnectDeletedText(cb *func(EntryBuffer, uint, uint)) uint {
610610 cbPtr := uintptr(unsafe.Pointer(cb))
611611 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
612- return gobject.SignalConnect(x.GoPointer(), "deleted-text", cbRefPtr)
612+ handlerID := gobject.SignalConnect(x.GoPointer(), "deleted-text", cbRefPtr)
613+ glib.SaveHandlerMapping(handlerID, cbPtr)
614+ return handlerID
613615 }
614616
615617 fcb := func(clsPtr uintptr, PositionVarp uint, NCharsVarp uint) {
@@ -622,14 +624,18 @@ func (x *EntryBuffer) ConnectDeletedText(cb *func(EntryBuffer, uint, uint)) uint
622624 }
623625 cbRefPtr := purego.NewCallback(fcb)
624626 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
625- return gobject.SignalConnect(x.GoPointer(), "deleted-text", cbRefPtr)
627+ handlerID := gobject.SignalConnect(x.GoPointer(), "deleted-text", cbRefPtr)
628+ glib.SaveHandlerMapping(handlerID, cbPtr)
629+ return handlerID
626630 }
627631
628632 // This signal is emitted after text is inserted into the buffer.
629-func (x *EntryBuffer) ConnectInsertedText(cb *func(EntryBuffer, uint, string, uint)) uint32 {
633+func (x *EntryBuffer) ConnectInsertedText(cb *func(EntryBuffer, uint, string, uint)) uint {
630634 cbPtr := uintptr(unsafe.Pointer(cb))
631635 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
632- return gobject.SignalConnect(x.GoPointer(), "inserted-text", cbRefPtr)
636+ handlerID := gobject.SignalConnect(x.GoPointer(), "inserted-text", cbRefPtr)
637+ glib.SaveHandlerMapping(handlerID, cbPtr)
638+ return handlerID
633639 }
634640
635641 fcb := func(clsPtr uintptr, PositionVarp uint, CharsVarp string, NCharsVarp uint) {
@@ -642,7 +648,9 @@ func (x *EntryBuffer) ConnectInsertedText(cb *func(EntryBuffer, uint, string, ui
642648 }
643649 cbRefPtr := purego.NewCallback(fcb)
644650 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
645- return gobject.SignalConnect(x.GoPointer(), "inserted-text", cbRefPtr)
651+ handlerID := gobject.SignalConnect(x.GoPointer(), "inserted-text", cbRefPtr)
652+ glib.SaveHandlerMapping(handlerID, cbPtr)
653+ return handlerID
646654 }
647655
648656 func init() {
M v4/gtk/gtkentrycompletion.go +28 -12
@@ -570,10 +570,12 @@ func (x *EntryCompletion) GetPropertyTextColumn() int {
570570 //
571571 // Note that @model is the model that was passed to
572572 // [method@Gtk.EntryCompletion.set_model].
573-func (x *EntryCompletion) ConnectCursorOnMatch(cb *func(EntryCompletion, uintptr, uintptr) bool) uint32 {
573+func (x *EntryCompletion) ConnectCursorOnMatch(cb *func(EntryCompletion, uintptr, uintptr) bool) uint {
574574 cbPtr := uintptr(unsafe.Pointer(cb))
575575 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
576- return gobject.SignalConnect(x.GoPointer(), "cursor-on-match", cbRefPtr)
576+ handlerID := gobject.SignalConnect(x.GoPointer(), "cursor-on-match", cbRefPtr)
577+ glib.SaveHandlerMapping(handlerID, cbPtr)
578+ return handlerID
577579 }
578580
579581 fcb := func(clsPtr uintptr, ModelVarp uintptr, IterVarp uintptr) bool {
@@ -586,7 +588,9 @@ func (x *EntryCompletion) ConnectCursorOnMatch(cb *func(EntryCompletion, uintptr
586588 }
587589 cbRefPtr := purego.NewCallback(fcb)
588590 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
589- return gobject.SignalConnect(x.GoPointer(), "cursor-on-match", cbRefPtr)
591+ handlerID := gobject.SignalConnect(x.GoPointer(), "cursor-on-match", cbRefPtr)
592+ glib.SaveHandlerMapping(handlerID, cbPtr)
593+ return handlerID
590594 }
591595
592596 // Emitted when the inline autocompletion is triggered.
@@ -598,10 +602,12 @@ func (x *EntryCompletion) ConnectCursorOnMatch(cb *func(EntryCompletion, uintptr
598602 // smaller part of the @prefix into the entry - e.g. the entry used in
599603 // the `GtkFileChooser` inserts only the part of the prefix up to the
600604 // next '/'.
601-func (x *EntryCompletion) ConnectInsertPrefix(cb *func(EntryCompletion, string) bool) uint32 {
605+func (x *EntryCompletion) ConnectInsertPrefix(cb *func(EntryCompletion, string) bool) uint {
602606 cbPtr := uintptr(unsafe.Pointer(cb))
603607 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
604- return gobject.SignalConnect(x.GoPointer(), "insert-prefix", cbRefPtr)
608+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-prefix", cbRefPtr)
609+ glib.SaveHandlerMapping(handlerID, cbPtr)
610+ return handlerID
605611 }
606612
607613 fcb := func(clsPtr uintptr, PrefixVarp string) bool {
@@ -614,7 +620,9 @@ func (x *EntryCompletion) ConnectInsertPrefix(cb *func(EntryCompletion, string)
614620 }
615621 cbRefPtr := purego.NewCallback(fcb)
616622 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
617- return gobject.SignalConnect(x.GoPointer(), "insert-prefix", cbRefPtr)
623+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-prefix", cbRefPtr)
624+ glib.SaveHandlerMapping(handlerID, cbPtr)
625+ return handlerID
618626 }
619627
620628 // Emitted when a match from the list is selected.
@@ -625,10 +633,12 @@ func (x *EntryCompletion) ConnectInsertPrefix(cb *func(EntryCompletion, string)
625633 //
626634 // Note that @model is the model that was passed to
627635 // [method@Gtk.EntryCompletion.set_model].
628-func (x *EntryCompletion) ConnectMatchSelected(cb *func(EntryCompletion, uintptr, uintptr) bool) uint32 {
636+func (x *EntryCompletion) ConnectMatchSelected(cb *func(EntryCompletion, uintptr, uintptr) bool) uint {
629637 cbPtr := uintptr(unsafe.Pointer(cb))
630638 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
631- return gobject.SignalConnect(x.GoPointer(), "match-selected", cbRefPtr)
639+ handlerID := gobject.SignalConnect(x.GoPointer(), "match-selected", cbRefPtr)
640+ glib.SaveHandlerMapping(handlerID, cbPtr)
641+ return handlerID
632642 }
633643
634644 fcb := func(clsPtr uintptr, ModelVarp uintptr, IterVarp uintptr) bool {
@@ -641,17 +651,21 @@ func (x *EntryCompletion) ConnectMatchSelected(cb *func(EntryCompletion, uintptr
641651 }
642652 cbRefPtr := purego.NewCallback(fcb)
643653 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
644- return gobject.SignalConnect(x.GoPointer(), "match-selected", cbRefPtr)
654+ handlerID := gobject.SignalConnect(x.GoPointer(), "match-selected", cbRefPtr)
655+ glib.SaveHandlerMapping(handlerID, cbPtr)
656+ return handlerID
645657 }
646658
647659 // Emitted when the filter model has zero
648660 // number of rows in completion_complete method.
649661 //
650662 // In other words when `GtkEntryCompletion` is out of suggestions.
651-func (x *EntryCompletion) ConnectNoMatches(cb *func(EntryCompletion)) uint32 {
663+func (x *EntryCompletion) ConnectNoMatches(cb *func(EntryCompletion)) uint {
652664 cbPtr := uintptr(unsafe.Pointer(cb))
653665 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
654- return gobject.SignalConnect(x.GoPointer(), "no-matches", cbRefPtr)
666+ handlerID := gobject.SignalConnect(x.GoPointer(), "no-matches", cbRefPtr)
667+ glib.SaveHandlerMapping(handlerID, cbPtr)
668+ return handlerID
655669 }
656670
657671 fcb := func(clsPtr uintptr) {
@@ -664,7 +678,9 @@ func (x *EntryCompletion) ConnectNoMatches(cb *func(EntryCompletion)) uint32 {
664678 }
665679 cbRefPtr := purego.NewCallback(fcb)
666680 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
667- return gobject.SignalConnect(x.GoPointer(), "no-matches", cbRefPtr)
681+ handlerID := gobject.SignalConnect(x.GoPointer(), "no-matches", cbRefPtr)
682+ glib.SaveHandlerMapping(handlerID, cbPtr)
683+ return handlerID
668684 }
669685
670686 // Gets the ID of the @buildable object.
M v4/gtk/gtkeventcontrollerfocus.go +14 -6
@@ -131,10 +131,12 @@ func (x *EventControllerFocus) GetPropertyIsFocus() bool {
131131 // in these cases, you can monitor the
132132 // [property@Gtk.EventControllerFocus:is-focus]
133133 // property for changes.
134-func (x *EventControllerFocus) ConnectEnter(cb *func(EventControllerFocus)) uint32 {
134+func (x *EventControllerFocus) ConnectEnter(cb *func(EventControllerFocus)) uint {
135135 cbPtr := uintptr(unsafe.Pointer(cb))
136136 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
137- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
137+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
138+ glib.SaveHandlerMapping(handlerID, cbPtr)
139+ return handlerID
138140 }
139141
140142 fcb := func(clsPtr uintptr) {
@@ -147,7 +149,9 @@ func (x *EventControllerFocus) ConnectEnter(cb *func(EventControllerFocus)) uint
147149 }
148150 cbRefPtr := purego.NewCallback(fcb)
149151 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
150- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
152+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
153+ glib.SaveHandlerMapping(handlerID, cbPtr)
154+ return handlerID
151155 }
152156
153157 // Emitted whenever the focus leaves the widget hierarchy
@@ -159,10 +163,12 @@ func (x *EventControllerFocus) ConnectEnter(cb *func(EventControllerFocus)) uint
159163 // to a descendent). If you are interested in these cases, you
160164 // can monitor the [property@Gtk.EventControllerFocus:is-focus]
161165 // property for changes.
162-func (x *EventControllerFocus) ConnectLeave(cb *func(EventControllerFocus)) uint32 {
166+func (x *EventControllerFocus) ConnectLeave(cb *func(EventControllerFocus)) uint {
163167 cbPtr := uintptr(unsafe.Pointer(cb))
164168 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
165- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
169+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
170+ glib.SaveHandlerMapping(handlerID, cbPtr)
171+ return handlerID
166172 }
167173
168174 fcb := func(clsPtr uintptr) {
@@ -175,7 +181,9 @@ func (x *EventControllerFocus) ConnectLeave(cb *func(EventControllerFocus)) uint
175181 }
176182 cbRefPtr := purego.NewCallback(fcb)
177183 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
178- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
184+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
185+ glib.SaveHandlerMapping(handlerID, cbPtr)
186+ return handlerID
179187 }
180188
181189 func init() {
M v4/gtk/gtkeventcontrollerkey.go +28 -12
@@ -123,10 +123,12 @@ func (c *EventControllerKey) SetGoPointer(ptr uintptr) {
123123 //
124124 // See [method@Gtk.EventControllerKey.set_im_context] and
125125 // [method@Gtk.IMContext.filter_keypress].
126-func (x *EventControllerKey) ConnectImUpdate(cb *func(EventControllerKey)) uint32 {
126+func (x *EventControllerKey) ConnectImUpdate(cb *func(EventControllerKey)) uint {
127127 cbPtr := uintptr(unsafe.Pointer(cb))
128128 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
129- return gobject.SignalConnect(x.GoPointer(), "im-update", cbRefPtr)
129+ handlerID := gobject.SignalConnect(x.GoPointer(), "im-update", cbRefPtr)
130+ glib.SaveHandlerMapping(handlerID, cbPtr)
131+ return handlerID
130132 }
131133
132134 fcb := func(clsPtr uintptr) {
@@ -139,14 +141,18 @@ func (x *EventControllerKey) ConnectImUpdate(cb *func(EventControllerKey)) uint3
139141 }
140142 cbRefPtr := purego.NewCallback(fcb)
141143 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
142- return gobject.SignalConnect(x.GoPointer(), "im-update", cbRefPtr)
144+ handlerID := gobject.SignalConnect(x.GoPointer(), "im-update", cbRefPtr)
145+ glib.SaveHandlerMapping(handlerID, cbPtr)
146+ return handlerID
143147 }
144148
145149 // Emitted whenever a key is pressed.
146-func (x *EventControllerKey) ConnectKeyPressed(cb *func(EventControllerKey, uint, uint, gdk.ModifierType) bool) uint32 {
150+func (x *EventControllerKey) ConnectKeyPressed(cb *func(EventControllerKey, uint, uint, gdk.ModifierType) bool) uint {
147151 cbPtr := uintptr(unsafe.Pointer(cb))
148152 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
149- return gobject.SignalConnect(x.GoPointer(), "key-pressed", cbRefPtr)
153+ handlerID := gobject.SignalConnect(x.GoPointer(), "key-pressed", cbRefPtr)
154+ glib.SaveHandlerMapping(handlerID, cbPtr)
155+ return handlerID
150156 }
151157
152158 fcb := func(clsPtr uintptr, KeyvalVarp uint, KeycodeVarp uint, StateVarp gdk.ModifierType) bool {
@@ -159,14 +165,18 @@ func (x *EventControllerKey) ConnectKeyPressed(cb *func(EventControllerKey, uint
159165 }
160166 cbRefPtr := purego.NewCallback(fcb)
161167 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
162- return gobject.SignalConnect(x.GoPointer(), "key-pressed", cbRefPtr)
168+ handlerID := gobject.SignalConnect(x.GoPointer(), "key-pressed", cbRefPtr)
169+ glib.SaveHandlerMapping(handlerID, cbPtr)
170+ return handlerID
163171 }
164172
165173 // Emitted whenever a key is released.
166-func (x *EventControllerKey) ConnectKeyReleased(cb *func(EventControllerKey, uint, uint, gdk.ModifierType)) uint32 {
174+func (x *EventControllerKey) ConnectKeyReleased(cb *func(EventControllerKey, uint, uint, gdk.ModifierType)) uint {
167175 cbPtr := uintptr(unsafe.Pointer(cb))
168176 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
169- return gobject.SignalConnect(x.GoPointer(), "key-released", cbRefPtr)
177+ handlerID := gobject.SignalConnect(x.GoPointer(), "key-released", cbRefPtr)
178+ glib.SaveHandlerMapping(handlerID, cbPtr)
179+ return handlerID
170180 }
171181
172182 fcb := func(clsPtr uintptr, KeyvalVarp uint, KeycodeVarp uint, StateVarp gdk.ModifierType) {
@@ -179,14 +189,18 @@ func (x *EventControllerKey) ConnectKeyReleased(cb *func(EventControllerKey, uin
179189 }
180190 cbRefPtr := purego.NewCallback(fcb)
181191 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
182- return gobject.SignalConnect(x.GoPointer(), "key-released", cbRefPtr)
192+ handlerID := gobject.SignalConnect(x.GoPointer(), "key-released", cbRefPtr)
193+ glib.SaveHandlerMapping(handlerID, cbPtr)
194+ return handlerID
183195 }
184196
185197 // Emitted whenever the state of modifier keys and pointer buttons change.
186-func (x *EventControllerKey) ConnectModifiers(cb *func(EventControllerKey, gdk.ModifierType) bool) uint32 {
198+func (x *EventControllerKey) ConnectModifiers(cb *func(EventControllerKey, gdk.ModifierType) bool) uint {
187199 cbPtr := uintptr(unsafe.Pointer(cb))
188200 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
189- return gobject.SignalConnect(x.GoPointer(), "modifiers", cbRefPtr)
201+ handlerID := gobject.SignalConnect(x.GoPointer(), "modifiers", cbRefPtr)
202+ glib.SaveHandlerMapping(handlerID, cbPtr)
203+ return handlerID
190204 }
191205
192206 fcb := func(clsPtr uintptr, StateVarp gdk.ModifierType) bool {
@@ -199,7 +213,9 @@ func (x *EventControllerKey) ConnectModifiers(cb *func(EventControllerKey, gdk.M
199213 }
200214 cbRefPtr := purego.NewCallback(fcb)
201215 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
202- return gobject.SignalConnect(x.GoPointer(), "modifiers", cbRefPtr)
216+ handlerID := gobject.SignalConnect(x.GoPointer(), "modifiers", cbRefPtr)
217+ glib.SaveHandlerMapping(handlerID, cbPtr)
218+ return handlerID
203219 }
204220
205221 func init() {
M v4/gtk/gtkeventcontrollerlegacy.go +7 -3
@@ -68,10 +68,12 @@ func (c *EventControllerLegacy) SetGoPointer(ptr uintptr) {
6868 }
6969
7070 // Emitted for each GDK event delivered to @controller.
71-func (x *EventControllerLegacy) ConnectEvent(cb *func(EventControllerLegacy, uintptr) bool) uint32 {
71+func (x *EventControllerLegacy) ConnectEvent(cb *func(EventControllerLegacy, uintptr) bool) uint {
7272 cbPtr := uintptr(unsafe.Pointer(cb))
7373 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
74- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
74+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
75+ glib.SaveHandlerMapping(handlerID, cbPtr)
76+ return handlerID
7577 }
7678
7779 fcb := func(clsPtr uintptr, EventVarp uintptr) bool {
@@ -84,7 +86,9 @@ func (x *EventControllerLegacy) ConnectEvent(cb *func(EventControllerLegacy, uin
8486 }
8587 cbRefPtr := purego.NewCallback(fcb)
8688 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
87- return gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
89+ handlerID := gobject.SignalConnect(x.GoPointer(), "event", cbRefPtr)
90+ glib.SaveHandlerMapping(handlerID, cbPtr)
91+ return handlerID
8892 }
8993
9094 func init() {
M v4/gtk/gtkeventcontrollermotion.go +21 -9
@@ -121,10 +121,12 @@ func (x *EventControllerMotion) GetPropertyIsPointer() bool {
121121 }
122122
123123 // Signals that the pointer has entered the widget.
124-func (x *EventControllerMotion) ConnectEnter(cb *func(EventControllerMotion, float64, float64)) uint32 {
124+func (x *EventControllerMotion) ConnectEnter(cb *func(EventControllerMotion, float64, float64)) uint {
125125 cbPtr := uintptr(unsafe.Pointer(cb))
126126 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
127- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
127+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
128+ glib.SaveHandlerMapping(handlerID, cbPtr)
129+ return handlerID
128130 }
129131
130132 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -137,14 +139,18 @@ func (x *EventControllerMotion) ConnectEnter(cb *func(EventControllerMotion, flo
137139 }
138140 cbRefPtr := purego.NewCallback(fcb)
139141 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
140- return gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
142+ handlerID := gobject.SignalConnect(x.GoPointer(), "enter", cbRefPtr)
143+ glib.SaveHandlerMapping(handlerID, cbPtr)
144+ return handlerID
141145 }
142146
143147 // Signals that the pointer has left the widget.
144-func (x *EventControllerMotion) ConnectLeave(cb *func(EventControllerMotion)) uint32 {
148+func (x *EventControllerMotion) ConnectLeave(cb *func(EventControllerMotion)) uint {
145149 cbPtr := uintptr(unsafe.Pointer(cb))
146150 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
147- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
151+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
152+ glib.SaveHandlerMapping(handlerID, cbPtr)
153+ return handlerID
148154 }
149155
150156 fcb := func(clsPtr uintptr) {
@@ -157,14 +163,18 @@ func (x *EventControllerMotion) ConnectLeave(cb *func(EventControllerMotion)) ui
157163 }
158164 cbRefPtr := purego.NewCallback(fcb)
159165 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
160- return gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
166+ handlerID := gobject.SignalConnect(x.GoPointer(), "leave", cbRefPtr)
167+ glib.SaveHandlerMapping(handlerID, cbPtr)
168+ return handlerID
161169 }
162170
163171 // Emitted when the pointer moves inside the widget.
164-func (x *EventControllerMotion) ConnectMotion(cb *func(EventControllerMotion, float64, float64)) uint32 {
172+func (x *EventControllerMotion) ConnectMotion(cb *func(EventControllerMotion, float64, float64)) uint {
165173 cbPtr := uintptr(unsafe.Pointer(cb))
166174 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
167- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
175+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
176+ glib.SaveHandlerMapping(handlerID, cbPtr)
177+ return handlerID
168178 }
169179
170180 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -177,7 +187,9 @@ func (x *EventControllerMotion) ConnectMotion(cb *func(EventControllerMotion, fl
177187 }
178188 cbRefPtr := purego.NewCallback(fcb)
179189 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
180- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
190+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
191+ glib.SaveHandlerMapping(handlerID, cbPtr)
192+ return handlerID
181193 }
182194
183195 func init() {
M v4/gtk/gtkeventcontrollerscroll.go +28 -12
@@ -164,10 +164,12 @@ func (c *EventControllerScroll) SetGoPointer(ptr uintptr) {
164164 // @vel_x and @vel_y express the initial velocity that was
165165 // imprinted by the scroll events. @vel_x and @vel_y are expressed in
166166 // pixels/ms.
167-func (x *EventControllerScroll) ConnectDecelerate(cb *func(EventControllerScroll, float64, float64)) uint32 {
167+func (x *EventControllerScroll) ConnectDecelerate(cb *func(EventControllerScroll, float64, float64)) uint {
168168 cbPtr := uintptr(unsafe.Pointer(cb))
169169 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
170- return gobject.SignalConnect(x.GoPointer(), "decelerate", cbRefPtr)
170+ handlerID := gobject.SignalConnect(x.GoPointer(), "decelerate", cbRefPtr)
171+ glib.SaveHandlerMapping(handlerID, cbPtr)
172+ return handlerID
171173 }
172174
173175 fcb := func(clsPtr uintptr, VelXVarp float64, VelYVarp float64) {
@@ -180,7 +182,9 @@ func (x *EventControllerScroll) ConnectDecelerate(cb *func(EventControllerScroll
180182 }
181183 cbRefPtr := purego.NewCallback(fcb)
182184 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
183- return gobject.SignalConnect(x.GoPointer(), "decelerate", cbRefPtr)
185+ handlerID := gobject.SignalConnect(x.GoPointer(), "decelerate", cbRefPtr)
186+ glib.SaveHandlerMapping(handlerID, cbPtr)
187+ return handlerID
184188 }
185189
186190 // Signals that the widget should scroll by the
@@ -188,10 +192,12 @@ func (x *EventControllerScroll) ConnectDecelerate(cb *func(EventControllerScroll
188192 //
189193 // For the representation unit of the deltas, see
190194 // [method@Gtk.EventControllerScroll.get_unit].
191-func (x *EventControllerScroll) ConnectScroll(cb *func(EventControllerScroll, float64, float64) bool) uint32 {
195+func (x *EventControllerScroll) ConnectScroll(cb *func(EventControllerScroll, float64, float64) bool) uint {
192196 cbPtr := uintptr(unsafe.Pointer(cb))
193197 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
194- return gobject.SignalConnect(x.GoPointer(), "scroll", cbRefPtr)
198+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll", cbRefPtr)
199+ glib.SaveHandlerMapping(handlerID, cbPtr)
200+ return handlerID
195201 }
196202
197203 fcb := func(clsPtr uintptr, DxVarp float64, DyVarp float64) bool {
@@ -204,16 +210,20 @@ func (x *EventControllerScroll) ConnectScroll(cb *func(EventControllerScroll, fl
204210 }
205211 cbRefPtr := purego.NewCallback(fcb)
206212 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
207- return gobject.SignalConnect(x.GoPointer(), "scroll", cbRefPtr)
213+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll", cbRefPtr)
214+ glib.SaveHandlerMapping(handlerID, cbPtr)
215+ return handlerID
208216 }
209217
210218 // Signals that a new scrolling operation has begun.
211219 //
212220 // It will only be emitted on devices capable of it.
213-func (x *EventControllerScroll) ConnectScrollBegin(cb *func(EventControllerScroll)) uint32 {
221+func (x *EventControllerScroll) ConnectScrollBegin(cb *func(EventControllerScroll)) uint {
214222 cbPtr := uintptr(unsafe.Pointer(cb))
215223 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
216- return gobject.SignalConnect(x.GoPointer(), "scroll-begin", cbRefPtr)
224+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-begin", cbRefPtr)
225+ glib.SaveHandlerMapping(handlerID, cbPtr)
226+ return handlerID
217227 }
218228
219229 fcb := func(clsPtr uintptr) {
@@ -226,16 +236,20 @@ func (x *EventControllerScroll) ConnectScrollBegin(cb *func(EventControllerScrol
226236 }
227237 cbRefPtr := purego.NewCallback(fcb)
228238 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
229- return gobject.SignalConnect(x.GoPointer(), "scroll-begin", cbRefPtr)
239+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-begin", cbRefPtr)
240+ glib.SaveHandlerMapping(handlerID, cbPtr)
241+ return handlerID
230242 }
231243
232244 // Signals that a scrolling operation has finished.
233245 //
234246 // It will only be emitted on devices capable of it.
235-func (x *EventControllerScroll) ConnectScrollEnd(cb *func(EventControllerScroll)) uint32 {
247+func (x *EventControllerScroll) ConnectScrollEnd(cb *func(EventControllerScroll)) uint {
236248 cbPtr := uintptr(unsafe.Pointer(cb))
237249 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
238- return gobject.SignalConnect(x.GoPointer(), "scroll-end", cbRefPtr)
250+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-end", cbRefPtr)
251+ glib.SaveHandlerMapping(handlerID, cbPtr)
252+ return handlerID
239253 }
240254
241255 fcb := func(clsPtr uintptr) {
@@ -248,7 +262,9 @@ func (x *EventControllerScroll) ConnectScrollEnd(cb *func(EventControllerScroll)
248262 }
249263 cbRefPtr := purego.NewCallback(fcb)
250264 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
251- return gobject.SignalConnect(x.GoPointer(), "scroll-end", cbRefPtr)
265+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-end", cbRefPtr)
266+ glib.SaveHandlerMapping(handlerID, cbPtr)
267+ return handlerID
252268 }
253269
254270 func init() {
M v4/gtk/gtkexpander.go +7 -3
@@ -444,10 +444,12 @@ func (x *Expander) GetPropertyUseUnderline() bool {
444444 }
445445
446446 // Activates the `GtkExpander`.
447-func (x *Expander) ConnectActivate(cb *func(Expander)) uint32 {
447+func (x *Expander) ConnectActivate(cb *func(Expander)) uint {
448448 cbPtr := uintptr(unsafe.Pointer(cb))
449449 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
450- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
450+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
451+ glib.SaveHandlerMapping(handlerID, cbPtr)
452+ return handlerID
451453 }
452454
453455 fcb := func(clsPtr uintptr) {
@@ -460,7 +462,9 @@ func (x *Expander) ConnectActivate(cb *func(Expander)) uint32 {
460462 }
461463 cbRefPtr := purego.NewCallback(fcb)
462464 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
463- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
465+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
466+ glib.SaveHandlerMapping(handlerID, cbPtr)
467+ return handlerID
464468 }
465469
466470 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkfilechooserwidget.go +84 -36
@@ -131,10 +131,12 @@ func (x *FileChooserWidget) GetPropertySubtitle() string {
131131 // folder in the file list.
132132 //
133133 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;D&lt;/kbd&gt;.
134-func (x *FileChooserWidget) ConnectDesktopFolder(cb *func(FileChooserWidget)) uint32 {
134+func (x *FileChooserWidget) ConnectDesktopFolder(cb *func(FileChooserWidget)) uint {
135135 cbPtr := uintptr(unsafe.Pointer(cb))
136136 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
137- return gobject.SignalConnect(x.GoPointer(), "desktop-folder", cbRefPtr)
137+ handlerID := gobject.SignalConnect(x.GoPointer(), "desktop-folder", cbRefPtr)
138+ glib.SaveHandlerMapping(handlerID, cbPtr)
139+ return handlerID
138140 }
139141
140142 fcb := func(clsPtr uintptr) {
@@ -147,7 +149,9 @@ func (x *FileChooserWidget) ConnectDesktopFolder(cb *func(FileChooserWidget)) ui
147149 }
148150 cbRefPtr := purego.NewCallback(fcb)
149151 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
150- return gobject.SignalConnect(x.GoPointer(), "desktop-folder", cbRefPtr)
152+ handlerID := gobject.SignalConnect(x.GoPointer(), "desktop-folder", cbRefPtr)
153+ glib.SaveHandlerMapping(handlerID, cbPtr)
154+ return handlerID
151155 }
152156
153157 // Emitted when the user asks for it.
@@ -162,10 +166,12 @@ func (x *FileChooserWidget) ConnectDesktopFolder(cb *func(FileChooserWidget)) ui
162166 // switch to the "baz" subfolder.
163167 //
164168 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Down&lt;/kbd&gt;.
165-func (x *FileChooserWidget) ConnectDownFolder(cb *func(FileChooserWidget)) uint32 {
169+func (x *FileChooserWidget) ConnectDownFolder(cb *func(FileChooserWidget)) uint {
166170 cbPtr := uintptr(unsafe.Pointer(cb))
167171 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
168- return gobject.SignalConnect(x.GoPointer(), "down-folder", cbRefPtr)
172+ handlerID := gobject.SignalConnect(x.GoPointer(), "down-folder", cbRefPtr)
173+ glib.SaveHandlerMapping(handlerID, cbPtr)
174+ return handlerID
169175 }
170176
171177 fcb := func(clsPtr uintptr) {
@@ -178,7 +184,9 @@ func (x *FileChooserWidget) ConnectDownFolder(cb *func(FileChooserWidget)) uint3
178184 }
179185 cbRefPtr := purego.NewCallback(fcb)
180186 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
181- return gobject.SignalConnect(x.GoPointer(), "down-folder", cbRefPtr)
187+ handlerID := gobject.SignalConnect(x.GoPointer(), "down-folder", cbRefPtr)
188+ glib.SaveHandlerMapping(handlerID, cbPtr)
189+ return handlerID
182190 }
183191
184192 // Emitted when the user asks for it.
@@ -189,10 +197,12 @@ func (x *FileChooserWidget) ConnectDownFolder(cb *func(FileChooserWidget)) uint3
189197 // folder in the file list.
190198 //
191199 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Home&lt;/kbd&gt;.
192-func (x *FileChooserWidget) ConnectHomeFolder(cb *func(FileChooserWidget)) uint32 {
200+func (x *FileChooserWidget) ConnectHomeFolder(cb *func(FileChooserWidget)) uint {
193201 cbPtr := uintptr(unsafe.Pointer(cb))
194202 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
195- return gobject.SignalConnect(x.GoPointer(), "home-folder", cbRefPtr)
203+ handlerID := gobject.SignalConnect(x.GoPointer(), "home-folder", cbRefPtr)
204+ glib.SaveHandlerMapping(handlerID, cbPtr)
205+ return handlerID
196206 }
197207
198208 fcb := func(clsPtr uintptr) {
@@ -205,7 +215,9 @@ func (x *FileChooserWidget) ConnectHomeFolder(cb *func(FileChooserWidget)) uint3
205215 }
206216 cbRefPtr := purego.NewCallback(fcb)
207217 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
208- return gobject.SignalConnect(x.GoPointer(), "home-folder", cbRefPtr)
218+ handlerID := gobject.SignalConnect(x.GoPointer(), "home-folder", cbRefPtr)
219+ glib.SaveHandlerMapping(handlerID, cbPtr)
220+ return handlerID
209221 }
210222
211223 // Emitted when the user asks for it.
@@ -221,10 +233,12 @@ func (x *FileChooserWidget) ConnectHomeFolder(cb *func(FileChooserWidget)) uint3
221233 // type `/` and immediately type a path name. On Unix systems, this is
222234 // bound to &lt;kbd&gt;~&lt;/kbd&gt; (tilde) with a @path string of "~" itself for
223235 // access to home directories.
224-func (x *FileChooserWidget) ConnectLocationPopup(cb *func(FileChooserWidget, string)) uint32 {
236+func (x *FileChooserWidget) ConnectLocationPopup(cb *func(FileChooserWidget, string)) uint {
225237 cbPtr := uintptr(unsafe.Pointer(cb))
226238 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
227- return gobject.SignalConnect(x.GoPointer(), "location-popup", cbRefPtr)
239+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-popup", cbRefPtr)
240+ glib.SaveHandlerMapping(handlerID, cbPtr)
241+ return handlerID
228242 }
229243
230244 fcb := func(clsPtr uintptr, PathVarp string) {
@@ -237,7 +251,9 @@ func (x *FileChooserWidget) ConnectLocationPopup(cb *func(FileChooserWidget, str
237251 }
238252 cbRefPtr := purego.NewCallback(fcb)
239253 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
240- return gobject.SignalConnect(x.GoPointer(), "location-popup", cbRefPtr)
254+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-popup", cbRefPtr)
255+ glib.SaveHandlerMapping(handlerID, cbPtr)
256+ return handlerID
241257 }
242258
243259 // Emitted when the user asks for it.
@@ -248,10 +264,12 @@ func (x *FileChooserWidget) ConnectLocationPopup(cb *func(FileChooserWidget, str
248264 // when the user pastes into a `GtkFileChooserWidget`.
249265 //
250266 // The default binding for this signal is &lt;kbd&gt;Control&lt;/kbd&gt;-&lt;kbd&gt;V&lt;/kbd&gt;.
251-func (x *FileChooserWidget) ConnectLocationPopupOnPaste(cb *func(FileChooserWidget)) uint32 {
267+func (x *FileChooserWidget) ConnectLocationPopupOnPaste(cb *func(FileChooserWidget)) uint {
252268 cbPtr := uintptr(unsafe.Pointer(cb))
253269 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
254- return gobject.SignalConnect(x.GoPointer(), "location-popup-on-paste", cbRefPtr)
270+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-popup-on-paste", cbRefPtr)
271+ glib.SaveHandlerMapping(handlerID, cbPtr)
272+ return handlerID
255273 }
256274
257275 fcb := func(clsPtr uintptr) {
@@ -264,7 +282,9 @@ func (x *FileChooserWidget) ConnectLocationPopupOnPaste(cb *func(FileChooserWidg
264282 }
265283 cbRefPtr := purego.NewCallback(fcb)
266284 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
267- return gobject.SignalConnect(x.GoPointer(), "location-popup-on-paste", cbRefPtr)
285+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-popup-on-paste", cbRefPtr)
286+ glib.SaveHandlerMapping(handlerID, cbPtr)
287+ return handlerID
268288 }
269289
270290 // Emitted when the user asks for it.
@@ -276,10 +296,12 @@ func (x *FileChooserWidget) ConnectLocationPopupOnPaste(cb *func(FileChooserWidg
276296 // he wishes to select.
277297 //
278298 // The default binding for this signal is &lt;kbd&gt;Control&lt;/kbd&gt;-&lt;kbd&gt;L&lt;/kbd&gt;.
279-func (x *FileChooserWidget) ConnectLocationTogglePopup(cb *func(FileChooserWidget)) uint32 {
299+func (x *FileChooserWidget) ConnectLocationTogglePopup(cb *func(FileChooserWidget)) uint {
280300 cbPtr := uintptr(unsafe.Pointer(cb))
281301 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
282- return gobject.SignalConnect(x.GoPointer(), "location-toggle-popup", cbRefPtr)
302+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-toggle-popup", cbRefPtr)
303+ glib.SaveHandlerMapping(handlerID, cbPtr)
304+ return handlerID
283305 }
284306
285307 fcb := func(clsPtr uintptr) {
@@ -292,7 +314,9 @@ func (x *FileChooserWidget) ConnectLocationTogglePopup(cb *func(FileChooserWidge
292314 }
293315 cbRefPtr := purego.NewCallback(fcb)
294316 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
295- return gobject.SignalConnect(x.GoPointer(), "location-toggle-popup", cbRefPtr)
317+ handlerID := gobject.SignalConnect(x.GoPointer(), "location-toggle-popup", cbRefPtr)
318+ glib.SaveHandlerMapping(handlerID, cbPtr)
319+ return handlerID
296320 }
297321
298322 // Emitted when the user asks for it.
@@ -302,10 +326,12 @@ func (x *FileChooserWidget) ConnectLocationTogglePopup(cb *func(FileChooserWidge
302326 // This is used to move the focus to the places sidebar.
303327 //
304328 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;P&lt;/kbd&gt;.
305-func (x *FileChooserWidget) ConnectPlacesShortcut(cb *func(FileChooserWidget)) uint32 {
329+func (x *FileChooserWidget) ConnectPlacesShortcut(cb *func(FileChooserWidget)) uint {
306330 cbPtr := uintptr(unsafe.Pointer(cb))
307331 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
308- return gobject.SignalConnect(x.GoPointer(), "places-shortcut", cbRefPtr)
332+ handlerID := gobject.SignalConnect(x.GoPointer(), "places-shortcut", cbRefPtr)
333+ glib.SaveHandlerMapping(handlerID, cbPtr)
334+ return handlerID
309335 }
310336
311337 fcb := func(clsPtr uintptr) {
@@ -318,7 +344,9 @@ func (x *FileChooserWidget) ConnectPlacesShortcut(cb *func(FileChooserWidget)) u
318344 }
319345 cbRefPtr := purego.NewCallback(fcb)
320346 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
321- return gobject.SignalConnect(x.GoPointer(), "places-shortcut", cbRefPtr)
347+ handlerID := gobject.SignalConnect(x.GoPointer(), "places-shortcut", cbRefPtr)
348+ glib.SaveHandlerMapping(handlerID, cbPtr)
349+ return handlerID
322350 }
323351
324352 // Emitted when the user asks for it.
@@ -335,10 +363,12 @@ func (x *FileChooserWidget) ConnectPlacesShortcut(cb *func(FileChooserWidget)) u
335363 // Note that in the default binding, that &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;1&lt;/kbd&gt; is
336364 // actually defined to switch to the bookmark at index 0, and so on
337365 // successively.
338-func (x *FileChooserWidget) ConnectQuickBookmark(cb *func(FileChooserWidget, int)) uint32 {
366+func (x *FileChooserWidget) ConnectQuickBookmark(cb *func(FileChooserWidget, int)) uint {
339367 cbPtr := uintptr(unsafe.Pointer(cb))
340368 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
341- return gobject.SignalConnect(x.GoPointer(), "quick-bookmark", cbRefPtr)
369+ handlerID := gobject.SignalConnect(x.GoPointer(), "quick-bookmark", cbRefPtr)
370+ glib.SaveHandlerMapping(handlerID, cbPtr)
371+ return handlerID
342372 }
343373
344374 fcb := func(clsPtr uintptr, BookmarkIndexVarp int) {
@@ -351,7 +381,9 @@ func (x *FileChooserWidget) ConnectQuickBookmark(cb *func(FileChooserWidget, int
351381 }
352382 cbRefPtr := purego.NewCallback(fcb)
353383 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
354- return gobject.SignalConnect(x.GoPointer(), "quick-bookmark", cbRefPtr)
384+ handlerID := gobject.SignalConnect(x.GoPointer(), "quick-bookmark", cbRefPtr)
385+ glib.SaveHandlerMapping(handlerID, cbPtr)
386+ return handlerID
355387 }
356388
357389 // Emitted when the user asks for it.
@@ -361,10 +393,12 @@ func (x *FileChooserWidget) ConnectQuickBookmark(cb *func(FileChooserWidget, int
361393 // This is used to make the file chooser show the Recent location.
362394 //
363395 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;R&lt;/kbd&gt;.
364-func (x *FileChooserWidget) ConnectRecentShortcut(cb *func(FileChooserWidget)) uint32 {
396+func (x *FileChooserWidget) ConnectRecentShortcut(cb *func(FileChooserWidget)) uint {
365397 cbPtr := uintptr(unsafe.Pointer(cb))
366398 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
367- return gobject.SignalConnect(x.GoPointer(), "recent-shortcut", cbRefPtr)
399+ handlerID := gobject.SignalConnect(x.GoPointer(), "recent-shortcut", cbRefPtr)
400+ glib.SaveHandlerMapping(handlerID, cbPtr)
401+ return handlerID
368402 }
369403
370404 fcb := func(clsPtr uintptr) {
@@ -377,7 +411,9 @@ func (x *FileChooserWidget) ConnectRecentShortcut(cb *func(FileChooserWidget)) u
377411 }
378412 cbRefPtr := purego.NewCallback(fcb)
379413 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
380- return gobject.SignalConnect(x.GoPointer(), "recent-shortcut", cbRefPtr)
414+ handlerID := gobject.SignalConnect(x.GoPointer(), "recent-shortcut", cbRefPtr)
415+ glib.SaveHandlerMapping(handlerID, cbPtr)
416+ return handlerID
381417 }
382418
383419 // Emitted when the user asks for it.
@@ -387,10 +423,12 @@ func (x *FileChooserWidget) ConnectRecentShortcut(cb *func(FileChooserWidget)) u
387423 // This is used to make the file chooser show the search entry.
388424 //
389425 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;S&lt;/kbd&gt;.
390-func (x *FileChooserWidget) ConnectSearchShortcut(cb *func(FileChooserWidget)) uint32 {
426+func (x *FileChooserWidget) ConnectSearchShortcut(cb *func(FileChooserWidget)) uint {
391427 cbPtr := uintptr(unsafe.Pointer(cb))
392428 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
393- return gobject.SignalConnect(x.GoPointer(), "search-shortcut", cbRefPtr)
429+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-shortcut", cbRefPtr)
430+ glib.SaveHandlerMapping(handlerID, cbPtr)
431+ return handlerID
394432 }
395433
396434 fcb := func(clsPtr uintptr) {
@@ -403,7 +441,9 @@ func (x *FileChooserWidget) ConnectSearchShortcut(cb *func(FileChooserWidget)) u
403441 }
404442 cbRefPtr := purego.NewCallback(fcb)
405443 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
406- return gobject.SignalConnect(x.GoPointer(), "search-shortcut", cbRefPtr)
444+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-shortcut", cbRefPtr)
445+ glib.SaveHandlerMapping(handlerID, cbPtr)
446+ return handlerID
407447 }
408448
409449 // Emitted when the user asks for it.
@@ -413,10 +453,12 @@ func (x *FileChooserWidget) ConnectSearchShortcut(cb *func(FileChooserWidget)) u
413453 // This is used to make the file chooser display hidden files.
414454 //
415455 // The default binding for this signal is &lt;kbd&gt;Control&lt;/kbd&gt;-&lt;kbd&gt;H&lt;/kbd&gt;.
416-func (x *FileChooserWidget) ConnectShowHidden(cb *func(FileChooserWidget)) uint32 {
456+func (x *FileChooserWidget) ConnectShowHidden(cb *func(FileChooserWidget)) uint {
417457 cbPtr := uintptr(unsafe.Pointer(cb))
418458 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
419- return gobject.SignalConnect(x.GoPointer(), "show-hidden", cbRefPtr)
459+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-hidden", cbRefPtr)
460+ glib.SaveHandlerMapping(handlerID, cbPtr)
461+ return handlerID
420462 }
421463
422464 fcb := func(clsPtr uintptr) {
@@ -429,7 +471,9 @@ func (x *FileChooserWidget) ConnectShowHidden(cb *func(FileChooserWidget)) uint3
429471 }
430472 cbRefPtr := purego.NewCallback(fcb)
431473 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
432- return gobject.SignalConnect(x.GoPointer(), "show-hidden", cbRefPtr)
474+ handlerID := gobject.SignalConnect(x.GoPointer(), "show-hidden", cbRefPtr)
475+ glib.SaveHandlerMapping(handlerID, cbPtr)
476+ return handlerID
433477 }
434478
435479 // Emitted when the user asks for it.
@@ -440,10 +484,12 @@ func (x *FileChooserWidget) ConnectShowHidden(cb *func(FileChooserWidget)) uint3
440484 // of the current folder in the file hierarchy.
441485 //
442486 // The default binding for this signal is &lt;kbd&gt;Alt&lt;/kbd&gt;-&lt;kbd&gt;Up&lt;/kbd&gt;.
443-func (x *FileChooserWidget) ConnectUpFolder(cb *func(FileChooserWidget)) uint32 {
487+func (x *FileChooserWidget) ConnectUpFolder(cb *func(FileChooserWidget)) uint {
444488 cbPtr := uintptr(unsafe.Pointer(cb))
445489 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
446- return gobject.SignalConnect(x.GoPointer(), "up-folder", cbRefPtr)
490+ handlerID := gobject.SignalConnect(x.GoPointer(), "up-folder", cbRefPtr)
491+ glib.SaveHandlerMapping(handlerID, cbPtr)
492+ return handlerID
447493 }
448494
449495 fcb := func(clsPtr uintptr) {
@@ -456,7 +502,9 @@ func (x *FileChooserWidget) ConnectUpFolder(cb *func(FileChooserWidget)) uint32
456502 }
457503 cbRefPtr := purego.NewCallback(fcb)
458504 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
459- return gobject.SignalConnect(x.GoPointer(), "up-folder", cbRefPtr)
505+ handlerID := gobject.SignalConnect(x.GoPointer(), "up-folder", cbRefPtr)
506+ glib.SaveHandlerMapping(handlerID, cbPtr)
507+ return handlerID
460508 }
461509
462510 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkfilter.go +7 -3
@@ -446,10 +446,12 @@ func (c *Filter) SetGoPointer(ptr uintptr) {
446446 // Depending on the @change parameter, not all items need
447447 // to be checked, but only some. Refer to the [enum@Gtk.FilterChange]
448448 // documentation for details.
449-func (x *Filter) ConnectChanged(cb *func(Filter, FilterChange)) uint32 {
449+func (x *Filter) ConnectChanged(cb *func(Filter, FilterChange)) uint {
450450 cbPtr := uintptr(unsafe.Pointer(cb))
451451 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
452- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
452+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
453+ glib.SaveHandlerMapping(handlerID, cbPtr)
454+ return handlerID
453455 }
454456
455457 fcb := func(clsPtr uintptr, ChangeVarp FilterChange) {
@@ -462,7 +464,9 @@ func (x *Filter) ConnectChanged(cb *func(Filter, FilterChange)) uint32 {
462464 }
463465 cbRefPtr := purego.NewCallback(fcb)
464466 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
465- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
467+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
468+ glib.SaveHandlerMapping(handlerID, cbPtr)
469+ return handlerID
466470 }
467471
468472 func init() {
M v4/gtk/gtkflowbox.go +56 -24
@@ -849,10 +849,12 @@ func (x *FlowBox) GetPropertyRowSpacing() uint {
849849 // Emitted when the user activates the @box.
850850 //
851851 // This is a [keybinding signal](class.SignalAction.html).
852-func (x *FlowBox) ConnectActivateCursorChild(cb *func(FlowBox)) uint32 {
852+func (x *FlowBox) ConnectActivateCursorChild(cb *func(FlowBox)) uint {
853853 cbPtr := uintptr(unsafe.Pointer(cb))
854854 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
855- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-child", cbRefPtr)
855+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-child", cbRefPtr)
856+ glib.SaveHandlerMapping(handlerID, cbPtr)
857+ return handlerID
856858 }
857859
858860 fcb := func(clsPtr uintptr) {
@@ -865,14 +867,18 @@ func (x *FlowBox) ConnectActivateCursorChild(cb *func(FlowBox)) uint32 {
865867 }
866868 cbRefPtr := purego.NewCallback(fcb)
867869 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
868- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-child", cbRefPtr)
870+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-child", cbRefPtr)
871+ glib.SaveHandlerMapping(handlerID, cbPtr)
872+ return handlerID
869873 }
870874
871875 // Emitted when a child has been activated by the user.
872-func (x *FlowBox) ConnectChildActivated(cb *func(FlowBox, uintptr)) uint32 {
876+func (x *FlowBox) ConnectChildActivated(cb *func(FlowBox, uintptr)) uint {
873877 cbPtr := uintptr(unsafe.Pointer(cb))
874878 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
875- return gobject.SignalConnect(x.GoPointer(), "child-activated", cbRefPtr)
879+ handlerID := gobject.SignalConnect(x.GoPointer(), "child-activated", cbRefPtr)
880+ glib.SaveHandlerMapping(handlerID, cbPtr)
881+ return handlerID
876882 }
877883
878884 fcb := func(clsPtr uintptr, ChildVarp uintptr) {
@@ -885,7 +891,9 @@ func (x *FlowBox) ConnectChildActivated(cb *func(FlowBox, uintptr)) uint32 {
885891 }
886892 cbRefPtr := purego.NewCallback(fcb)
887893 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
888- return gobject.SignalConnect(x.GoPointer(), "child-activated", cbRefPtr)
894+ handlerID := gobject.SignalConnect(x.GoPointer(), "child-activated", cbRefPtr)
895+ glib.SaveHandlerMapping(handlerID, cbPtr)
896+ return handlerID
889897 }
890898
891899 // Emitted when the user initiates a cursor movement.
@@ -904,10 +912,12 @@ func (x *FlowBox) ConnectChildActivated(cb *func(FlowBox, uintptr)) uint32 {
904912 // move by individual children
905913 // - &lt;kbd&gt;Home&lt;/kbd&gt;, &lt;kbd&gt;End&lt;/kbd&gt; move to the ends of the box
906914 // - &lt;kbd&gt;PgUp&lt;/kbd&gt;, &lt;kbd&gt;PgDn&lt;/kbd&gt; move vertically by pages
907-func (x *FlowBox) ConnectMoveCursor(cb *func(FlowBox, MovementStep, int, bool, bool) bool) uint32 {
915+func (x *FlowBox) ConnectMoveCursor(cb *func(FlowBox, MovementStep, int, bool, bool) bool) uint {
908916 cbPtr := uintptr(unsafe.Pointer(cb))
909917 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
910- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
918+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
919+ glib.SaveHandlerMapping(handlerID, cbPtr)
920+ return handlerID
911921 }
912922
913923 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendVarp bool, ModifyVarp bool) bool {
@@ -920,7 +930,9 @@ func (x *FlowBox) ConnectMoveCursor(cb *func(FlowBox, MovementStep, int, bool, b
920930 }
921931 cbRefPtr := purego.NewCallback(fcb)
922932 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
923- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
933+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
934+ glib.SaveHandlerMapping(handlerID, cbPtr)
935+ return handlerID
924936 }
925937
926938 // Emitted to select all children of the box,
@@ -929,10 +941,12 @@ func (x *FlowBox) ConnectMoveCursor(cb *func(FlowBox, MovementStep, int, bool, b
929941 // This is a [keybinding signal](class.SignalAction.html).
930942 //
931943 // The default bindings for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;a&lt;/kbd&gt;.
932-func (x *FlowBox) ConnectSelectAll(cb *func(FlowBox)) uint32 {
944+func (x *FlowBox) ConnectSelectAll(cb *func(FlowBox)) uint {
933945 cbPtr := uintptr(unsafe.Pointer(cb))
934946 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
935- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
947+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
948+ glib.SaveHandlerMapping(handlerID, cbPtr)
949+ return handlerID
936950 }
937951
938952 fcb := func(clsPtr uintptr) {
@@ -945,7 +959,9 @@ func (x *FlowBox) ConnectSelectAll(cb *func(FlowBox)) uint32 {
945959 }
946960 cbRefPtr := purego.NewCallback(fcb)
947961 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
948- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
962+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
963+ glib.SaveHandlerMapping(handlerID, cbPtr)
964+ return handlerID
949965 }
950966
951967 // Emitted when the set of selected children changes.
@@ -953,10 +969,12 @@ func (x *FlowBox) ConnectSelectAll(cb *func(FlowBox)) uint32 {
953969 // Use [method@Gtk.FlowBox.selected_foreach] or
954970 // [method@Gtk.FlowBox.get_selected_children] to obtain the
955971 // selected children.
956-func (x *FlowBox) ConnectSelectedChildrenChanged(cb *func(FlowBox)) uint32 {
972+func (x *FlowBox) ConnectSelectedChildrenChanged(cb *func(FlowBox)) uint {
957973 cbPtr := uintptr(unsafe.Pointer(cb))
958974 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
959- return gobject.SignalConnect(x.GoPointer(), "selected-children-changed", cbRefPtr)
975+ handlerID := gobject.SignalConnect(x.GoPointer(), "selected-children-changed", cbRefPtr)
976+ glib.SaveHandlerMapping(handlerID, cbPtr)
977+ return handlerID
960978 }
961979
962980 fcb := func(clsPtr uintptr) {
@@ -969,7 +987,9 @@ func (x *FlowBox) ConnectSelectedChildrenChanged(cb *func(FlowBox)) uint32 {
969987 }
970988 cbRefPtr := purego.NewCallback(fcb)
971989 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
972- return gobject.SignalConnect(x.GoPointer(), "selected-children-changed", cbRefPtr)
990+ handlerID := gobject.SignalConnect(x.GoPointer(), "selected-children-changed", cbRefPtr)
991+ glib.SaveHandlerMapping(handlerID, cbPtr)
992+ return handlerID
973993 }
974994
975995 // Emitted to toggle the selection of the child that has the focus.
@@ -977,10 +997,12 @@ func (x *FlowBox) ConnectSelectedChildrenChanged(cb *func(FlowBox)) uint32 {
977997 // This is a [keybinding signal](class.SignalAction.html).
978998 //
979999 // The default binding for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Space&lt;/kbd&gt;.
980-func (x *FlowBox) ConnectToggleCursorChild(cb *func(FlowBox)) uint32 {
1000+func (x *FlowBox) ConnectToggleCursorChild(cb *func(FlowBox)) uint {
9811001 cbPtr := uintptr(unsafe.Pointer(cb))
9821002 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
983- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-child", cbRefPtr)
1003+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-child", cbRefPtr)
1004+ glib.SaveHandlerMapping(handlerID, cbPtr)
1005+ return handlerID
9841006 }
9851007
9861008 fcb := func(clsPtr uintptr) {
@@ -993,7 +1015,9 @@ func (x *FlowBox) ConnectToggleCursorChild(cb *func(FlowBox)) uint32 {
9931015 }
9941016 cbRefPtr := purego.NewCallback(fcb)
9951017 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
996- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-child", cbRefPtr)
1018+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-child", cbRefPtr)
1019+ glib.SaveHandlerMapping(handlerID, cbPtr)
1020+ return handlerID
9971021 }
9981022
9991023 // Emitted to unselect all children of the box,
@@ -1002,10 +1026,12 @@ func (x *FlowBox) ConnectToggleCursorChild(cb *func(FlowBox)) uint32 {
10021026 // This is a [keybinding signal](class.SignalAction.html).
10031027 //
10041028 // The default bindings for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Shift&lt;/kbd&gt;-&lt;kbd&gt;a&lt;/kbd&gt;.
1005-func (x *FlowBox) ConnectUnselectAll(cb *func(FlowBox)) uint32 {
1029+func (x *FlowBox) ConnectUnselectAll(cb *func(FlowBox)) uint {
10061030 cbPtr := uintptr(unsafe.Pointer(cb))
10071031 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1008- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1032+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1033+ glib.SaveHandlerMapping(handlerID, cbPtr)
1034+ return handlerID
10091035 }
10101036
10111037 fcb := func(clsPtr uintptr) {
@@ -1018,7 +1044,9 @@ func (x *FlowBox) ConnectUnselectAll(cb *func(FlowBox)) uint32 {
10181044 }
10191045 cbRefPtr := purego.NewCallback(fcb)
10201046 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1021- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1047+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1048+ glib.SaveHandlerMapping(handlerID, cbPtr)
1049+ return handlerID
10221050 }
10231051
10241052 // Requests the user's screen reader to announce the given message.
@@ -1451,10 +1479,12 @@ func (c *FlowBoxChild) SetGoPointer(ptr uintptr) {
14511479 // but it can be used by applications for their own purposes.
14521480 //
14531481 // The default bindings are &lt;kbd&gt;Space&lt;/kbd&gt; and &lt;kbd&gt;Enter&lt;/kbd&gt;.
1454-func (x *FlowBoxChild) ConnectActivate(cb *func(FlowBoxChild)) uint32 {
1482+func (x *FlowBoxChild) ConnectActivate(cb *func(FlowBoxChild)) uint {
14551483 cbPtr := uintptr(unsafe.Pointer(cb))
14561484 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1457- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1485+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1486+ glib.SaveHandlerMapping(handlerID, cbPtr)
1487+ return handlerID
14581488 }
14591489
14601490 fcb := func(clsPtr uintptr) {
@@ -1467,7 +1497,9 @@ func (x *FlowBoxChild) ConnectActivate(cb *func(FlowBoxChild)) uint32 {
14671497 }
14681498 cbRefPtr := purego.NewCallback(fcb)
14691499 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1470- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1500+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1501+ glib.SaveHandlerMapping(handlerID, cbPtr)
1502+ return handlerID
14711503 }
14721504
14731505 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkfontbutton.go +14 -6
@@ -247,10 +247,12 @@ func (x *FontButton) GetPropertyUseSize() bool {
247247 //
248248 // The `::activate` signal on `GtkFontButton` is an action signal and
249249 // emitting it causes the button to present its dialog.
250-func (x *FontButton) ConnectActivate(cb *func(FontButton)) uint32 {
250+func (x *FontButton) ConnectActivate(cb *func(FontButton)) uint {
251251 cbPtr := uintptr(unsafe.Pointer(cb))
252252 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
253- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
253+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
254+ glib.SaveHandlerMapping(handlerID, cbPtr)
255+ return handlerID
254256 }
255257
256258 fcb := func(clsPtr uintptr) {
@@ -263,7 +265,9 @@ func (x *FontButton) ConnectActivate(cb *func(FontButton)) uint32 {
263265 }
264266 cbRefPtr := purego.NewCallback(fcb)
265267 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
266- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
268+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
269+ glib.SaveHandlerMapping(handlerID, cbPtr)
270+ return handlerID
267271 }
268272
269273 // Emitted when the user selects a font.
@@ -274,10 +278,12 @@ func (x *FontButton) ConnectActivate(cb *func(FontButton)) uint32 {
274278 // Note that this signal is only emitted when the user changes the font.
275279 // If you need to react to programmatic font changes as well, use
276280 // the notify::font signal.
277-func (x *FontButton) ConnectFontSet(cb *func(FontButton)) uint32 {
281+func (x *FontButton) ConnectFontSet(cb *func(FontButton)) uint {
278282 cbPtr := uintptr(unsafe.Pointer(cb))
279283 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
280- return gobject.SignalConnect(x.GoPointer(), "font-set", cbRefPtr)
284+ handlerID := gobject.SignalConnect(x.GoPointer(), "font-set", cbRefPtr)
285+ glib.SaveHandlerMapping(handlerID, cbPtr)
286+ return handlerID
281287 }
282288
283289 fcb := func(clsPtr uintptr) {
@@ -290,7 +296,9 @@ func (x *FontButton) ConnectFontSet(cb *func(FontButton)) uint32 {
290296 }
291297 cbRefPtr := purego.NewCallback(fcb)
292298 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
293- return gobject.SignalConnect(x.GoPointer(), "font-set", cbRefPtr)
299+ handlerID := gobject.SignalConnect(x.GoPointer(), "font-set", cbRefPtr)
300+ glib.SaveHandlerMapping(handlerID, cbPtr)
301+ return handlerID
294302 }
295303
296304 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkfontdialogbutton.go +7 -3
@@ -409,10 +409,12 @@ func (x *FontDialogButton) GetPropertyUseSize() bool {
409409 //
410410 // The `::activate` signal on `GtkFontDialogButton` is an action signal
411411 // and emitting it causes the button to pop up its dialog.
412-func (x *FontDialogButton) ConnectActivate(cb *func(FontDialogButton)) uint32 {
412+func (x *FontDialogButton) ConnectActivate(cb *func(FontDialogButton)) uint {
413413 cbPtr := uintptr(unsafe.Pointer(cb))
414414 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
415- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
415+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
416+ glib.SaveHandlerMapping(handlerID, cbPtr)
417+ return handlerID
416418 }
417419
418420 fcb := func(clsPtr uintptr) {
@@ -425,7 +427,9 @@ func (x *FontDialogButton) ConnectActivate(cb *func(FontDialogButton)) uint32 {
425427 }
426428 cbRefPtr := purego.NewCallback(fcb)
427429 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
428- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
430+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
431+ glib.SaveHandlerMapping(handlerID, cbPtr)
432+ return handlerID
429433 }
430434
431435 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkgesture.go +35 -15
@@ -489,10 +489,12 @@ func (x *Gesture) GetPropertyNPoints() uint {
489489 // (eg. a third touch on a 2-touches gesture) is lifted, in that
490490 // situation @sequence won't pertain to the current set of active
491491 // touches, so don't rely on this being true.
492-func (x *Gesture) ConnectBegin(cb *func(Gesture, uintptr)) uint32 {
492+func (x *Gesture) ConnectBegin(cb *func(Gesture, uintptr)) uint {
493493 cbPtr := uintptr(unsafe.Pointer(cb))
494494 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
495- return gobject.SignalConnect(x.GoPointer(), "begin", cbRefPtr)
495+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin", cbRefPtr)
496+ glib.SaveHandlerMapping(handlerID, cbPtr)
497+ return handlerID
496498 }
497499
498500 fcb := func(clsPtr uintptr, SequenceVarp uintptr) {
@@ -505,7 +507,9 @@ func (x *Gesture) ConnectBegin(cb *func(Gesture, uintptr)) uint32 {
505507 }
506508 cbRefPtr := purego.NewCallback(fcb)
507509 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
508- return gobject.SignalConnect(x.GoPointer(), "begin", cbRefPtr)
510+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin", cbRefPtr)
511+ glib.SaveHandlerMapping(handlerID, cbPtr)
512+ return handlerID
509513 }
510514
511515 // Emitted whenever a sequence is cancelled.
@@ -518,10 +522,12 @@ func (x *Gesture) ConnectBegin(cb *func(Gesture, uintptr)) uint32 {
518522 //
519523 // @gesture must forget everything about @sequence as in
520524 // response to this signal.
521-func (x *Gesture) ConnectCancel(cb *func(Gesture, uintptr)) uint32 {
525+func (x *Gesture) ConnectCancel(cb *func(Gesture, uintptr)) uint {
522526 cbPtr := uintptr(unsafe.Pointer(cb))
523527 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
524- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
528+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
529+ glib.SaveHandlerMapping(handlerID, cbPtr)
530+ return handlerID
525531 }
526532
527533 fcb := func(clsPtr uintptr, SequenceVarp uintptr) {
@@ -534,7 +540,9 @@ func (x *Gesture) ConnectCancel(cb *func(Gesture, uintptr)) uint32 {
534540 }
535541 cbRefPtr := purego.NewCallback(fcb)
536542 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
537- return gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
543+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel", cbRefPtr)
544+ glib.SaveHandlerMapping(handlerID, cbPtr)
545+ return handlerID
538546 }
539547
540548 // Emitted when @gesture either stopped recognizing the event
@@ -546,10 +554,12 @@ func (x *Gesture) ConnectCancel(cb *func(Gesture, uintptr)) uint32 {
546554 // pressed touch sequence that exceeds [property@Gtk.Gesture:n-points]).
547555 // This situation may be detected by checking through
548556 // [method@Gtk.Gesture.handles_sequence].
549-func (x *Gesture) ConnectEnd(cb *func(Gesture, uintptr)) uint32 {
557+func (x *Gesture) ConnectEnd(cb *func(Gesture, uintptr)) uint {
550558 cbPtr := uintptr(unsafe.Pointer(cb))
551559 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
552- return gobject.SignalConnect(x.GoPointer(), "end", cbRefPtr)
560+ handlerID := gobject.SignalConnect(x.GoPointer(), "end", cbRefPtr)
561+ glib.SaveHandlerMapping(handlerID, cbPtr)
562+ return handlerID
553563 }
554564
555565 fcb := func(clsPtr uintptr, SequenceVarp uintptr) {
@@ -562,17 +572,21 @@ func (x *Gesture) ConnectEnd(cb *func(Gesture, uintptr)) uint32 {
562572 }
563573 cbRefPtr := purego.NewCallback(fcb)
564574 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
565- return gobject.SignalConnect(x.GoPointer(), "end", cbRefPtr)
575+ handlerID := gobject.SignalConnect(x.GoPointer(), "end", cbRefPtr)
576+ glib.SaveHandlerMapping(handlerID, cbPtr)
577+ return handlerID
566578 }
567579
568580 // Emitted whenever a sequence state changes.
569581 //
570582 // See [method@Gtk.Gesture.set_sequence_state] to know
571583 // more about the expectable sequence lifetimes.
572-func (x *Gesture) ConnectSequenceStateChanged(cb *func(Gesture, uintptr, EventSequenceState)) uint32 {
584+func (x *Gesture) ConnectSequenceStateChanged(cb *func(Gesture, uintptr, EventSequenceState)) uint {
573585 cbPtr := uintptr(unsafe.Pointer(cb))
574586 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
575- return gobject.SignalConnect(x.GoPointer(), "sequence-state-changed", cbRefPtr)
587+ handlerID := gobject.SignalConnect(x.GoPointer(), "sequence-state-changed", cbRefPtr)
588+ glib.SaveHandlerMapping(handlerID, cbPtr)
589+ return handlerID
576590 }
577591
578592 fcb := func(clsPtr uintptr, SequenceVarp uintptr, StateVarp EventSequenceState) {
@@ -585,16 +599,20 @@ func (x *Gesture) ConnectSequenceStateChanged(cb *func(Gesture, uintptr, EventSe
585599 }
586600 cbRefPtr := purego.NewCallback(fcb)
587601 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
588- return gobject.SignalConnect(x.GoPointer(), "sequence-state-changed", cbRefPtr)
602+ handlerID := gobject.SignalConnect(x.GoPointer(), "sequence-state-changed", cbRefPtr)
603+ glib.SaveHandlerMapping(handlerID, cbPtr)
604+ return handlerID
589605 }
590606
591607 // Emitted whenever an event is handled while the gesture is recognized.
592608 //
593609 // @sequence is guaranteed to pertain to the set of active touches.
594-func (x *Gesture) ConnectUpdate(cb *func(Gesture, uintptr)) uint32 {
610+func (x *Gesture) ConnectUpdate(cb *func(Gesture, uintptr)) uint {
595611 cbPtr := uintptr(unsafe.Pointer(cb))
596612 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
597- return gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
613+ handlerID := gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
614+ glib.SaveHandlerMapping(handlerID, cbPtr)
615+ return handlerID
598616 }
599617
600618 fcb := func(clsPtr uintptr, SequenceVarp uintptr) {
@@ -607,7 +625,9 @@ func (x *Gesture) ConnectUpdate(cb *func(Gesture, uintptr)) uint32 {
607625 }
608626 cbRefPtr := purego.NewCallback(fcb)
609627 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
610- return gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
628+ handlerID := gobject.SignalConnect(x.GoPointer(), "update", cbRefPtr)
629+ glib.SaveHandlerMapping(handlerID, cbPtr)
630+ return handlerID
611631 }
612632
613633 func init() {
M v4/gtk/gtkgestureclick.go +28 -12
@@ -72,10 +72,12 @@ func (c *GestureClick) SetGoPointer(ptr uintptr) {
7272 }
7373
7474 // Emitted whenever a button or touch press happens.
75-func (x *GestureClick) ConnectPressed(cb *func(GestureClick, int, float64, float64)) uint32 {
75+func (x *GestureClick) ConnectPressed(cb *func(GestureClick, int, float64, float64)) uint {
7676 cbPtr := uintptr(unsafe.Pointer(cb))
7777 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
78- return gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
78+ handlerID := gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
79+ glib.SaveHandlerMapping(handlerID, cbPtr)
80+ return handlerID
7981 }
8082
8183 fcb := func(clsPtr uintptr, NPressVarp int, XVarp float64, YVarp float64) {
@@ -88,7 +90,9 @@ func (x *GestureClick) ConnectPressed(cb *func(GestureClick, int, float64, float
8890 }
8991 cbRefPtr := purego.NewCallback(fcb)
9092 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
91- return gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
93+ handlerID := gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
94+ glib.SaveHandlerMapping(handlerID, cbPtr)
95+ return handlerID
9296 }
9397
9498 // Emitted when a button or touch is released.
@@ -97,10 +101,12 @@ func (x *GestureClick) ConnectPressed(cb *func(GestureClick, int, float64, float
97101 // this event, note that [signal@Gtk.GestureClick::stopped] may
98102 // have been emitted between the press and its release, @n_press
99103 // will only start over at the next press.
100-func (x *GestureClick) ConnectReleased(cb *func(GestureClick, int, float64, float64)) uint32 {
104+func (x *GestureClick) ConnectReleased(cb *func(GestureClick, int, float64, float64)) uint {
101105 cbPtr := uintptr(unsafe.Pointer(cb))
102106 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
103- return gobject.SignalConnect(x.GoPointer(), "released", cbRefPtr)
107+ handlerID := gobject.SignalConnect(x.GoPointer(), "released", cbRefPtr)
108+ glib.SaveHandlerMapping(handlerID, cbPtr)
109+ return handlerID
104110 }
105111
106112 fcb := func(clsPtr uintptr, NPressVarp int, XVarp float64, YVarp float64) {
@@ -113,14 +119,18 @@ func (x *GestureClick) ConnectReleased(cb *func(GestureClick, int, float64, floa
113119 }
114120 cbRefPtr := purego.NewCallback(fcb)
115121 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
116- return gobject.SignalConnect(x.GoPointer(), "released", cbRefPtr)
122+ handlerID := gobject.SignalConnect(x.GoPointer(), "released", cbRefPtr)
123+ glib.SaveHandlerMapping(handlerID, cbPtr)
124+ return handlerID
117125 }
118126
119127 // Emitted whenever any time/distance threshold has been exceeded.
120-func (x *GestureClick) ConnectStopped(cb *func(GestureClick)) uint32 {
128+func (x *GestureClick) ConnectStopped(cb *func(GestureClick)) uint {
121129 cbPtr := uintptr(unsafe.Pointer(cb))
122130 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
123- return gobject.SignalConnect(x.GoPointer(), "stopped", cbRefPtr)
131+ handlerID := gobject.SignalConnect(x.GoPointer(), "stopped", cbRefPtr)
132+ glib.SaveHandlerMapping(handlerID, cbPtr)
133+ return handlerID
124134 }
125135
126136 fcb := func(clsPtr uintptr) {
@@ -133,7 +143,9 @@ func (x *GestureClick) ConnectStopped(cb *func(GestureClick)) uint32 {
133143 }
134144 cbRefPtr := purego.NewCallback(fcb)
135145 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
136- return gobject.SignalConnect(x.GoPointer(), "stopped", cbRefPtr)
146+ handlerID := gobject.SignalConnect(x.GoPointer(), "stopped", cbRefPtr)
147+ glib.SaveHandlerMapping(handlerID, cbPtr)
148+ return handlerID
137149 }
138150
139151 // Emitted whenever the gesture receives a release
@@ -142,10 +154,12 @@ func (x *GestureClick) ConnectStopped(cb *func(GestureClick)) uint32 {
142154 // Due to implicit grabs, this can only happen on situations
143155 // where input is grabbed elsewhere mid-press or the pressed
144156 // widget voluntarily relinquishes its implicit grab.
145-func (x *GestureClick) ConnectUnpairedRelease(cb *func(GestureClick, float64, float64, uint, uintptr)) uint32 {
157+func (x *GestureClick) ConnectUnpairedRelease(cb *func(GestureClick, float64, float64, uint, uintptr)) uint {
146158 cbPtr := uintptr(unsafe.Pointer(cb))
147159 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
148- return gobject.SignalConnect(x.GoPointer(), "unpaired-release", cbRefPtr)
160+ handlerID := gobject.SignalConnect(x.GoPointer(), "unpaired-release", cbRefPtr)
161+ glib.SaveHandlerMapping(handlerID, cbPtr)
162+ return handlerID
149163 }
150164
151165 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64, ButtonVarp uint, SequenceVarp uintptr) {
@@ -158,7 +172,9 @@ func (x *GestureClick) ConnectUnpairedRelease(cb *func(GestureClick, float64, fl
158172 }
159173 cbRefPtr := purego.NewCallback(fcb)
160174 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
161- return gobject.SignalConnect(x.GoPointer(), "unpaired-release", cbRefPtr)
175+ handlerID := gobject.SignalConnect(x.GoPointer(), "unpaired-release", cbRefPtr)
176+ glib.SaveHandlerMapping(handlerID, cbPtr)
177+ return handlerID
162178 }
163179
164180 func init() {
M v4/gtk/gtkgesturedrag.go +21 -9
@@ -101,10 +101,12 @@ func (c *GestureDrag) SetGoPointer(ptr uintptr) {
101101 }
102102
103103 // Emitted whenever dragging starts.
104-func (x *GestureDrag) ConnectDragBegin(cb *func(GestureDrag, float64, float64)) uint32 {
104+func (x *GestureDrag) ConnectDragBegin(cb *func(GestureDrag, float64, float64)) uint {
105105 cbPtr := uintptr(unsafe.Pointer(cb))
106106 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
107- return gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
107+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
108+ glib.SaveHandlerMapping(handlerID, cbPtr)
109+ return handlerID
108110 }
109111
110112 fcb := func(clsPtr uintptr, StartXVarp float64, StartYVarp float64) {
@@ -117,14 +119,18 @@ func (x *GestureDrag) ConnectDragBegin(cb *func(GestureDrag, float64, float64))
117119 }
118120 cbRefPtr := purego.NewCallback(fcb)
119121 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
120- return gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
122+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-begin", cbRefPtr)
123+ glib.SaveHandlerMapping(handlerID, cbPtr)
124+ return handlerID
121125 }
122126
123127 // Emitted whenever the dragging is finished.
124-func (x *GestureDrag) ConnectDragEnd(cb *func(GestureDrag, float64, float64)) uint32 {
128+func (x *GestureDrag) ConnectDragEnd(cb *func(GestureDrag, float64, float64)) uint {
125129 cbPtr := uintptr(unsafe.Pointer(cb))
126130 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
127- return gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
131+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
132+ glib.SaveHandlerMapping(handlerID, cbPtr)
133+ return handlerID
128134 }
129135
130136 fcb := func(clsPtr uintptr, OffsetXVarp float64, OffsetYVarp float64) {
@@ -137,14 +143,18 @@ func (x *GestureDrag) ConnectDragEnd(cb *func(GestureDrag, float64, float64)) ui
137143 }
138144 cbRefPtr := purego.NewCallback(fcb)
139145 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
140- return gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
146+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-end", cbRefPtr)
147+ glib.SaveHandlerMapping(handlerID, cbPtr)
148+ return handlerID
141149 }
142150
143151 // Emitted whenever the dragging point moves.
144-func (x *GestureDrag) ConnectDragUpdate(cb *func(GestureDrag, float64, float64)) uint32 {
152+func (x *GestureDrag) ConnectDragUpdate(cb *func(GestureDrag, float64, float64)) uint {
145153 cbPtr := uintptr(unsafe.Pointer(cb))
146154 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
147- return gobject.SignalConnect(x.GoPointer(), "drag-update", cbRefPtr)
155+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-update", cbRefPtr)
156+ glib.SaveHandlerMapping(handlerID, cbPtr)
157+ return handlerID
148158 }
149159
150160 fcb := func(clsPtr uintptr, OffsetXVarp float64, OffsetYVarp float64) {
@@ -157,7 +167,9 @@ func (x *GestureDrag) ConnectDragUpdate(cb *func(GestureDrag, float64, float64))
157167 }
158168 cbRefPtr := purego.NewCallback(fcb)
159169 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
160- return gobject.SignalConnect(x.GoPointer(), "drag-update", cbRefPtr)
170+ handlerID := gobject.SignalConnect(x.GoPointer(), "drag-update", cbRefPtr)
171+ glib.SaveHandlerMapping(handlerID, cbPtr)
172+ return handlerID
161173 }
162174
163175 func init() {
M v4/gtk/gtkgesturelongpress.go +14 -6
@@ -119,10 +119,12 @@ func (x *GestureLongPress) GetPropertyDelayFactor() float64 {
119119
120120 // Emitted whenever a press moved too far, or was released
121121 // before [signal@Gtk.GestureLongPress::pressed] happened.
122-func (x *GestureLongPress) ConnectCancelled(cb *func(GestureLongPress)) uint32 {
122+func (x *GestureLongPress) ConnectCancelled(cb *func(GestureLongPress)) uint {
123123 cbPtr := uintptr(unsafe.Pointer(cb))
124124 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
125- return gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
125+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
126+ glib.SaveHandlerMapping(handlerID, cbPtr)
127+ return handlerID
126128 }
127129
128130 fcb := func(clsPtr uintptr) {
@@ -135,15 +137,19 @@ func (x *GestureLongPress) ConnectCancelled(cb *func(GestureLongPress)) uint32 {
135137 }
136138 cbRefPtr := purego.NewCallback(fcb)
137139 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
138- return gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
140+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancelled", cbRefPtr)
141+ glib.SaveHandlerMapping(handlerID, cbPtr)
142+ return handlerID
139143 }
140144
141145 // Emitted whenever a press goes unmoved/unreleased longer than
142146 // what the GTK defaults tell.
143-func (x *GestureLongPress) ConnectPressed(cb *func(GestureLongPress, float64, float64)) uint32 {
147+func (x *GestureLongPress) ConnectPressed(cb *func(GestureLongPress, float64, float64)) uint {
144148 cbPtr := uintptr(unsafe.Pointer(cb))
145149 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
146- return gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
150+ handlerID := gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
151+ glib.SaveHandlerMapping(handlerID, cbPtr)
152+ return handlerID
147153 }
148154
149155 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -156,7 +162,9 @@ func (x *GestureLongPress) ConnectPressed(cb *func(GestureLongPress, float64, fl
156162 }
157163 cbRefPtr := purego.NewCallback(fcb)
158164 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
159- return gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
165+ handlerID := gobject.SignalConnect(x.GoPointer(), "pressed", cbRefPtr)
166+ glib.SaveHandlerMapping(handlerID, cbPtr)
167+ return handlerID
160168 }
161169
162170 func init() {
M v4/gtk/gtkgesturepan.go +7 -3
@@ -97,10 +97,12 @@ func (c *GesturePan) SetGoPointer(ptr uintptr) {
9797 }
9898
9999 // Emitted once a panning gesture along the expected axis is detected.
100-func (x *GesturePan) ConnectPan(cb *func(GesturePan, PanDirection, float64)) uint32 {
100+func (x *GesturePan) ConnectPan(cb *func(GesturePan, PanDirection, float64)) uint {
101101 cbPtr := uintptr(unsafe.Pointer(cb))
102102 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
103- return gobject.SignalConnect(x.GoPointer(), "pan", cbRefPtr)
103+ handlerID := gobject.SignalConnect(x.GoPointer(), "pan", cbRefPtr)
104+ glib.SaveHandlerMapping(handlerID, cbPtr)
105+ return handlerID
104106 }
105107
106108 fcb := func(clsPtr uintptr, DirectionVarp PanDirection, OffsetVarp float64) {
@@ -113,7 +115,9 @@ func (x *GesturePan) ConnectPan(cb *func(GesturePan, PanDirection, float64)) uin
113115 }
114116 cbRefPtr := purego.NewCallback(fcb)
115117 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
116- return gobject.SignalConnect(x.GoPointer(), "pan", cbRefPtr)
118+ handlerID := gobject.SignalConnect(x.GoPointer(), "pan", cbRefPtr)
119+ glib.SaveHandlerMapping(handlerID, cbPtr)
120+ return handlerID
117121 }
118122
119123 func init() {
M v4/gtk/gtkgesturerotate.go +7 -3
@@ -83,10 +83,12 @@ func (c *GestureRotate) SetGoPointer(ptr uintptr) {
8383 }
8484
8585 // Emitted when the angle between both tracked points changes.
86-func (x *GestureRotate) ConnectAngleChanged(cb *func(GestureRotate, float64, float64)) uint32 {
86+func (x *GestureRotate) ConnectAngleChanged(cb *func(GestureRotate, float64, float64)) uint {
8787 cbPtr := uintptr(unsafe.Pointer(cb))
8888 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
89- return gobject.SignalConnect(x.GoPointer(), "angle-changed", cbRefPtr)
89+ handlerID := gobject.SignalConnect(x.GoPointer(), "angle-changed", cbRefPtr)
90+ glib.SaveHandlerMapping(handlerID, cbPtr)
91+ return handlerID
9092 }
9193
9294 fcb := func(clsPtr uintptr, AngleVarp float64, AngleDeltaVarp float64) {
@@ -99,7 +101,9 @@ func (x *GestureRotate) ConnectAngleChanged(cb *func(GestureRotate, float64, flo
99101 }
100102 cbRefPtr := purego.NewCallback(fcb)
101103 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
102- return gobject.SignalConnect(x.GoPointer(), "angle-changed", cbRefPtr)
104+ handlerID := gobject.SignalConnect(x.GoPointer(), "angle-changed", cbRefPtr)
105+ glib.SaveHandlerMapping(handlerID, cbPtr)
106+ return handlerID
103107 }
104108
105109 func init() {
M v4/gtk/gtkgesturestylus.go +28 -12
@@ -185,10 +185,12 @@ func (x *GestureStylus) GetPropertyStylusOnly() bool {
185185 }
186186
187187 // Emitted when the stylus touches the device.
188-func (x *GestureStylus) ConnectDown(cb *func(GestureStylus, float64, float64)) uint32 {
188+func (x *GestureStylus) ConnectDown(cb *func(GestureStylus, float64, float64)) uint {
189189 cbPtr := uintptr(unsafe.Pointer(cb))
190190 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
191- return gobject.SignalConnect(x.GoPointer(), "down", cbRefPtr)
191+ handlerID := gobject.SignalConnect(x.GoPointer(), "down", cbRefPtr)
192+ glib.SaveHandlerMapping(handlerID, cbPtr)
193+ return handlerID
192194 }
193195
194196 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -201,14 +203,18 @@ func (x *GestureStylus) ConnectDown(cb *func(GestureStylus, float64, float64)) u
201203 }
202204 cbRefPtr := purego.NewCallback(fcb)
203205 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
204- return gobject.SignalConnect(x.GoPointer(), "down", cbRefPtr)
206+ handlerID := gobject.SignalConnect(x.GoPointer(), "down", cbRefPtr)
207+ glib.SaveHandlerMapping(handlerID, cbPtr)
208+ return handlerID
205209 }
206210
207211 // Emitted when the stylus moves while touching the device.
208-func (x *GestureStylus) ConnectMotion(cb *func(GestureStylus, float64, float64)) uint32 {
212+func (x *GestureStylus) ConnectMotion(cb *func(GestureStylus, float64, float64)) uint {
209213 cbPtr := uintptr(unsafe.Pointer(cb))
210214 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
211- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
215+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
216+ glib.SaveHandlerMapping(handlerID, cbPtr)
217+ return handlerID
212218 }
213219
214220 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -221,14 +227,18 @@ func (x *GestureStylus) ConnectMotion(cb *func(GestureStylus, float64, float64))
221227 }
222228 cbRefPtr := purego.NewCallback(fcb)
223229 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
224- return gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
230+ handlerID := gobject.SignalConnect(x.GoPointer(), "motion", cbRefPtr)
231+ glib.SaveHandlerMapping(handlerID, cbPtr)
232+ return handlerID
225233 }
226234
227235 // Emitted when the stylus is in proximity of the device.
228-func (x *GestureStylus) ConnectProximity(cb *func(GestureStylus, float64, float64)) uint32 {
236+func (x *GestureStylus) ConnectProximity(cb *func(GestureStylus, float64, float64)) uint {
229237 cbPtr := uintptr(unsafe.Pointer(cb))
230238 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
231- return gobject.SignalConnect(x.GoPointer(), "proximity", cbRefPtr)
239+ handlerID := gobject.SignalConnect(x.GoPointer(), "proximity", cbRefPtr)
240+ glib.SaveHandlerMapping(handlerID, cbPtr)
241+ return handlerID
232242 }
233243
234244 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -241,14 +251,18 @@ func (x *GestureStylus) ConnectProximity(cb *func(GestureStylus, float64, float6
241251 }
242252 cbRefPtr := purego.NewCallback(fcb)
243253 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
244- return gobject.SignalConnect(x.GoPointer(), "proximity", cbRefPtr)
254+ handlerID := gobject.SignalConnect(x.GoPointer(), "proximity", cbRefPtr)
255+ glib.SaveHandlerMapping(handlerID, cbPtr)
256+ return handlerID
245257 }
246258
247259 // Emitted when the stylus no longer touches the device.
248-func (x *GestureStylus) ConnectUp(cb *func(GestureStylus, float64, float64)) uint32 {
260+func (x *GestureStylus) ConnectUp(cb *func(GestureStylus, float64, float64)) uint {
249261 cbPtr := uintptr(unsafe.Pointer(cb))
250262 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
251- return gobject.SignalConnect(x.GoPointer(), "up", cbRefPtr)
263+ handlerID := gobject.SignalConnect(x.GoPointer(), "up", cbRefPtr)
264+ glib.SaveHandlerMapping(handlerID, cbPtr)
265+ return handlerID
252266 }
253267
254268 fcb := func(clsPtr uintptr, XVarp float64, YVarp float64) {
@@ -261,7 +275,9 @@ func (x *GestureStylus) ConnectUp(cb *func(GestureStylus, float64, float64)) uin
261275 }
262276 cbRefPtr := purego.NewCallback(fcb)
263277 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
264- return gobject.SignalConnect(x.GoPointer(), "up", cbRefPtr)
278+ handlerID := gobject.SignalConnect(x.GoPointer(), "up", cbRefPtr)
279+ glib.SaveHandlerMapping(handlerID, cbPtr)
280+ return handlerID
265281 }
266282
267283 func init() {
M v4/gtk/gtkgestureswipe.go +7 -3
@@ -92,10 +92,12 @@ func (c *GestureSwipe) SetGoPointer(ptr uintptr) {
9292 // Emitted when the recognized gesture is finished.
9393 //
9494 // Velocity and direction are a product of previously recorded events.
95-func (x *GestureSwipe) ConnectSwipe(cb *func(GestureSwipe, float64, float64)) uint32 {
95+func (x *GestureSwipe) ConnectSwipe(cb *func(GestureSwipe, float64, float64)) uint {
9696 cbPtr := uintptr(unsafe.Pointer(cb))
9797 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
98- return gobject.SignalConnect(x.GoPointer(), "swipe", cbRefPtr)
98+ handlerID := gobject.SignalConnect(x.GoPointer(), "swipe", cbRefPtr)
99+ glib.SaveHandlerMapping(handlerID, cbPtr)
100+ return handlerID
99101 }
100102
101103 fcb := func(clsPtr uintptr, VelocityXVarp float64, VelocityYVarp float64) {
@@ -108,7 +110,9 @@ func (x *GestureSwipe) ConnectSwipe(cb *func(GestureSwipe, float64, float64)) ui
108110 }
109111 cbRefPtr := purego.NewCallback(fcb)
110112 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
111- return gobject.SignalConnect(x.GoPointer(), "swipe", cbRefPtr)
113+ handlerID := gobject.SignalConnect(x.GoPointer(), "swipe", cbRefPtr)
114+ glib.SaveHandlerMapping(handlerID, cbPtr)
115+ return handlerID
112116 }
113117
114118 func init() {
M v4/gtk/gtkgesturezoom.go +7 -3
@@ -85,10 +85,12 @@ func (c *GestureZoom) SetGoPointer(ptr uintptr) {
8585 }
8686
8787 // Emitted whenever the distance between both tracked sequences changes.
88-func (x *GestureZoom) ConnectScaleChanged(cb *func(GestureZoom, float64)) uint32 {
88+func (x *GestureZoom) ConnectScaleChanged(cb *func(GestureZoom, float64)) uint {
8989 cbPtr := uintptr(unsafe.Pointer(cb))
9090 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
91- return gobject.SignalConnect(x.GoPointer(), "scale-changed", cbRefPtr)
91+ handlerID := gobject.SignalConnect(x.GoPointer(), "scale-changed", cbRefPtr)
92+ glib.SaveHandlerMapping(handlerID, cbPtr)
93+ return handlerID
9294 }
9395
9496 fcb := func(clsPtr uintptr, ScaleVarp float64) {
@@ -101,7 +103,9 @@ func (x *GestureZoom) ConnectScaleChanged(cb *func(GestureZoom, float64)) uint32
101103 }
102104 cbRefPtr := purego.NewCallback(fcb)
103105 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
104- return gobject.SignalConnect(x.GoPointer(), "scale-changed", cbRefPtr)
106+ handlerID := gobject.SignalConnect(x.GoPointer(), "scale-changed", cbRefPtr)
107+ glib.SaveHandlerMapping(handlerID, cbPtr)
108+ return handlerID
105109 }
106110
107111 func init() {
M v4/gtk/gtkglarea.go +21 -9
@@ -641,10 +641,12 @@ func (x *GLArea) GetPropertyUseEs() bool {
641641 // If context creation fails then the signal handler can use
642642 // [method@Gtk.GLArea.set_error] to register a more detailed error
643643 // of how the construction failed.
644-func (x *GLArea) ConnectCreateContext(cb *func(GLArea) gdk.GLContext) uint32 {
644+func (x *GLArea) ConnectCreateContext(cb *func(GLArea) gdk.GLContext) uint {
645645 cbPtr := uintptr(unsafe.Pointer(cb))
646646 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
647- return gobject.SignalConnect(x.GoPointer(), "create-context", cbRefPtr)
647+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-context", cbRefPtr)
648+ glib.SaveHandlerMapping(handlerID, cbPtr)
649+ return handlerID
648650 }
649651
650652 fcb := func(clsPtr uintptr) uintptr {
@@ -658,17 +660,21 @@ func (x *GLArea) ConnectCreateContext(cb *func(GLArea) gdk.GLContext) uint32 {
658660 }
659661 cbRefPtr := purego.NewCallback(fcb)
660662 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
661- return gobject.SignalConnect(x.GoPointer(), "create-context", cbRefPtr)
663+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-context", cbRefPtr)
664+ glib.SaveHandlerMapping(handlerID, cbPtr)
665+ return handlerID
662666 }
663667
664668 // Emitted every time the contents of the `GtkGLArea` should be redrawn.
665669 //
666670 // The @context is bound to the @area prior to emitting this function,
667671 // and the buffers are painted to the window once the emission terminates.
668-func (x *GLArea) ConnectRender(cb *func(GLArea, uintptr) bool) uint32 {
672+func (x *GLArea) ConnectRender(cb *func(GLArea, uintptr) bool) uint {
669673 cbPtr := uintptr(unsafe.Pointer(cb))
670674 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
671- return gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
675+ handlerID := gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
676+ glib.SaveHandlerMapping(handlerID, cbPtr)
677+ return handlerID
672678 }
673679
674680 fcb := func(clsPtr uintptr, ContextVarp uintptr) bool {
@@ -681,7 +687,9 @@ func (x *GLArea) ConnectRender(cb *func(GLArea, uintptr) bool) uint32 {
681687 }
682688 cbRefPtr := purego.NewCallback(fcb)
683689 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
684- return gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
690+ handlerID := gobject.SignalConnect(x.GoPointer(), "render", cbRefPtr)
691+ glib.SaveHandlerMapping(handlerID, cbPtr)
692+ return handlerID
685693 }
686694
687695 // Emitted once when the widget is realized, and then each time the widget
@@ -695,10 +703,12 @@ func (x *GLArea) ConnectRender(cb *func(GLArea, uintptr) bool) uint32 {
695703 // is emitted.
696704 //
697705 // The default handler sets up the GL viewport.
698-func (x *GLArea) ConnectResize(cb *func(GLArea, int, int)) uint32 {
706+func (x *GLArea) ConnectResize(cb *func(GLArea, int, int)) uint {
699707 cbPtr := uintptr(unsafe.Pointer(cb))
700708 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
701- return gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
709+ handlerID := gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
710+ glib.SaveHandlerMapping(handlerID, cbPtr)
711+ return handlerID
702712 }
703713
704714 fcb := func(clsPtr uintptr, WidthVarp int, HeightVarp int) {
@@ -711,7 +721,9 @@ func (x *GLArea) ConnectResize(cb *func(GLArea, int, int)) uint32 {
711721 }
712722 cbRefPtr := purego.NewCallback(fcb)
713723 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
714- return gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
724+ handlerID := gobject.SignalConnect(x.GoPointer(), "resize", cbRefPtr)
725+ glib.SaveHandlerMapping(handlerID, cbPtr)
726+ return handlerID
715727 }
716728
717729 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkgridview.go +7 -3
@@ -370,10 +370,12 @@ func (x *GridView) GetPropertySingleClickActivate() bool {
370370 // This allows for a convenient way to handle activation in a gridview.
371371 // See [property@Gtk.ListItem:activatable] for details on how to use
372372 // this signal.
373-func (x *GridView) ConnectActivate(cb *func(GridView, uint)) uint32 {
373+func (x *GridView) ConnectActivate(cb *func(GridView, uint)) uint {
374374 cbPtr := uintptr(unsafe.Pointer(cb))
375375 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
376- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
376+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
377+ glib.SaveHandlerMapping(handlerID, cbPtr)
378+ return handlerID
377379 }
378380
379381 fcb := func(clsPtr uintptr, PositionVarp uint) {
@@ -386,7 +388,9 @@ func (x *GridView) ConnectActivate(cb *func(GridView, uint)) uint32 {
386388 }
387389 cbRefPtr := purego.NewCallback(fcb)
388390 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
389- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
391+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
392+ glib.SaveHandlerMapping(handlerID, cbPtr)
393+ return handlerID
390394 }
391395
392396 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkicontheme.go +7 -3
@@ -478,10 +478,12 @@ func (x *IconTheme) GetPropertyThemeName() string {
478478 // This can happen because current icon theme is switched or
479479 // because GTK detects that a change has occurred in the
480480 // contents of the current icon theme.
481-func (x *IconTheme) ConnectChanged(cb *func(IconTheme)) uint32 {
481+func (x *IconTheme) ConnectChanged(cb *func(IconTheme)) uint {
482482 cbPtr := uintptr(unsafe.Pointer(cb))
483483 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
484- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
484+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
485+ glib.SaveHandlerMapping(handlerID, cbPtr)
486+ return handlerID
485487 }
486488
487489 fcb := func(clsPtr uintptr) {
@@ -494,7 +496,9 @@ func (x *IconTheme) ConnectChanged(cb *func(IconTheme)) uint32 {
494496 }
495497 cbRefPtr := purego.NewCallback(fcb)
496498 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
497- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
499+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
500+ glib.SaveHandlerMapping(handlerID, cbPtr)
501+ return handlerID
498502 }
499503
500504 var xIconThemeGetForDisplay func(uintptr) uintptr
M v4/gtk/gtkiconview.go +56 -24
@@ -1139,10 +1139,12 @@ func (x *IconView) GetPropertyTooltipColumn() int {
11391139 // programmatically.
11401140 //
11411141 // The default bindings for this signal are Space, Return and Enter.
1142-func (x *IconView) ConnectActivateCursorItem(cb *func(IconView) bool) uint32 {
1142+func (x *IconView) ConnectActivateCursorItem(cb *func(IconView) bool) uint {
11431143 cbPtr := uintptr(unsafe.Pointer(cb))
11441144 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1145- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-item", cbRefPtr)
1145+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-item", cbRefPtr)
1146+ glib.SaveHandlerMapping(handlerID, cbPtr)
1147+ return handlerID
11461148 }
11471149
11481150 fcb := func(clsPtr uintptr) bool {
@@ -1155,7 +1157,9 @@ func (x *IconView) ConnectActivateCursorItem(cb *func(IconView) bool) uint32 {
11551157 }
11561158 cbRefPtr := purego.NewCallback(fcb)
11571159 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1158- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-item", cbRefPtr)
1160+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-item", cbRefPtr)
1161+ glib.SaveHandlerMapping(handlerID, cbPtr)
1162+ return handlerID
11591163 }
11601164
11611165 // The ::item-activated signal is emitted when the method
@@ -1165,10 +1169,12 @@ func (x *IconView) ConnectActivateCursorItem(cb *func(IconView) bool) uint32 {
11651169 // "activate-on-single-click" property set to %TRUE. It is also
11661170 // emitted when a non-editable item is selected and one of the keys:
11671171 // Space, Return or Enter is pressed.
1168-func (x *IconView) ConnectItemActivated(cb *func(IconView, uintptr)) uint32 {
1172+func (x *IconView) ConnectItemActivated(cb *func(IconView, uintptr)) uint {
11691173 cbPtr := uintptr(unsafe.Pointer(cb))
11701174 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1171- return gobject.SignalConnect(x.GoPointer(), "item-activated", cbRefPtr)
1175+ handlerID := gobject.SignalConnect(x.GoPointer(), "item-activated", cbRefPtr)
1176+ glib.SaveHandlerMapping(handlerID, cbPtr)
1177+ return handlerID
11721178 }
11731179
11741180 fcb := func(clsPtr uintptr, PathVarp uintptr) {
@@ -1181,7 +1187,9 @@ func (x *IconView) ConnectItemActivated(cb *func(IconView, uintptr)) uint32 {
11811187 }
11821188 cbRefPtr := purego.NewCallback(fcb)
11831189 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1184- return gobject.SignalConnect(x.GoPointer(), "item-activated", cbRefPtr)
1190+ handlerID := gobject.SignalConnect(x.GoPointer(), "item-activated", cbRefPtr)
1191+ glib.SaveHandlerMapping(handlerID, cbPtr)
1192+ return handlerID
11851193 }
11861194
11871195 // The ::move-cursor signal is a
@@ -1198,10 +1206,12 @@ func (x *IconView) ConnectItemActivated(cb *func(IconView, uintptr)) uint32 {
11981206 // - PageUp/PageDown which move by "pages"
11991207 // All of these will extend the selection when combined with
12001208 // the Shift modifier.
1201-func (x *IconView) ConnectMoveCursor(cb *func(IconView, MovementStep, int, bool, bool) bool) uint32 {
1209+func (x *IconView) ConnectMoveCursor(cb *func(IconView, MovementStep, int, bool, bool) bool) uint {
12021210 cbPtr := uintptr(unsafe.Pointer(cb))
12031211 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1204- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1212+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1213+ glib.SaveHandlerMapping(handlerID, cbPtr)
1214+ return handlerID
12051215 }
12061216
12071217 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendVarp bool, ModifyVarp bool) bool {
@@ -1214,7 +1224,9 @@ func (x *IconView) ConnectMoveCursor(cb *func(IconView, MovementStep, int, bool,
12141224 }
12151225 cbRefPtr := purego.NewCallback(fcb)
12161226 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1217- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1227+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1228+ glib.SaveHandlerMapping(handlerID, cbPtr)
1229+ return handlerID
12181230 }
12191231
12201232 // A [keybinding signal][class@Gtk.SignalAction]
@@ -1225,10 +1237,12 @@ func (x *IconView) ConnectMoveCursor(cb *func(IconView, MovementStep, int, bool,
12251237 // programmatically.
12261238 //
12271239 // The default binding for this signal is Ctrl-a.
1228-func (x *IconView) ConnectSelectAll(cb *func(IconView)) uint32 {
1240+func (x *IconView) ConnectSelectAll(cb *func(IconView)) uint {
12291241 cbPtr := uintptr(unsafe.Pointer(cb))
12301242 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1231- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
1243+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
1244+ glib.SaveHandlerMapping(handlerID, cbPtr)
1245+ return handlerID
12321246 }
12331247
12341248 fcb := func(clsPtr uintptr) {
@@ -1241,7 +1255,9 @@ func (x *IconView) ConnectSelectAll(cb *func(IconView)) uint32 {
12411255 }
12421256 cbRefPtr := purego.NewCallback(fcb)
12431257 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1244- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
1258+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
1259+ glib.SaveHandlerMapping(handlerID, cbPtr)
1260+ return handlerID
12451261 }
12461262
12471263 // A [keybinding signal][class@Gtk.SignalAction]
@@ -1253,10 +1269,12 @@ func (x *IconView) ConnectSelectAll(cb *func(IconView)) uint32 {
12531269 // programmatically.
12541270 //
12551271 // There is no default binding for this signal.
1256-func (x *IconView) ConnectSelectCursorItem(cb *func(IconView)) uint32 {
1272+func (x *IconView) ConnectSelectCursorItem(cb *func(IconView)) uint {
12571273 cbPtr := uintptr(unsafe.Pointer(cb))
12581274 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1259- return gobject.SignalConnect(x.GoPointer(), "select-cursor-item", cbRefPtr)
1275+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-item", cbRefPtr)
1276+ glib.SaveHandlerMapping(handlerID, cbPtr)
1277+ return handlerID
12601278 }
12611279
12621280 fcb := func(clsPtr uintptr) {
@@ -1269,15 +1287,19 @@ func (x *IconView) ConnectSelectCursorItem(cb *func(IconView)) uint32 {
12691287 }
12701288 cbRefPtr := purego.NewCallback(fcb)
12711289 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1272- return gobject.SignalConnect(x.GoPointer(), "select-cursor-item", cbRefPtr)
1290+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-item", cbRefPtr)
1291+ glib.SaveHandlerMapping(handlerID, cbPtr)
1292+ return handlerID
12731293 }
12741294
12751295 // The ::selection-changed signal is emitted when the selection
12761296 // (i.e. the set of selected items) changes.
1277-func (x *IconView) ConnectSelectionChanged(cb *func(IconView)) uint32 {
1297+func (x *IconView) ConnectSelectionChanged(cb *func(IconView)) uint {
12781298 cbPtr := uintptr(unsafe.Pointer(cb))
12791299 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1280- return gobject.SignalConnect(x.GoPointer(), "selection-changed", cbRefPtr)
1300+ handlerID := gobject.SignalConnect(x.GoPointer(), "selection-changed", cbRefPtr)
1301+ glib.SaveHandlerMapping(handlerID, cbPtr)
1302+ return handlerID
12811303 }
12821304
12831305 fcb := func(clsPtr uintptr) {
@@ -1290,7 +1312,9 @@ func (x *IconView) ConnectSelectionChanged(cb *func(IconView)) uint32 {
12901312 }
12911313 cbRefPtr := purego.NewCallback(fcb)
12921314 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1293- return gobject.SignalConnect(x.GoPointer(), "selection-changed", cbRefPtr)
1315+ handlerID := gobject.SignalConnect(x.GoPointer(), "selection-changed", cbRefPtr)
1316+ glib.SaveHandlerMapping(handlerID, cbPtr)
1317+ return handlerID
12941318 }
12951319
12961320 // A [keybinding signal][class@Gtk.SignalAction]
@@ -1303,10 +1327,12 @@ func (x *IconView) ConnectSelectionChanged(cb *func(IconView)) uint32 {
13031327 // programmatically.
13041328 //
13051329 // There is no default binding for this signal is Ctrl-Space.
1306-func (x *IconView) ConnectToggleCursorItem(cb *func(IconView)) uint32 {
1330+func (x *IconView) ConnectToggleCursorItem(cb *func(IconView)) uint {
13071331 cbPtr := uintptr(unsafe.Pointer(cb))
13081332 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1309- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-item", cbRefPtr)
1333+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-item", cbRefPtr)
1334+ glib.SaveHandlerMapping(handlerID, cbPtr)
1335+ return handlerID
13101336 }
13111337
13121338 fcb := func(clsPtr uintptr) {
@@ -1319,7 +1345,9 @@ func (x *IconView) ConnectToggleCursorItem(cb *func(IconView)) uint32 {
13191345 }
13201346 cbRefPtr := purego.NewCallback(fcb)
13211347 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1322- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-item", cbRefPtr)
1348+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-item", cbRefPtr)
1349+ glib.SaveHandlerMapping(handlerID, cbPtr)
1350+ return handlerID
13231351 }
13241352
13251353 // A [keybinding signal][class@Gtk.SignalAction]
@@ -1330,10 +1358,12 @@ func (x *IconView) ConnectToggleCursorItem(cb *func(IconView)) uint32 {
13301358 // programmatically.
13311359 //
13321360 // The default binding for this signal is Ctrl-Shift-a.
1333-func (x *IconView) ConnectUnselectAll(cb *func(IconView)) uint32 {
1361+func (x *IconView) ConnectUnselectAll(cb *func(IconView)) uint {
13341362 cbPtr := uintptr(unsafe.Pointer(cb))
13351363 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1336- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1364+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1365+ glib.SaveHandlerMapping(handlerID, cbPtr)
1366+ return handlerID
13371367 }
13381368
13391369 fcb := func(clsPtr uintptr) {
@@ -1346,7 +1376,9 @@ func (x *IconView) ConnectUnselectAll(cb *func(IconView)) uint32 {
13461376 }
13471377 cbRefPtr := purego.NewCallback(fcb)
13481378 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1349- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1379+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1380+ glib.SaveHandlerMapping(handlerID, cbPtr)
1381+ return handlerID
13501382 }
13511383
13521384 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkimcontext.go +42 -18
@@ -1058,10 +1058,12 @@ func (c *IMContext) SetGoPointer(ptr uintptr) {
10581058 //
10591059 // This can be a single character immediately after a key press or
10601060 // the final result of preediting.
1061-func (x *IMContext) ConnectCommit(cb *func(IMContext, string)) uint32 {
1061+func (x *IMContext) ConnectCommit(cb *func(IMContext, string)) uint {
10621062 cbPtr := uintptr(unsafe.Pointer(cb))
10631063 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1064- return gobject.SignalConnect(x.GoPointer(), "commit", cbRefPtr)
1064+ handlerID := gobject.SignalConnect(x.GoPointer(), "commit", cbRefPtr)
1065+ glib.SaveHandlerMapping(handlerID, cbPtr)
1066+ return handlerID
10651067 }
10661068
10671069 fcb := func(clsPtr uintptr, StrVarp string) {
@@ -1074,15 +1076,19 @@ func (x *IMContext) ConnectCommit(cb *func(IMContext, string)) uint32 {
10741076 }
10751077 cbRefPtr := purego.NewCallback(fcb)
10761078 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1077- return gobject.SignalConnect(x.GoPointer(), "commit", cbRefPtr)
1079+ handlerID := gobject.SignalConnect(x.GoPointer(), "commit", cbRefPtr)
1080+ glib.SaveHandlerMapping(handlerID, cbPtr)
1081+ return handlerID
10781082 }
10791083
10801084 // The ::delete-surrounding signal is emitted when the input method
10811085 // needs to delete all or part of the context surrounding the cursor.
1082-func (x *IMContext) ConnectDeleteSurrounding(cb *func(IMContext, int, int) bool) uint32 {
1086+func (x *IMContext) ConnectDeleteSurrounding(cb *func(IMContext, int, int) bool) uint {
10831087 cbPtr := uintptr(unsafe.Pointer(cb))
10841088 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1085- return gobject.SignalConnect(x.GoPointer(), "delete-surrounding", cbRefPtr)
1089+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-surrounding", cbRefPtr)
1090+ glib.SaveHandlerMapping(handlerID, cbPtr)
1091+ return handlerID
10861092 }
10871093
10881094 fcb := func(clsPtr uintptr, OffsetVarp int, NCharsVarp int) bool {
@@ -1095,7 +1101,9 @@ func (x *IMContext) ConnectDeleteSurrounding(cb *func(IMContext, int, int) bool)
10951101 }
10961102 cbRefPtr := purego.NewCallback(fcb)
10971103 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1098- return gobject.SignalConnect(x.GoPointer(), "delete-surrounding", cbRefPtr)
1104+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-surrounding", cbRefPtr)
1105+ glib.SaveHandlerMapping(handlerID, cbPtr)
1106+ return handlerID
10991107 }
11001108
11011109 // The ::preedit-changed signal is emitted whenever the preedit sequence
@@ -1103,10 +1111,12 @@ func (x *IMContext) ConnectDeleteSurrounding(cb *func(IMContext, int, int) bool)
11031111 //
11041112 // It is also emitted at the end of a preedit sequence, in which case
11051113 // [method@Gtk.IMContext.get_preedit_string] returns the empty string.
1106-func (x *IMContext) ConnectPreeditChanged(cb *func(IMContext)) uint32 {
1114+func (x *IMContext) ConnectPreeditChanged(cb *func(IMContext)) uint {
11071115 cbPtr := uintptr(unsafe.Pointer(cb))
11081116 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1109- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1117+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1118+ glib.SaveHandlerMapping(handlerID, cbPtr)
1119+ return handlerID
11101120 }
11111121
11121122 fcb := func(clsPtr uintptr) {
@@ -1119,15 +1129,19 @@ func (x *IMContext) ConnectPreeditChanged(cb *func(IMContext)) uint32 {
11191129 }
11201130 cbRefPtr := purego.NewCallback(fcb)
11211131 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1122- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1132+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1133+ glib.SaveHandlerMapping(handlerID, cbPtr)
1134+ return handlerID
11231135 }
11241136
11251137 // The ::preedit-end signal is emitted when a preediting sequence
11261138 // has been completed or canceled.
1127-func (x *IMContext) ConnectPreeditEnd(cb *func(IMContext)) uint32 {
1139+func (x *IMContext) ConnectPreeditEnd(cb *func(IMContext)) uint {
11281140 cbPtr := uintptr(unsafe.Pointer(cb))
11291141 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1130- return gobject.SignalConnect(x.GoPointer(), "preedit-end", cbRefPtr)
1142+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-end", cbRefPtr)
1143+ glib.SaveHandlerMapping(handlerID, cbPtr)
1144+ return handlerID
11311145 }
11321146
11331147 fcb := func(clsPtr uintptr) {
@@ -1140,15 +1154,19 @@ func (x *IMContext) ConnectPreeditEnd(cb *func(IMContext)) uint32 {
11401154 }
11411155 cbRefPtr := purego.NewCallback(fcb)
11421156 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1143- return gobject.SignalConnect(x.GoPointer(), "preedit-end", cbRefPtr)
1157+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-end", cbRefPtr)
1158+ glib.SaveHandlerMapping(handlerID, cbPtr)
1159+ return handlerID
11441160 }
11451161
11461162 // The ::preedit-start signal is emitted when a new preediting sequence
11471163 // starts.
1148-func (x *IMContext) ConnectPreeditStart(cb *func(IMContext)) uint32 {
1164+func (x *IMContext) ConnectPreeditStart(cb *func(IMContext)) uint {
11491165 cbPtr := uintptr(unsafe.Pointer(cb))
11501166 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1151- return gobject.SignalConnect(x.GoPointer(), "preedit-start", cbRefPtr)
1167+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-start", cbRefPtr)
1168+ glib.SaveHandlerMapping(handlerID, cbPtr)
1169+ return handlerID
11521170 }
11531171
11541172 fcb := func(clsPtr uintptr) {
@@ -1161,7 +1179,9 @@ func (x *IMContext) ConnectPreeditStart(cb *func(IMContext)) uint32 {
11611179 }
11621180 cbRefPtr := purego.NewCallback(fcb)
11631181 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1164- return gobject.SignalConnect(x.GoPointer(), "preedit-start", cbRefPtr)
1182+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-start", cbRefPtr)
1183+ glib.SaveHandlerMapping(handlerID, cbPtr)
1184+ return handlerID
11651185 }
11661186
11671187 // The ::retrieve-surrounding signal is emitted when the input method
@@ -1169,10 +1189,12 @@ func (x *IMContext) ConnectPreeditStart(cb *func(IMContext)) uint32 {
11691189 //
11701190 // The callback should set the input method surrounding context by
11711191 // calling the [method@Gtk.IMContext.set_surrounding] method.
1172-func (x *IMContext) ConnectRetrieveSurrounding(cb *func(IMContext) bool) uint32 {
1192+func (x *IMContext) ConnectRetrieveSurrounding(cb *func(IMContext) bool) uint {
11731193 cbPtr := uintptr(unsafe.Pointer(cb))
11741194 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1175- return gobject.SignalConnect(x.GoPointer(), "retrieve-surrounding", cbRefPtr)
1195+ handlerID := gobject.SignalConnect(x.GoPointer(), "retrieve-surrounding", cbRefPtr)
1196+ glib.SaveHandlerMapping(handlerID, cbPtr)
1197+ return handlerID
11761198 }
11771199
11781200 fcb := func(clsPtr uintptr) bool {
@@ -1185,7 +1207,9 @@ func (x *IMContext) ConnectRetrieveSurrounding(cb *func(IMContext) bool) uint32
11851207 }
11861208 cbRefPtr := purego.NewCallback(fcb)
11871209 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1188- return gobject.SignalConnect(x.GoPointer(), "retrieve-surrounding", cbRefPtr)
1210+ handlerID := gobject.SignalConnect(x.GoPointer(), "retrieve-surrounding", cbRefPtr)
1211+ glib.SaveHandlerMapping(handlerID, cbPtr)
1212+ return handlerID
11891213 }
11901214
11911215 func init() {
M v4/gtk/gtkinfobar.go +14 -6
@@ -391,10 +391,12 @@ func (x *InfoBar) GetPropertyShowCloseButton() bool {
391391 // The ::close signal is a [keybinding signal](class.SignalAction.html).
392392 //
393393 // The default binding for this signal is the Escape key.
394-func (x *InfoBar) ConnectClose(cb *func(InfoBar)) uint32 {
394+func (x *InfoBar) ConnectClose(cb *func(InfoBar)) uint {
395395 cbPtr := uintptr(unsafe.Pointer(cb))
396396 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
397- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
397+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
398+ glib.SaveHandlerMapping(handlerID, cbPtr)
399+ return handlerID
398400 }
399401
400402 fcb := func(clsPtr uintptr) {
@@ -407,7 +409,9 @@ func (x *InfoBar) ConnectClose(cb *func(InfoBar)) uint32 {
407409 }
408410 cbRefPtr := purego.NewCallback(fcb)
409411 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
410- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
412+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
413+ glib.SaveHandlerMapping(handlerID, cbPtr)
414+ return handlerID
411415 }
412416
413417 // Emitted when an action widget is clicked.
@@ -415,10 +419,12 @@ func (x *InfoBar) ConnectClose(cb *func(InfoBar)) uint32 {
415419 // The signal is also emitted when the application programmer
416420 // calls [method@Gtk.InfoBar.response]. The @response_id depends
417421 // on which action widget was clicked.
418-func (x *InfoBar) ConnectResponse(cb *func(InfoBar, int)) uint32 {
422+func (x *InfoBar) ConnectResponse(cb *func(InfoBar, int)) uint {
419423 cbPtr := uintptr(unsafe.Pointer(cb))
420424 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
421- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
425+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
426+ glib.SaveHandlerMapping(handlerID, cbPtr)
427+ return handlerID
422428 }
423429
424430 fcb := func(clsPtr uintptr, ResponseIdVarp int) {
@@ -431,7 +437,9 @@ func (x *InfoBar) ConnectResponse(cb *func(InfoBar, int)) uint32 {
431437 }
432438 cbRefPtr := purego.NewCallback(fcb)
433439 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
434- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
440+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
441+ glib.SaveHandlerMapping(handlerID, cbPtr)
442+ return handlerID
435443 }
436444
437445 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtklabel.go +28 -12
@@ -1336,10 +1336,12 @@ func (x *Label) GetPropertyYalign() float32 {
13361336 // if they need to control activation of URIs programmatically.
13371337 //
13381338 // The default bindings for this signal are all forms of the &lt;kbd&gt;Enter&lt;/kbd&gt; key.
1339-func (x *Label) ConnectActivateCurrentLink(cb *func(Label)) uint32 {
1339+func (x *Label) ConnectActivateCurrentLink(cb *func(Label)) uint {
13401340 cbPtr := uintptr(unsafe.Pointer(cb))
13411341 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1342- return gobject.SignalConnect(x.GoPointer(), "activate-current-link", cbRefPtr)
1342+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-current-link", cbRefPtr)
1343+ glib.SaveHandlerMapping(handlerID, cbPtr)
1344+ return handlerID
13431345 }
13441346
13451347 fcb := func(clsPtr uintptr) {
@@ -1352,17 +1354,21 @@ func (x *Label) ConnectActivateCurrentLink(cb *func(Label)) uint32 {
13521354 }
13531355 cbRefPtr := purego.NewCallback(fcb)
13541356 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1355- return gobject.SignalConnect(x.GoPointer(), "activate-current-link", cbRefPtr)
1357+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-current-link", cbRefPtr)
1358+ glib.SaveHandlerMapping(handlerID, cbPtr)
1359+ return handlerID
13561360 }
13571361
13581362 // Gets emitted to activate a URI.
13591363 //
13601364 // Applications may connect to it to override the default behaviour,
13611365 // which is to call [method@Gtk.FileLauncher.launch].
1362-func (x *Label) ConnectActivateLink(cb *func(Label, string) bool) uint32 {
1366+func (x *Label) ConnectActivateLink(cb *func(Label, string) bool) uint {
13631367 cbPtr := uintptr(unsafe.Pointer(cb))
13641368 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1365- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1369+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1370+ glib.SaveHandlerMapping(handlerID, cbPtr)
1371+ return handlerID
13661372 }
13671373
13681374 fcb := func(clsPtr uintptr, UriVarp string) bool {
@@ -1375,7 +1381,9 @@ func (x *Label) ConnectActivateLink(cb *func(Label, string) bool) uint32 {
13751381 }
13761382 cbRefPtr := purego.NewCallback(fcb)
13771383 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1378- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1384+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
1385+ glib.SaveHandlerMapping(handlerID, cbPtr)
1386+ return handlerID
13791387 }
13801388
13811389 // Gets emitted to copy the selection to the clipboard.
@@ -1383,10 +1391,12 @@ func (x *Label) ConnectActivateLink(cb *func(Label, string) bool) uint32 {
13831391 // The `::copy-clipboard` signal is a [keybinding signal](class.SignalAction.html).
13841392 //
13851393 // The default binding for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;c&lt;/kbd&gt;.
1386-func (x *Label) ConnectCopyClipboard(cb *func(Label)) uint32 {
1394+func (x *Label) ConnectCopyClipboard(cb *func(Label)) uint {
13871395 cbPtr := uintptr(unsafe.Pointer(cb))
13881396 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1389- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
1397+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
1398+ glib.SaveHandlerMapping(handlerID, cbPtr)
1399+ return handlerID
13901400 }
13911401
13921402 fcb := func(clsPtr uintptr) {
@@ -1399,7 +1409,9 @@ func (x *Label) ConnectCopyClipboard(cb *func(Label)) uint32 {
13991409 }
14001410 cbRefPtr := purego.NewCallback(fcb)
14011411 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1402- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
1412+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
1413+ glib.SaveHandlerMapping(handlerID, cbPtr)
1414+ return handlerID
14031415 }
14041416
14051417 // Gets emitted when the user initiates a cursor movement.
@@ -1421,10 +1433,12 @@ func (x *Label) ConnectCopyClipboard(cb *func(Label)) uint32 {
14211433 // move by individual characters/lines
14221434 // - &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;←&lt;/kbd&gt;, etc. move by words/paragraphs
14231435 // - &lt;kbd&gt;Home&lt;/kbd&gt; and &lt;kbd&gt;End&lt;/kbd&gt; move to the ends of the buffer
1424-func (x *Label) ConnectMoveCursor(cb *func(Label, MovementStep, int, bool)) uint32 {
1436+func (x *Label) ConnectMoveCursor(cb *func(Label, MovementStep, int, bool)) uint {
14251437 cbPtr := uintptr(unsafe.Pointer(cb))
14261438 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1427- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1439+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1440+ glib.SaveHandlerMapping(handlerID, cbPtr)
1441+ return handlerID
14281442 }
14291443
14301444 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendSelectionVarp bool) {
@@ -1437,7 +1451,9 @@ func (x *Label) ConnectMoveCursor(cb *func(Label, MovementStep, int, bool)) uint
14371451 }
14381452 cbRefPtr := purego.NewCallback(fcb)
14391453 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1440- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1454+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1455+ glib.SaveHandlerMapping(handlerID, cbPtr)
1456+ return handlerID
14411457 }
14421458
14431459 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtklevelbar.go +14 -6
@@ -419,10 +419,12 @@ func (x *LevelBar) GetPropertyValue() float64 {
419419 // The signal supports detailed connections; you can connect to the
420420 // detailed signal "changed::x" in order to only receive callbacks when
421421 // the value of offset "x" changes.
422-func (x *LevelBar) ConnectOffsetChanged(cb *func(LevelBar, string)) uint32 {
422+func (x *LevelBar) ConnectOffsetChanged(cb *func(LevelBar, string)) uint {
423423 cbPtr := uintptr(unsafe.Pointer(cb))
424424 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
425- return gobject.SignalConnect(x.GoPointer(), "offset-changed", cbRefPtr)
425+ handlerID := gobject.SignalConnect(x.GoPointer(), "offset-changed", cbRefPtr)
426+ glib.SaveHandlerMapping(handlerID, cbPtr)
427+ return handlerID
426428 }
427429
428430 fcb := func(clsPtr uintptr, NameVarp string) {
@@ -435,16 +437,20 @@ func (x *LevelBar) ConnectOffsetChanged(cb *func(LevelBar, string)) uint32 {
435437 }
436438 cbRefPtr := purego.NewCallback(fcb)
437439 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
438- return gobject.SignalConnect(x.GoPointer(), "offset-changed", cbRefPtr)
440+ handlerID := gobject.SignalConnect(x.GoPointer(), "offset-changed", cbRefPtr)
441+ glib.SaveHandlerMapping(handlerID, cbPtr)
442+ return handlerID
439443 }
440444
441445 // ConnectOffsetChangedWithDetail connects to the "offset-changed" signal with a detail string.
442446 // The detail is appended as "offset-changed::<detail>".
443-func (x *LevelBar) ConnectOffsetChangedWithDetail(detail string, cb *func(LevelBar, string)) uint32 {
447+func (x *LevelBar) ConnectOffsetChangedWithDetail(detail string, cb *func(LevelBar, string)) uint {
444448 cbPtr := uintptr(unsafe.Pointer(cb))
445449 signalName := fmt.Sprintf("offset-changed::%s", detail)
446450 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
447- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
451+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
452+ glib.SaveHandlerMapping(handlerID, cbPtr)
453+ return handlerID
448454 }
449455
450456 fcb := func(clsPtr uintptr, NameVarp string) {
@@ -457,7 +463,9 @@ func (x *LevelBar) ConnectOffsetChangedWithDetail(detail string, cb *func(LevelB
457463 }
458464 cbRefPtr := purego.NewCallback(fcb)
459465 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
460- return gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
466+ handlerID := gobject.SignalConnect(x.GoPointer(), signalName, cbRefPtr)
467+ glib.SaveHandlerMapping(handlerID, cbPtr)
468+ return handlerID
461469 }
462470
463471 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtklinkbutton.go +7 -3
@@ -214,10 +214,12 @@ func (x *LinkButton) GetPropertyVisited() bool {
214214 // To override the default behavior, you can connect to the
215215 // ::activate-link signal and stop the propagation of the signal
216216 // by returning %TRUE from your handler.
217-func (x *LinkButton) ConnectActivateLink(cb *func(LinkButton) bool) uint32 {
217+func (x *LinkButton) ConnectActivateLink(cb *func(LinkButton) bool) uint {
218218 cbPtr := uintptr(unsafe.Pointer(cb))
219219 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
220- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
220+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
221+ glib.SaveHandlerMapping(handlerID, cbPtr)
222+ return handlerID
221223 }
222224
223225 fcb := func(clsPtr uintptr) bool {
@@ -230,7 +232,9 @@ func (x *LinkButton) ConnectActivateLink(cb *func(LinkButton) bool) uint32 {
230232 }
231233 cbRefPtr := purego.NewCallback(fcb)
232234 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
233- return gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
235+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-link", cbRefPtr)
236+ glib.SaveHandlerMapping(handlerID, cbPtr)
237+ return handlerID
234238 }
235239
236240 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtklistbox.go +63 -27
@@ -843,10 +843,12 @@ func (x *ListBox) GetPropertyShowSeparators() bool {
843843 }
844844
845845 // Emitted when the cursor row is activated.
846-func (x *ListBox) ConnectActivateCursorRow(cb *func(ListBox)) uint32 {
846+func (x *ListBox) ConnectActivateCursorRow(cb *func(ListBox)) uint {
847847 cbPtr := uintptr(unsafe.Pointer(cb))
848848 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
849- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-row", cbRefPtr)
849+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-row", cbRefPtr)
850+ glib.SaveHandlerMapping(handlerID, cbPtr)
851+ return handlerID
850852 }
851853
852854 fcb := func(clsPtr uintptr) {
@@ -859,7 +861,9 @@ func (x *ListBox) ConnectActivateCursorRow(cb *func(ListBox)) uint32 {
859861 }
860862 cbRefPtr := purego.NewCallback(fcb)
861863 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
862- return gobject.SignalConnect(x.GoPointer(), "activate-cursor-row", cbRefPtr)
864+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-cursor-row", cbRefPtr)
865+ glib.SaveHandlerMapping(handlerID, cbPtr)
866+ return handlerID
863867 }
864868
865869 // Emitted when the user initiates a cursor movement.
@@ -873,10 +877,12 @@ func (x *ListBox) ConnectActivateCursorRow(cb *func(ListBox)) uint32 {
873877 // move by individual children
874878 // - &lt;kbd&gt;Home&lt;/kbd&gt;, &lt;kbd&gt;End&lt;/kbd&gt; move to the ends of the box
875879 // - &lt;kbd&gt;PgUp&lt;/kbd&gt;, &lt;kbd&gt;PgDn&lt;/kbd&gt; move vertically by pages
876-func (x *ListBox) ConnectMoveCursor(cb *func(ListBox, MovementStep, int, bool, bool)) uint32 {
880+func (x *ListBox) ConnectMoveCursor(cb *func(ListBox, MovementStep, int, bool, bool)) uint {
877881 cbPtr := uintptr(unsafe.Pointer(cb))
878882 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
879- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
883+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
884+ glib.SaveHandlerMapping(handlerID, cbPtr)
885+ return handlerID
880886 }
881887
882888 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendVarp bool, ModifyVarp bool) {
@@ -889,14 +895,18 @@ func (x *ListBox) ConnectMoveCursor(cb *func(ListBox, MovementStep, int, bool, b
889895 }
890896 cbRefPtr := purego.NewCallback(fcb)
891897 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
892- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
898+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
899+ glib.SaveHandlerMapping(handlerID, cbPtr)
900+ return handlerID
893901 }
894902
895903 // Emitted when a row has been activated by the user.
896-func (x *ListBox) ConnectRowActivated(cb *func(ListBox, uintptr)) uint32 {
904+func (x *ListBox) ConnectRowActivated(cb *func(ListBox, uintptr)) uint {
897905 cbPtr := uintptr(unsafe.Pointer(cb))
898906 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
899- return gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
907+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
908+ glib.SaveHandlerMapping(handlerID, cbPtr)
909+ return handlerID
900910 }
901911
902912 fcb := func(clsPtr uintptr, RowVarp uintptr) {
@@ -909,7 +919,9 @@ func (x *ListBox) ConnectRowActivated(cb *func(ListBox, uintptr)) uint32 {
909919 }
910920 cbRefPtr := purego.NewCallback(fcb)
911921 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
912- return gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
922+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
923+ glib.SaveHandlerMapping(handlerID, cbPtr)
924+ return handlerID
913925 }
914926
915927 // Emitted when a new row is selected, or (with a %NULL @row)
@@ -918,10 +930,12 @@ func (x *ListBox) ConnectRowActivated(cb *func(ListBox, uintptr)) uint32 {
918930 // When the @box is using %GTK_SELECTION_MULTIPLE, this signal will not
919931 // give you the full picture of selection changes, and you should use
920932 // the [signal@Gtk.ListBox::selected-rows-changed] signal instead.
921-func (x *ListBox) ConnectRowSelected(cb *func(ListBox, uintptr)) uint32 {
933+func (x *ListBox) ConnectRowSelected(cb *func(ListBox, uintptr)) uint {
922934 cbPtr := uintptr(unsafe.Pointer(cb))
923935 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
924- return gobject.SignalConnect(x.GoPointer(), "row-selected", cbRefPtr)
936+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-selected", cbRefPtr)
937+ glib.SaveHandlerMapping(handlerID, cbPtr)
938+ return handlerID
925939 }
926940
927941 fcb := func(clsPtr uintptr, RowVarp uintptr) {
@@ -934,7 +948,9 @@ func (x *ListBox) ConnectRowSelected(cb *func(ListBox, uintptr)) uint32 {
934948 }
935949 cbRefPtr := purego.NewCallback(fcb)
936950 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
937- return gobject.SignalConnect(x.GoPointer(), "row-selected", cbRefPtr)
951+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-selected", cbRefPtr)
952+ glib.SaveHandlerMapping(handlerID, cbPtr)
953+ return handlerID
938954 }
939955
940956 // Emitted to select all children of the box, if the selection
@@ -943,10 +959,12 @@ func (x *ListBox) ConnectRowSelected(cb *func(ListBox, uintptr)) uint32 {
943959 // This is a [keybinding signal](class.SignalAction.html).
944960 //
945961 // The default binding for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;a&lt;/kbd&gt;.
946-func (x *ListBox) ConnectSelectAll(cb *func(ListBox)) uint32 {
962+func (x *ListBox) ConnectSelectAll(cb *func(ListBox)) uint {
947963 cbPtr := uintptr(unsafe.Pointer(cb))
948964 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
949- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
965+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
966+ glib.SaveHandlerMapping(handlerID, cbPtr)
967+ return handlerID
950968 }
951969
952970 fcb := func(clsPtr uintptr) {
@@ -959,14 +977,18 @@ func (x *ListBox) ConnectSelectAll(cb *func(ListBox)) uint32 {
959977 }
960978 cbRefPtr := purego.NewCallback(fcb)
961979 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
962- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
980+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
981+ glib.SaveHandlerMapping(handlerID, cbPtr)
982+ return handlerID
963983 }
964984
965985 // Emitted when the set of selected rows changes.
966-func (x *ListBox) ConnectSelectedRowsChanged(cb *func(ListBox)) uint32 {
986+func (x *ListBox) ConnectSelectedRowsChanged(cb *func(ListBox)) uint {
967987 cbPtr := uintptr(unsafe.Pointer(cb))
968988 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
969- return gobject.SignalConnect(x.GoPointer(), "selected-rows-changed", cbRefPtr)
989+ handlerID := gobject.SignalConnect(x.GoPointer(), "selected-rows-changed", cbRefPtr)
990+ glib.SaveHandlerMapping(handlerID, cbPtr)
991+ return handlerID
970992 }
971993
972994 fcb := func(clsPtr uintptr) {
@@ -979,16 +1001,20 @@ func (x *ListBox) ConnectSelectedRowsChanged(cb *func(ListBox)) uint32 {
9791001 }
9801002 cbRefPtr := purego.NewCallback(fcb)
9811003 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
982- return gobject.SignalConnect(x.GoPointer(), "selected-rows-changed", cbRefPtr)
1004+ handlerID := gobject.SignalConnect(x.GoPointer(), "selected-rows-changed", cbRefPtr)
1005+ glib.SaveHandlerMapping(handlerID, cbPtr)
1006+ return handlerID
9831007 }
9841008
9851009 // Emitted when the cursor row is toggled.
9861010 //
9871011 // The default bindings for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;␣&lt;/kbd&gt;.
988-func (x *ListBox) ConnectToggleCursorRow(cb *func(ListBox)) uint32 {
1012+func (x *ListBox) ConnectToggleCursorRow(cb *func(ListBox)) uint {
9891013 cbPtr := uintptr(unsafe.Pointer(cb))
9901014 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
991- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
1015+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
1016+ glib.SaveHandlerMapping(handlerID, cbPtr)
1017+ return handlerID
9921018 }
9931019
9941020 fcb := func(clsPtr uintptr) {
@@ -1001,7 +1027,9 @@ func (x *ListBox) ConnectToggleCursorRow(cb *func(ListBox)) uint32 {
10011027 }
10021028 cbRefPtr := purego.NewCallback(fcb)
10031029 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1004- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
1030+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
1031+ glib.SaveHandlerMapping(handlerID, cbPtr)
1032+ return handlerID
10051033 }
10061034
10071035 // Emitted to unselect all children of the box, if the selection
@@ -1011,10 +1039,12 @@ func (x *ListBox) ConnectToggleCursorRow(cb *func(ListBox)) uint32 {
10111039 //
10121040 // The default binding for this signal is
10131041 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;-&lt;kbd&gt;Shift&lt;/kbd&gt;-&lt;kbd&gt;a&lt;/kbd&gt;.
1014-func (x *ListBox) ConnectUnselectAll(cb *func(ListBox)) uint32 {
1042+func (x *ListBox) ConnectUnselectAll(cb *func(ListBox)) uint {
10151043 cbPtr := uintptr(unsafe.Pointer(cb))
10161044 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1017- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1045+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1046+ glib.SaveHandlerMapping(handlerID, cbPtr)
1047+ return handlerID
10181048 }
10191049
10201050 fcb := func(clsPtr uintptr) {
@@ -1027,7 +1057,9 @@ func (x *ListBox) ConnectUnselectAll(cb *func(ListBox)) uint32 {
10271057 }
10281058 cbRefPtr := purego.NewCallback(fcb)
10291059 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1030- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1060+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
1061+ glib.SaveHandlerMapping(handlerID, cbPtr)
1062+ return handlerID
10311063 }
10321064
10331065 // Requests the user's screen reader to announce the given message.
@@ -1548,10 +1580,12 @@ func (x *ListBoxRow) GetPropertySelectable() bool {
15481580 // If you want to be notified when the user activates a row (by key or not),
15491581 // use the [signal@Gtk.ListBox::row-activated] signal on the row’s parent
15501582 // `GtkListBox`.
1551-func (x *ListBoxRow) ConnectActivate(cb *func(ListBoxRow)) uint32 {
1583+func (x *ListBoxRow) ConnectActivate(cb *func(ListBoxRow)) uint {
15521584 cbPtr := uintptr(unsafe.Pointer(cb))
15531585 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1554- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1586+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1587+ glib.SaveHandlerMapping(handlerID, cbPtr)
1588+ return handlerID
15551589 }
15561590
15571591 fcb := func(clsPtr uintptr) {
@@ -1564,7 +1598,9 @@ func (x *ListBoxRow) ConnectActivate(cb *func(ListBoxRow)) uint32 {
15641598 }
15651599 cbRefPtr := purego.NewCallback(fcb)
15661600 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1567- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1601+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
1602+ glib.SaveHandlerMapping(handlerID, cbPtr)
1603+ return handlerID
15681604 }
15691605
15701606 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtklistview.go +7 -3
@@ -425,10 +425,12 @@ func (x *ListView) GetPropertySingleClickActivate() bool {
425425 // This allows for a convenient way to handle activation in a listview.
426426 // See [method@Gtk.ListItem.set_activatable] for details on how to use
427427 // this signal.
428-func (x *ListView) ConnectActivate(cb *func(ListView, uint)) uint32 {
428+func (x *ListView) ConnectActivate(cb *func(ListView, uint)) uint {
429429 cbPtr := uintptr(unsafe.Pointer(cb))
430430 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
431- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
431+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
432+ glib.SaveHandlerMapping(handlerID, cbPtr)
433+ return handlerID
432434 }
433435
434436 fcb := func(clsPtr uintptr, PositionVarp uint) {
@@ -441,7 +443,9 @@ func (x *ListView) ConnectActivate(cb *func(ListView, uint)) uint32 {
441443 }
442444 cbRefPtr := purego.NewCallback(fcb)
443445 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
444- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
446+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
447+ glib.SaveHandlerMapping(handlerID, cbPtr)
448+ return handlerID
445449 }
446450
447451 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkmenubutton.go +7 -3
@@ -657,10 +657,12 @@ func (x *MenuButton) GetPropertyUseUnderline() bool {
657657 //
658658 // The `::activate` signal on `GtkMenuButton` is an action signal and
659659 // emitting it causes the button to pop up its menu.
660-func (x *MenuButton) ConnectActivate(cb *func(MenuButton)) uint32 {
660+func (x *MenuButton) ConnectActivate(cb *func(MenuButton)) uint {
661661 cbPtr := uintptr(unsafe.Pointer(cb))
662662 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
663- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
663+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
664+ glib.SaveHandlerMapping(handlerID, cbPtr)
665+ return handlerID
664666 }
665667
666668 fcb := func(clsPtr uintptr) {
@@ -673,7 +675,9 @@ func (x *MenuButton) ConnectActivate(cb *func(MenuButton)) uint32 {
673675 }
674676 cbRefPtr := purego.NewCallback(fcb)
675677 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
676- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
678+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
679+ glib.SaveHandlerMapping(handlerID, cbPtr)
680+ return handlerID
677681 }
678682
679683 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtknativedialog.go +7 -3
@@ -436,10 +436,12 @@ func (x *NativeDialog) GetPropertyVisible() bool {
436436 //
437437 // If you call [method@Gtk.NativeDialog.hide] before the user
438438 // responds to the dialog this signal will not be emitted.
439-func (x *NativeDialog) ConnectResponse(cb *func(NativeDialog, int)) uint32 {
439+func (x *NativeDialog) ConnectResponse(cb *func(NativeDialog, int)) uint {
440440 cbPtr := uintptr(unsafe.Pointer(cb))
441441 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
442- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
442+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
443+ glib.SaveHandlerMapping(handlerID, cbPtr)
444+ return handlerID
443445 }
444446
445447 fcb := func(clsPtr uintptr, ResponseIdVarp int) {
@@ -452,7 +454,9 @@ func (x *NativeDialog) ConnectResponse(cb *func(NativeDialog, int)) uint32 {
452454 }
453455 cbRefPtr := purego.NewCallback(fcb)
454456 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
455- return gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
457+ handlerID := gobject.SignalConnect(x.GoPointer(), "response", cbRefPtr)
458+ glib.SaveHandlerMapping(handlerID, cbPtr)
459+ return handlerID
456460 }
457461
458462 func init() {
M v4/gtk/gtknotebook.go +70 -30
@@ -872,10 +872,12 @@ func (x *Notebook) GetPropertyShowTabs() bool {
872872 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;PgUp&lt;/kbd&gt;,
873873 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;PgDn&lt;/kbd&gt;,
874874 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgUp&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgDn&lt;/kbd&gt;.
875-func (x *Notebook) ConnectChangeCurrentPage(cb *func(Notebook, int) bool) uint32 {
875+func (x *Notebook) ConnectChangeCurrentPage(cb *func(Notebook, int) bool) uint {
876876 cbPtr := uintptr(unsafe.Pointer(cb))
877877 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
878- return gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
878+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
879+ glib.SaveHandlerMapping(handlerID, cbPtr)
880+ return handlerID
879881 }
880882
881883 fcb := func(clsPtr uintptr, PageVarp int) bool {
@@ -888,7 +890,9 @@ func (x *Notebook) ConnectChangeCurrentPage(cb *func(Notebook, int) bool) uint32
888890 }
889891 cbRefPtr := purego.NewCallback(fcb)
890892 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
891- return gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
893+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
894+ glib.SaveHandlerMapping(handlerID, cbPtr)
895+ return handlerID
892896 }
893897
894898 // The ::create-window signal is emitted when a detachable
@@ -899,10 +903,12 @@ func (x *Notebook) ConnectChangeCurrentPage(cb *func(Notebook, int) bool) uint32
899903 // responsible for moving/resizing the window and adding the
900904 // necessary properties to the notebook (e.g. the
901905 // `GtkNotebook`:group-name ).
902-func (x *Notebook) ConnectCreateWindow(cb *func(Notebook, uintptr) Notebook) uint32 {
906+func (x *Notebook) ConnectCreateWindow(cb *func(Notebook, uintptr) Notebook) uint {
903907 cbPtr := uintptr(unsafe.Pointer(cb))
904908 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
905- return gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
909+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
910+ glib.SaveHandlerMapping(handlerID, cbPtr)
911+ return handlerID
906912 }
907913
908914 fcb := func(clsPtr uintptr, PageVarp uintptr) uintptr {
@@ -916,14 +922,18 @@ func (x *Notebook) ConnectCreateWindow(cb *func(Notebook, uintptr) Notebook) uin
916922 }
917923 cbRefPtr := purego.NewCallback(fcb)
918924 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
919- return gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
925+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-window", cbRefPtr)
926+ glib.SaveHandlerMapping(handlerID, cbPtr)
927+ return handlerID
920928 }
921929
922930 // Emitted when a tab should be focused.
923-func (x *Notebook) ConnectFocusTab(cb *func(Notebook, NotebookTab) bool) uint32 {
931+func (x *Notebook) ConnectFocusTab(cb *func(Notebook, NotebookTab) bool) uint {
924932 cbPtr := uintptr(unsafe.Pointer(cb))
925933 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
926- return gobject.SignalConnect(x.GoPointer(), "focus-tab", cbRefPtr)
934+ handlerID := gobject.SignalConnect(x.GoPointer(), "focus-tab", cbRefPtr)
935+ glib.SaveHandlerMapping(handlerID, cbPtr)
936+ return handlerID
927937 }
928938
929939 fcb := func(clsPtr uintptr, TabVarp NotebookTab) bool {
@@ -936,7 +946,9 @@ func (x *Notebook) ConnectFocusTab(cb *func(Notebook, NotebookTab) bool) uint32
936946 }
937947 cbRefPtr := purego.NewCallback(fcb)
938948 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
939- return gobject.SignalConnect(x.GoPointer(), "focus-tab", cbRefPtr)
949+ handlerID := gobject.SignalConnect(x.GoPointer(), "focus-tab", cbRefPtr)
950+ glib.SaveHandlerMapping(handlerID, cbPtr)
951+ return handlerID
940952 }
941953
942954 // Emitted when focus was moved out.
@@ -946,10 +958,12 @@ func (x *Notebook) ConnectFocusTab(cb *func(Notebook, NotebookTab) bool) uint32
946958 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt;,
947959 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;←&lt;/kbd&gt;, &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;→&lt;/kbd&gt;,
948960 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;↑&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;↓&lt;/kbd&gt;.
949-func (x *Notebook) ConnectMoveFocusOut(cb *func(Notebook, DirectionType)) uint32 {
961+func (x *Notebook) ConnectMoveFocusOut(cb *func(Notebook, DirectionType)) uint {
950962 cbPtr := uintptr(unsafe.Pointer(cb))
951963 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
952- return gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
964+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
965+ glib.SaveHandlerMapping(handlerID, cbPtr)
966+ return handlerID
953967 }
954968
955969 fcb := func(clsPtr uintptr, DirectionVarp DirectionType) {
@@ -962,15 +976,19 @@ func (x *Notebook) ConnectMoveFocusOut(cb *func(Notebook, DirectionType)) uint32
962976 }
963977 cbRefPtr := purego.NewCallback(fcb)
964978 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
965- return gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
979+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
980+ glib.SaveHandlerMapping(handlerID, cbPtr)
981+ return handlerID
966982 }
967983
968984 // the ::page-added signal is emitted in the notebook
969985 // right after a page is added to the notebook.
970-func (x *Notebook) ConnectPageAdded(cb *func(Notebook, uintptr, uint)) uint32 {
986+func (x *Notebook) ConnectPageAdded(cb *func(Notebook, uintptr, uint)) uint {
971987 cbPtr := uintptr(unsafe.Pointer(cb))
972988 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
973- return gobject.SignalConnect(x.GoPointer(), "page-added", cbRefPtr)
989+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-added", cbRefPtr)
990+ glib.SaveHandlerMapping(handlerID, cbPtr)
991+ return handlerID
974992 }
975993
976994 fcb := func(clsPtr uintptr, ChildVarp uintptr, PageNumVarp uint) {
@@ -983,15 +1001,19 @@ func (x *Notebook) ConnectPageAdded(cb *func(Notebook, uintptr, uint)) uint32 {
9831001 }
9841002 cbRefPtr := purego.NewCallback(fcb)
9851003 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
986- return gobject.SignalConnect(x.GoPointer(), "page-added", cbRefPtr)
1004+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-added", cbRefPtr)
1005+ glib.SaveHandlerMapping(handlerID, cbPtr)
1006+ return handlerID
9871007 }
9881008
9891009 // the ::page-removed signal is emitted in the notebook
9901010 // right after a page is removed from the notebook.
991-func (x *Notebook) ConnectPageRemoved(cb *func(Notebook, uintptr, uint)) uint32 {
1011+func (x *Notebook) ConnectPageRemoved(cb *func(Notebook, uintptr, uint)) uint {
9921012 cbPtr := uintptr(unsafe.Pointer(cb))
9931013 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
994- return gobject.SignalConnect(x.GoPointer(), "page-removed", cbRefPtr)
1014+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-removed", cbRefPtr)
1015+ glib.SaveHandlerMapping(handlerID, cbPtr)
1016+ return handlerID
9951017 }
9961018
9971019 fcb := func(clsPtr uintptr, ChildVarp uintptr, PageNumVarp uint) {
@@ -1004,15 +1026,19 @@ func (x *Notebook) ConnectPageRemoved(cb *func(Notebook, uintptr, uint)) uint32
10041026 }
10051027 cbRefPtr := purego.NewCallback(fcb)
10061028 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1007- return gobject.SignalConnect(x.GoPointer(), "page-removed", cbRefPtr)
1029+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-removed", cbRefPtr)
1030+ glib.SaveHandlerMapping(handlerID, cbPtr)
1031+ return handlerID
10081032 }
10091033
10101034 // the ::page-reordered signal is emitted in the notebook
10111035 // right after a page has been reordered.
1012-func (x *Notebook) ConnectPageReordered(cb *func(Notebook, uintptr, uint)) uint32 {
1036+func (x *Notebook) ConnectPageReordered(cb *func(Notebook, uintptr, uint)) uint {
10131037 cbPtr := uintptr(unsafe.Pointer(cb))
10141038 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1015- return gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1039+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1040+ glib.SaveHandlerMapping(handlerID, cbPtr)
1041+ return handlerID
10161042 }
10171043
10181044 fcb := func(clsPtr uintptr, ChildVarp uintptr, PageNumVarp uint) {
@@ -1025,7 +1051,9 @@ func (x *Notebook) ConnectPageReordered(cb *func(Notebook, uintptr, uint)) uint3
10251051 }
10261052 cbRefPtr := purego.NewCallback(fcb)
10271053 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1028- return gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1054+ handlerID := gobject.SignalConnect(x.GoPointer(), "page-reordered", cbRefPtr)
1055+ glib.SaveHandlerMapping(handlerID, cbPtr)
1056+ return handlerID
10291057 }
10301058
10311059 // Emitted when the tab should be reordered.
@@ -1035,10 +1063,12 @@ func (x *Notebook) ConnectPageReordered(cb *func(Notebook, uintptr, uint)) uint3
10351063 // &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;PgUp&lt;/kbd&gt;, &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;PgDn&lt;/kbd&gt;,
10361064 // &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;←&lt;/kbd&gt;, &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;→&lt;/kbd&gt;,
10371065 // &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;↑&lt;/kbd&gt; and &lt;kbd&gt;Alt&lt;/kbd&gt;+&lt;kbd&gt;↓&lt;/kbd&gt;.
1038-func (x *Notebook) ConnectReorderTab(cb *func(Notebook, DirectionType, bool) bool) uint32 {
1066+func (x *Notebook) ConnectReorderTab(cb *func(Notebook, DirectionType, bool) bool) uint {
10391067 cbPtr := uintptr(unsafe.Pointer(cb))
10401068 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1041- return gobject.SignalConnect(x.GoPointer(), "reorder-tab", cbRefPtr)
1069+ handlerID := gobject.SignalConnect(x.GoPointer(), "reorder-tab", cbRefPtr)
1070+ glib.SaveHandlerMapping(handlerID, cbPtr)
1071+ return handlerID
10421072 }
10431073
10441074 fcb := func(clsPtr uintptr, DirectionVarp DirectionType, MoveToLastVarp bool) bool {
@@ -1051,16 +1081,20 @@ func (x *Notebook) ConnectReorderTab(cb *func(Notebook, DirectionType, bool) boo
10511081 }
10521082 cbRefPtr := purego.NewCallback(fcb)
10531083 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1054- return gobject.SignalConnect(x.GoPointer(), "reorder-tab", cbRefPtr)
1084+ handlerID := gobject.SignalConnect(x.GoPointer(), "reorder-tab", cbRefPtr)
1085+ glib.SaveHandlerMapping(handlerID, cbPtr)
1086+ return handlerID
10551087 }
10561088
10571089 // Emitted when a page should be selected.
10581090 //
10591091 // The default binding for this signal is &lt;kbd&gt;␣&lt;/kbd&gt;.
1060-func (x *Notebook) ConnectSelectPage(cb *func(Notebook, bool) bool) uint32 {
1092+func (x *Notebook) ConnectSelectPage(cb *func(Notebook, bool) bool) uint {
10611093 cbPtr := uintptr(unsafe.Pointer(cb))
10621094 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1063- return gobject.SignalConnect(x.GoPointer(), "select-page", cbRefPtr)
1095+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-page", cbRefPtr)
1096+ glib.SaveHandlerMapping(handlerID, cbPtr)
1097+ return handlerID
10641098 }
10651099
10661100 fcb := func(clsPtr uintptr, MoveFocusVarp bool) bool {
@@ -1073,14 +1107,18 @@ func (x *Notebook) ConnectSelectPage(cb *func(Notebook, bool) bool) uint32 {
10731107 }
10741108 cbRefPtr := purego.NewCallback(fcb)
10751109 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1076- return gobject.SignalConnect(x.GoPointer(), "select-page", cbRefPtr)
1110+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-page", cbRefPtr)
1111+ glib.SaveHandlerMapping(handlerID, cbPtr)
1112+ return handlerID
10771113 }
10781114
10791115 // Emitted when the user or a function changes the current page.
1080-func (x *Notebook) ConnectSwitchPage(cb *func(Notebook, uintptr, uint)) uint32 {
1116+func (x *Notebook) ConnectSwitchPage(cb *func(Notebook, uintptr, uint)) uint {
10811117 cbPtr := uintptr(unsafe.Pointer(cb))
10821118 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1083- return gobject.SignalConnect(x.GoPointer(), "switch-page", cbRefPtr)
1119+ handlerID := gobject.SignalConnect(x.GoPointer(), "switch-page", cbRefPtr)
1120+ glib.SaveHandlerMapping(handlerID, cbPtr)
1121+ return handlerID
10841122 }
10851123
10861124 fcb := func(clsPtr uintptr, PageVarp uintptr, PageNumVarp uint) {
@@ -1093,7 +1131,9 @@ func (x *Notebook) ConnectSwitchPage(cb *func(Notebook, uintptr, uint)) uint32 {
10931131 }
10941132 cbRefPtr := purego.NewCallback(fcb)
10951133 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1096- return gobject.SignalConnect(x.GoPointer(), "switch-page", cbRefPtr)
1134+ handlerID := gobject.SignalConnect(x.GoPointer(), "switch-page", cbRefPtr)
1135+ glib.SaveHandlerMapping(handlerID, cbPtr)
1136+ return handlerID
10971137 }
10981138
10991139 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkoverlay.go +7 -3
@@ -199,10 +199,12 @@ func (c *Overlay) SetGoPointer(ptr uintptr) {
199199 // be full-width/height). If the main child is a
200200 // `GtkScrolledWindow`, the overlays are placed relative
201201 // to its contents.
202-func (x *Overlay) ConnectGetChildPosition(cb *func(Overlay, uintptr, *uintptr) bool) uint32 {
202+func (x *Overlay) ConnectGetChildPosition(cb *func(Overlay, uintptr, *uintptr) bool) uint {
203203 cbPtr := uintptr(unsafe.Pointer(cb))
204204 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
205- return gobject.SignalConnect(x.GoPointer(), "get-child-position", cbRefPtr)
205+ handlerID := gobject.SignalConnect(x.GoPointer(), "get-child-position", cbRefPtr)
206+ glib.SaveHandlerMapping(handlerID, cbPtr)
207+ return handlerID
206208 }
207209
208210 fcb := func(clsPtr uintptr, WidgetVarp uintptr, AllocationVarp *uintptr) bool {
@@ -215,7 +217,9 @@ func (x *Overlay) ConnectGetChildPosition(cb *func(Overlay, uintptr, *uintptr) b
215217 }
216218 cbRefPtr := purego.NewCallback(fcb)
217219 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
218- return gobject.SignalConnect(x.GoPointer(), "get-child-position", cbRefPtr)
220+ handlerID := gobject.SignalConnect(x.GoPointer(), "get-child-position", cbRefPtr)
221+ glib.SaveHandlerMapping(handlerID, cbPtr)
222+ return handlerID
219223 }
220224
221225 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkpaned.go +42 -18
@@ -472,10 +472,12 @@ func (x *Paned) GetPropertyWideHandle() bool {
472472 //
473473 // The default binding for this signal is &lt;kbd&gt;Return&lt;/kbd&gt; or
474474 // &lt;kbd&gt;Space&lt;/kbd&gt;.
475-func (x *Paned) ConnectAcceptPosition(cb *func(Paned) bool) uint32 {
475+func (x *Paned) ConnectAcceptPosition(cb *func(Paned) bool) uint {
476476 cbPtr := uintptr(unsafe.Pointer(cb))
477477 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
478- return gobject.SignalConnect(x.GoPointer(), "accept-position", cbRefPtr)
478+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept-position", cbRefPtr)
479+ glib.SaveHandlerMapping(handlerID, cbPtr)
480+ return handlerID
479481 }
480482
481483 fcb := func(clsPtr uintptr) bool {
@@ -488,7 +490,9 @@ func (x *Paned) ConnectAcceptPosition(cb *func(Paned) bool) uint32 {
488490 }
489491 cbRefPtr := purego.NewCallback(fcb)
490492 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
491- return gobject.SignalConnect(x.GoPointer(), "accept-position", cbRefPtr)
493+ handlerID := gobject.SignalConnect(x.GoPointer(), "accept-position", cbRefPtr)
494+ glib.SaveHandlerMapping(handlerID, cbPtr)
495+ return handlerID
492496 }
493497
494498 // Emitted to cancel moving the position of the handle using key
@@ -500,10 +504,12 @@ func (x *Paned) ConnectAcceptPosition(cb *func(Paned) bool) uint32 {
500504 // This is a [keybinding signal](class.SignalAction.html).
501505 //
502506 // The default binding for this signal is &lt;kbd&gt;Escape&lt;/kbd&gt;.
503-func (x *Paned) ConnectCancelPosition(cb *func(Paned) bool) uint32 {
507+func (x *Paned) ConnectCancelPosition(cb *func(Paned) bool) uint {
504508 cbPtr := uintptr(unsafe.Pointer(cb))
505509 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
506- return gobject.SignalConnect(x.GoPointer(), "cancel-position", cbRefPtr)
510+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel-position", cbRefPtr)
511+ glib.SaveHandlerMapping(handlerID, cbPtr)
512+ return handlerID
507513 }
508514
509515 fcb := func(clsPtr uintptr) bool {
@@ -516,7 +522,9 @@ func (x *Paned) ConnectCancelPosition(cb *func(Paned) bool) uint32 {
516522 }
517523 cbRefPtr := purego.NewCallback(fcb)
518524 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
519- return gobject.SignalConnect(x.GoPointer(), "cancel-position", cbRefPtr)
525+ handlerID := gobject.SignalConnect(x.GoPointer(), "cancel-position", cbRefPtr)
526+ glib.SaveHandlerMapping(handlerID, cbPtr)
527+ return handlerID
520528 }
521529
522530 // Emitted to cycle the focus between the children of the paned.
@@ -524,10 +532,12 @@ func (x *Paned) ConnectCancelPosition(cb *func(Paned) bool) uint32 {
524532 // This is a [keybinding signal](class.SignalAction.html).
525533 //
526534 // The default binding is &lt;kbd&gt;F6&lt;/kbd&gt;.
527-func (x *Paned) ConnectCycleChildFocus(cb *func(Paned, bool) bool) uint32 {
535+func (x *Paned) ConnectCycleChildFocus(cb *func(Paned, bool) bool) uint {
528536 cbPtr := uintptr(unsafe.Pointer(cb))
529537 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
530- return gobject.SignalConnect(x.GoPointer(), "cycle-child-focus", cbRefPtr)
538+ handlerID := gobject.SignalConnect(x.GoPointer(), "cycle-child-focus", cbRefPtr)
539+ glib.SaveHandlerMapping(handlerID, cbPtr)
540+ return handlerID
531541 }
532542
533543 fcb := func(clsPtr uintptr, ReversedVarp bool) bool {
@@ -540,7 +550,9 @@ func (x *Paned) ConnectCycleChildFocus(cb *func(Paned, bool) bool) uint32 {
540550 }
541551 cbRefPtr := purego.NewCallback(fcb)
542552 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
543- return gobject.SignalConnect(x.GoPointer(), "cycle-child-focus", cbRefPtr)
553+ handlerID := gobject.SignalConnect(x.GoPointer(), "cycle-child-focus", cbRefPtr)
554+ glib.SaveHandlerMapping(handlerID, cbPtr)
555+ return handlerID
544556 }
545557
546558 // Emitted to cycle whether the paned should grab focus to allow
@@ -549,10 +561,12 @@ func (x *Paned) ConnectCycleChildFocus(cb *func(Paned, bool) bool) uint32 {
549561 // This is a [keybinding signal](class.SignalAction.html).
550562 //
551563 // The default binding for this signal is &lt;kbd&gt;F8&lt;/kbd&gt;.
552-func (x *Paned) ConnectCycleHandleFocus(cb *func(Paned, bool) bool) uint32 {
564+func (x *Paned) ConnectCycleHandleFocus(cb *func(Paned, bool) bool) uint {
553565 cbPtr := uintptr(unsafe.Pointer(cb))
554566 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
555- return gobject.SignalConnect(x.GoPointer(), "cycle-handle-focus", cbRefPtr)
567+ handlerID := gobject.SignalConnect(x.GoPointer(), "cycle-handle-focus", cbRefPtr)
568+ glib.SaveHandlerMapping(handlerID, cbPtr)
569+ return handlerID
556570 }
557571
558572 fcb := func(clsPtr uintptr, ReversedVarp bool) bool {
@@ -565,7 +579,9 @@ func (x *Paned) ConnectCycleHandleFocus(cb *func(Paned, bool) bool) uint32 {
565579 }
566580 cbRefPtr := purego.NewCallback(fcb)
567581 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
568- return gobject.SignalConnect(x.GoPointer(), "cycle-handle-focus", cbRefPtr)
582+ handlerID := gobject.SignalConnect(x.GoPointer(), "cycle-handle-focus", cbRefPtr)
583+ glib.SaveHandlerMapping(handlerID, cbPtr)
584+ return handlerID
569585 }
570586
571587 // Emitted to move the handle with key bindings.
@@ -578,10 +594,12 @@ func (x *Paned) ConnectCycleHandleFocus(cb *func(Paned, bool) bool) uint32 {
578594 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;↑&lt;/kbd&gt;, &lt;kbd&gt;↑&lt;/kbd&gt;,
579595 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;↓&lt;/kbd&gt;, &lt;kbd&gt;↓&lt;/kbd&gt;,
580596 // &lt;kbd&gt;PgUp&lt;/kbd&gt;, &lt;kbd&gt;PgDn&lt;/kbd&gt;, &lt;kbd&gt;Home&lt;/kbd&gt;, &lt;kbd&gt;End&lt;/kbd&gt;.
581-func (x *Paned) ConnectMoveHandle(cb *func(Paned, ScrollType) bool) uint32 {
597+func (x *Paned) ConnectMoveHandle(cb *func(Paned, ScrollType) bool) uint {
582598 cbPtr := uintptr(unsafe.Pointer(cb))
583599 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
584- return gobject.SignalConnect(x.GoPointer(), "move-handle", cbRefPtr)
600+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-handle", cbRefPtr)
601+ glib.SaveHandlerMapping(handlerID, cbPtr)
602+ return handlerID
585603 }
586604
587605 fcb := func(clsPtr uintptr, ScrollTypeVarp ScrollType) bool {
@@ -594,7 +612,9 @@ func (x *Paned) ConnectMoveHandle(cb *func(Paned, ScrollType) bool) uint32 {
594612 }
595613 cbRefPtr := purego.NewCallback(fcb)
596614 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
597- return gobject.SignalConnect(x.GoPointer(), "move-handle", cbRefPtr)
615+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-handle", cbRefPtr)
616+ glib.SaveHandlerMapping(handlerID, cbPtr)
617+ return handlerID
598618 }
599619
600620 // Emitted to accept the current position of the handle and then
@@ -603,10 +623,12 @@ func (x *Paned) ConnectMoveHandle(cb *func(Paned, ScrollType) bool) uint32 {
603623 // This is a [keybinding signal](class.SignalAction.html).
604624 //
605625 // The default binding is &lt;kbd&gt;Tab&lt;/kbd&gt;.
606-func (x *Paned) ConnectToggleHandleFocus(cb *func(Paned) bool) uint32 {
626+func (x *Paned) ConnectToggleHandleFocus(cb *func(Paned) bool) uint {
607627 cbPtr := uintptr(unsafe.Pointer(cb))
608628 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
609- return gobject.SignalConnect(x.GoPointer(), "toggle-handle-focus", cbRefPtr)
629+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-handle-focus", cbRefPtr)
630+ glib.SaveHandlerMapping(handlerID, cbPtr)
631+ return handlerID
610632 }
611633
612634 fcb := func(clsPtr uintptr) bool {
@@ -619,7 +641,9 @@ func (x *Paned) ConnectToggleHandleFocus(cb *func(Paned) bool) uint32 {
619641 }
620642 cbRefPtr := purego.NewCallback(fcb)
621643 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
622- return gobject.SignalConnect(x.GoPointer(), "toggle-handle-focus", cbRefPtr)
644+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-handle-focus", cbRefPtr)
645+ glib.SaveHandlerMapping(handlerID, cbPtr)
646+ return handlerID
623647 }
624648
625649 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkpasswordentry.go +7 -3
@@ -210,10 +210,12 @@ func (x *PasswordEntry) GetPropertyShowPeekIcon() bool {
210210 // Emitted when the entry is activated.
211211 //
212212 // The keybindings for this signal are all forms of the Enter key.
213-func (x *PasswordEntry) ConnectActivate(cb *func(PasswordEntry)) uint32 {
213+func (x *PasswordEntry) ConnectActivate(cb *func(PasswordEntry)) uint {
214214 cbPtr := uintptr(unsafe.Pointer(cb))
215215 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
216- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
216+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
217+ glib.SaveHandlerMapping(handlerID, cbPtr)
218+ return handlerID
217219 }
218220
219221 fcb := func(clsPtr uintptr) {
@@ -226,7 +228,9 @@ func (x *PasswordEntry) ConnectActivate(cb *func(PasswordEntry)) uint32 {
226228 }
227229 cbRefPtr := purego.NewCallback(fcb)
228230 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
229- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
231+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
232+ glib.SaveHandlerMapping(handlerID, cbPtr)
233+ return handlerID
230234 }
231235
232236 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkpopover.go +14 -6
@@ -557,10 +557,12 @@ func (x *Popover) GetPropertyPointingTo() uintptr {
557557 // This is a [keybinding signal](class.SignalAction.html).
558558 //
559559 // The default binding for this signal is &lt;kbd&gt;Enter&lt;/kbd&gt;.
560-func (x *Popover) ConnectActivateDefault(cb *func(Popover)) uint32 {
560+func (x *Popover) ConnectActivateDefault(cb *func(Popover)) uint {
561561 cbPtr := uintptr(unsafe.Pointer(cb))
562562 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
563- return gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
563+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
564+ glib.SaveHandlerMapping(handlerID, cbPtr)
565+ return handlerID
564566 }
565567
566568 fcb := func(clsPtr uintptr) {
@@ -573,14 +575,18 @@ func (x *Popover) ConnectActivateDefault(cb *func(Popover)) uint32 {
573575 }
574576 cbRefPtr := purego.NewCallback(fcb)
575577 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
576- return gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
578+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
579+ glib.SaveHandlerMapping(handlerID, cbPtr)
580+ return handlerID
577581 }
578582
579583 // Emitted when the popover is closed.
580-func (x *Popover) ConnectClosed(cb *func(Popover)) uint32 {
584+func (x *Popover) ConnectClosed(cb *func(Popover)) uint {
581585 cbPtr := uintptr(unsafe.Pointer(cb))
582586 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
583- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
587+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
588+ glib.SaveHandlerMapping(handlerID, cbPtr)
589+ return handlerID
584590 }
585591
586592 fcb := func(clsPtr uintptr) {
@@ -593,7 +599,9 @@ func (x *Popover) ConnectClosed(cb *func(Popover)) uint32 {
593599 }
594600 cbRefPtr := purego.NewCallback(fcb)
595601 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
596- return gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
602+ handlerID := gobject.SignalConnect(x.GoPointer(), "closed", cbRefPtr)
603+ glib.SaveHandlerMapping(handlerID, cbPtr)
604+ return handlerID
597605 }
598606
599607 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkprinter.go +7 -3
@@ -549,10 +549,12 @@ func (x *Printer) GetPropertyStateMessage() string {
549549 //
550550 // The @success parameter indicates if the information was
551551 // actually obtained.
552-func (x *Printer) ConnectDetailsAcquired(cb *func(Printer, bool)) uint32 {
552+func (x *Printer) ConnectDetailsAcquired(cb *func(Printer, bool)) uint {
553553 cbPtr := uintptr(unsafe.Pointer(cb))
554554 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
555- return gobject.SignalConnect(x.GoPointer(), "details-acquired", cbRefPtr)
555+ handlerID := gobject.SignalConnect(x.GoPointer(), "details-acquired", cbRefPtr)
556+ glib.SaveHandlerMapping(handlerID, cbPtr)
557+ return handlerID
556558 }
557559
558560 fcb := func(clsPtr uintptr, SuccessVarp bool) {
@@ -565,7 +567,9 @@ func (x *Printer) ConnectDetailsAcquired(cb *func(Printer, bool)) uint32 {
565567 }
566568 cbRefPtr := purego.NewCallback(fcb)
567569 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
568- return gobject.SignalConnect(x.GoPointer(), "details-acquired", cbRefPtr)
570+ handlerID := gobject.SignalConnect(x.GoPointer(), "details-acquired", cbRefPtr)
571+ glib.SaveHandlerMapping(handlerID, cbPtr)
572+ return handlerID
569573 }
570574
571575 func init() {
M v4/gtk/gtkprintjob.go +7 -3
@@ -485,10 +485,12 @@ func (x *PrintJob) GetPropertyTrackPrintStatus() bool {
485485 //
486486 // The signal handler can use [method@Gtk.PrintJob.get_status]
487487 // to obtain the new status.
488-func (x *PrintJob) ConnectStatusChanged(cb *func(PrintJob)) uint32 {
488+func (x *PrintJob) ConnectStatusChanged(cb *func(PrintJob)) uint {
489489 cbPtr := uintptr(unsafe.Pointer(cb))
490490 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
491- return gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
491+ handlerID := gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
492+ glib.SaveHandlerMapping(handlerID, cbPtr)
493+ return handlerID
492494 }
493495
494496 fcb := func(clsPtr uintptr) {
@@ -501,7 +503,9 @@ func (x *PrintJob) ConnectStatusChanged(cb *func(PrintJob)) uint32 {
501503 }
502504 cbRefPtr := purego.NewCallback(fcb)
503505 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
504- return gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
506+ handlerID := gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
507+ glib.SaveHandlerMapping(handlerID, cbPtr)
508+ return handlerID
505509 }
506510
507511 func init() {
M v4/gtk/gtkprintoperation.go +77 -33
@@ -1501,10 +1501,12 @@ func (x *PrintOperation) GetPropertyUseFullPage() bool {
15011501 // [class@Gtk.PrintContext] and paginate the document accordingly,
15021502 // and then set the number of pages with
15031503 // [method@Gtk.PrintOperation.set_n_pages].
1504-func (x *PrintOperation) ConnectBeginPrint(cb *func(PrintOperation, uintptr)) uint32 {
1504+func (x *PrintOperation) ConnectBeginPrint(cb *func(PrintOperation, uintptr)) uint {
15051505 cbPtr := uintptr(unsafe.Pointer(cb))
15061506 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1507- return gobject.SignalConnect(x.GoPointer(), "begin-print", cbRefPtr)
1507+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-print", cbRefPtr)
1508+ glib.SaveHandlerMapping(handlerID, cbPtr)
1509+ return handlerID
15081510 }
15091511
15101512 fcb := func(clsPtr uintptr, ContextVarp uintptr) {
@@ -1517,7 +1519,9 @@ func (x *PrintOperation) ConnectBeginPrint(cb *func(PrintOperation, uintptr)) ui
15171519 }
15181520 cbRefPtr := purego.NewCallback(fcb)
15191521 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1520- return gobject.SignalConnect(x.GoPointer(), "begin-print", cbRefPtr)
1522+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-print", cbRefPtr)
1523+ glib.SaveHandlerMapping(handlerID, cbPtr)
1524+ return handlerID
15211525 }
15221526
15231527 // Emitted when displaying the print dialog.
@@ -1531,10 +1535,12 @@ func (x *PrintOperation) ConnectBeginPrint(cb *func(PrintOperation, uintptr)) ui
15311535 // to stay around until the [signal@Gtk.PrintOperation::custom-widget-apply]
15321536 // signal is emitted on the operation. Then you can read out any
15331537 // information you need from the widgets.
1534-func (x *PrintOperation) ConnectCreateCustomWidget(cb *func(PrintOperation) gobject.Object) uint32 {
1538+func (x *PrintOperation) ConnectCreateCustomWidget(cb *func(PrintOperation) gobject.Object) uint {
15351539 cbPtr := uintptr(unsafe.Pointer(cb))
15361540 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1537- return gobject.SignalConnect(x.GoPointer(), "create-custom-widget", cbRefPtr)
1541+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-custom-widget", cbRefPtr)
1542+ glib.SaveHandlerMapping(handlerID, cbPtr)
1543+ return handlerID
15381544 }
15391545
15401546 fcb := func(clsPtr uintptr) uintptr {
@@ -1548,7 +1554,9 @@ func (x *PrintOperation) ConnectCreateCustomWidget(cb *func(PrintOperation) gobj
15481554 }
15491555 cbRefPtr := purego.NewCallback(fcb)
15501556 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1551- return gobject.SignalConnect(x.GoPointer(), "create-custom-widget", cbRefPtr)
1557+ handlerID := gobject.SignalConnect(x.GoPointer(), "create-custom-widget", cbRefPtr)
1558+ glib.SaveHandlerMapping(handlerID, cbPtr)
1559+ return handlerID
15521560 }
15531561
15541562 // Emitted right before ::begin-print if you added
@@ -1557,10 +1565,12 @@ func (x *PrintOperation) ConnectCreateCustomWidget(cb *func(PrintOperation) gobj
15571565 // When you get this signal you should read the information from the
15581566 // custom widgets, as the widgets are not guaranteed to be around at a
15591567 // later time.
1560-func (x *PrintOperation) ConnectCustomWidgetApply(cb *func(PrintOperation, uintptr)) uint32 {
1568+func (x *PrintOperation) ConnectCustomWidgetApply(cb *func(PrintOperation, uintptr)) uint {
15611569 cbPtr := uintptr(unsafe.Pointer(cb))
15621570 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1563- return gobject.SignalConnect(x.GoPointer(), "custom-widget-apply", cbRefPtr)
1571+ handlerID := gobject.SignalConnect(x.GoPointer(), "custom-widget-apply", cbRefPtr)
1572+ glib.SaveHandlerMapping(handlerID, cbPtr)
1573+ return handlerID
15641574 }
15651575
15661576 fcb := func(clsPtr uintptr, WidgetVarp uintptr) {
@@ -1573,7 +1583,9 @@ func (x *PrintOperation) ConnectCustomWidgetApply(cb *func(PrintOperation, uintp
15731583 }
15741584 cbRefPtr := purego.NewCallback(fcb)
15751585 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1576- return gobject.SignalConnect(x.GoPointer(), "custom-widget-apply", cbRefPtr)
1586+ handlerID := gobject.SignalConnect(x.GoPointer(), "custom-widget-apply", cbRefPtr)
1587+ glib.SaveHandlerMapping(handlerID, cbPtr)
1588+ return handlerID
15771589 }
15781590
15791591 // Emitted when the print operation run has finished doing
@@ -1586,10 +1598,12 @@ func (x *PrintOperation) ConnectCustomWidgetApply(cb *func(PrintOperation, uintp
15861598 // If you enabled print status tracking then
15871599 // [method@Gtk.PrintOperation.is_finished] may still return %FALSE
15881600 // after the ::done signal was emitted.
1589-func (x *PrintOperation) ConnectDone(cb *func(PrintOperation, PrintOperationResult)) uint32 {
1601+func (x *PrintOperation) ConnectDone(cb *func(PrintOperation, PrintOperationResult)) uint {
15901602 cbPtr := uintptr(unsafe.Pointer(cb))
15911603 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1592- return gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
1604+ handlerID := gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
1605+ glib.SaveHandlerMapping(handlerID, cbPtr)
1606+ return handlerID
15931607 }
15941608
15951609 fcb := func(clsPtr uintptr, ResultVarp PrintOperationResult) {
@@ -1602,7 +1616,9 @@ func (x *PrintOperation) ConnectDone(cb *func(PrintOperation, PrintOperationResu
16021616 }
16031617 cbRefPtr := purego.NewCallback(fcb)
16041618 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1605- return gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
1619+ handlerID := gobject.SignalConnect(x.GoPointer(), "done", cbRefPtr)
1620+ glib.SaveHandlerMapping(handlerID, cbPtr)
1621+ return handlerID
16061622 }
16071623
16081624 // Emitted for every page that is printed.
@@ -1659,10 +1675,12 @@ func (x *PrintOperation) ConnectDone(cb *func(PrintOperation, PrintOperationResu
16591675 // [method@Gtk.PrintOperation.set_unit] before starting the print
16601676 // operation to set up the transformation of the cairo context
16611677 // according to your needs.
1662-func (x *PrintOperation) ConnectDrawPage(cb *func(PrintOperation, uintptr, int)) uint32 {
1678+func (x *PrintOperation) ConnectDrawPage(cb *func(PrintOperation, uintptr, int)) uint {
16631679 cbPtr := uintptr(unsafe.Pointer(cb))
16641680 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1665- return gobject.SignalConnect(x.GoPointer(), "draw-page", cbRefPtr)
1681+ handlerID := gobject.SignalConnect(x.GoPointer(), "draw-page", cbRefPtr)
1682+ glib.SaveHandlerMapping(handlerID, cbPtr)
1683+ return handlerID
16661684 }
16671685
16681686 fcb := func(clsPtr uintptr, ContextVarp uintptr, PageNrVarp int) {
@@ -1675,17 +1693,21 @@ func (x *PrintOperation) ConnectDrawPage(cb *func(PrintOperation, uintptr, int))
16751693 }
16761694 cbRefPtr := purego.NewCallback(fcb)
16771695 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1678- return gobject.SignalConnect(x.GoPointer(), "draw-page", cbRefPtr)
1696+ handlerID := gobject.SignalConnect(x.GoPointer(), "draw-page", cbRefPtr)
1697+ glib.SaveHandlerMapping(handlerID, cbPtr)
1698+ return handlerID
16791699 }
16801700
16811701 // Emitted after all pages have been rendered.
16821702 //
16831703 // A handler for this signal can clean up any resources that have
16841704 // been allocated in the [signal@Gtk.PrintOperation::begin-print] handler.
1685-func (x *PrintOperation) ConnectEndPrint(cb *func(PrintOperation, uintptr)) uint32 {
1705+func (x *PrintOperation) ConnectEndPrint(cb *func(PrintOperation, uintptr)) uint {
16861706 cbPtr := uintptr(unsafe.Pointer(cb))
16871707 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1688- return gobject.SignalConnect(x.GoPointer(), "end-print", cbRefPtr)
1708+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-print", cbRefPtr)
1709+ glib.SaveHandlerMapping(handlerID, cbPtr)
1710+ return handlerID
16891711 }
16901712
16911713 fcb := func(clsPtr uintptr, ContextVarp uintptr) {
@@ -1698,7 +1720,9 @@ func (x *PrintOperation) ConnectEndPrint(cb *func(PrintOperation, uintptr)) uint
16981720 }
16991721 cbRefPtr := purego.NewCallback(fcb)
17001722 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1701- return gobject.SignalConnect(x.GoPointer(), "end-print", cbRefPtr)
1723+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-print", cbRefPtr)
1724+ glib.SaveHandlerMapping(handlerID, cbPtr)
1725+ return handlerID
17021726 }
17031727
17041728 // Emitted after the ::begin-print signal, but before the actual rendering
@@ -1715,10 +1739,12 @@ func (x *PrintOperation) ConnectEndPrint(cb *func(PrintOperation, uintptr)) uint
17151739 // If you don't need to do pagination in chunks, you can simply do
17161740 // it all in the ::begin-print handler, and set the number of pages
17171741 // from there.
1718-func (x *PrintOperation) ConnectPaginate(cb *func(PrintOperation, uintptr) bool) uint32 {
1742+func (x *PrintOperation) ConnectPaginate(cb *func(PrintOperation, uintptr) bool) uint {
17191743 cbPtr := uintptr(unsafe.Pointer(cb))
17201744 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1721- return gobject.SignalConnect(x.GoPointer(), "paginate", cbRefPtr)
1745+ handlerID := gobject.SignalConnect(x.GoPointer(), "paginate", cbRefPtr)
1746+ glib.SaveHandlerMapping(handlerID, cbPtr)
1747+ return handlerID
17221748 }
17231749
17241750 fcb := func(clsPtr uintptr, ContextVarp uintptr) bool {
@@ -1731,7 +1757,9 @@ func (x *PrintOperation) ConnectPaginate(cb *func(PrintOperation, uintptr) bool)
17311757 }
17321758 cbRefPtr := purego.NewCallback(fcb)
17331759 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1734- return gobject.SignalConnect(x.GoPointer(), "paginate", cbRefPtr)
1760+ handlerID := gobject.SignalConnect(x.GoPointer(), "paginate", cbRefPtr)
1761+ glib.SaveHandlerMapping(handlerID, cbPtr)
1762+ return handlerID
17351763 }
17361764
17371765 // Gets emitted when a preview is requested from the native dialog.
@@ -1751,10 +1779,12 @@ func (x *PrintOperation) ConnectPaginate(cb *func(PrintOperation, uintptr) bool)
17511779 // are selected for print and render them. The preview must be
17521780 // finished by calling [method@Gtk.PrintOperationPreview.end_preview]
17531781 // (typically in response to the user clicking a close button).
1754-func (x *PrintOperation) ConnectPreview(cb *func(PrintOperation, uintptr, uintptr, uintptr) bool) uint32 {
1782+func (x *PrintOperation) ConnectPreview(cb *func(PrintOperation, uintptr, uintptr, uintptr) bool) uint {
17551783 cbPtr := uintptr(unsafe.Pointer(cb))
17561784 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1757- return gobject.SignalConnect(x.GoPointer(), "preview", cbRefPtr)
1785+ handlerID := gobject.SignalConnect(x.GoPointer(), "preview", cbRefPtr)
1786+ glib.SaveHandlerMapping(handlerID, cbPtr)
1787+ return handlerID
17581788 }
17591789
17601790 fcb := func(clsPtr uintptr, PreviewVarp uintptr, ContextVarp uintptr, ParentVarp uintptr) bool {
@@ -1767,7 +1797,9 @@ func (x *PrintOperation) ConnectPreview(cb *func(PrintOperation, uintptr, uintpt
17671797 }
17681798 cbRefPtr := purego.NewCallback(fcb)
17691799 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1770- return gobject.SignalConnect(x.GoPointer(), "preview", cbRefPtr)
1800+ handlerID := gobject.SignalConnect(x.GoPointer(), "preview", cbRefPtr)
1801+ glib.SaveHandlerMapping(handlerID, cbPtr)
1802+ return handlerID
17711803 }
17721804
17731805 // Emitted once for every page that is printed.
@@ -1775,10 +1807,12 @@ func (x *PrintOperation) ConnectPreview(cb *func(PrintOperation, uintptr, uintpt
17751807 // This gives the application a chance to modify the page setup.
17761808 // Any changes done to @setup will be in force only for printing
17771809 // this page.
1778-func (x *PrintOperation) ConnectRequestPageSetup(cb *func(PrintOperation, uintptr, int, uintptr)) uint32 {
1810+func (x *PrintOperation) ConnectRequestPageSetup(cb *func(PrintOperation, uintptr, int, uintptr)) uint {
17791811 cbPtr := uintptr(unsafe.Pointer(cb))
17801812 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1781- return gobject.SignalConnect(x.GoPointer(), "request-page-setup", cbRefPtr)
1813+ handlerID := gobject.SignalConnect(x.GoPointer(), "request-page-setup", cbRefPtr)
1814+ glib.SaveHandlerMapping(handlerID, cbPtr)
1815+ return handlerID
17821816 }
17831817
17841818 fcb := func(clsPtr uintptr, ContextVarp uintptr, PageNrVarp int, SetupVarp uintptr) {
@@ -1791,7 +1825,9 @@ func (x *PrintOperation) ConnectRequestPageSetup(cb *func(PrintOperation, uintpt
17911825 }
17921826 cbRefPtr := purego.NewCallback(fcb)
17931827 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1794- return gobject.SignalConnect(x.GoPointer(), "request-page-setup", cbRefPtr)
1828+ handlerID := gobject.SignalConnect(x.GoPointer(), "request-page-setup", cbRefPtr)
1829+ glib.SaveHandlerMapping(handlerID, cbPtr)
1830+ return handlerID
17951831 }
17961832
17971833 // Emitted at between the various phases of the print operation.
@@ -1799,10 +1835,12 @@ func (x *PrintOperation) ConnectRequestPageSetup(cb *func(PrintOperation, uintpt
17991835 // See [enum@Gtk.PrintStatus] for the phases that are being discriminated.
18001836 // Use [method@Gtk.PrintOperation.get_status] to find out the current
18011837 // status.
1802-func (x *PrintOperation) ConnectStatusChanged(cb *func(PrintOperation)) uint32 {
1838+func (x *PrintOperation) ConnectStatusChanged(cb *func(PrintOperation)) uint {
18031839 cbPtr := uintptr(unsafe.Pointer(cb))
18041840 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1805- return gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
1841+ handlerID := gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
1842+ glib.SaveHandlerMapping(handlerID, cbPtr)
1843+ return handlerID
18061844 }
18071845
18081846 fcb := func(clsPtr uintptr) {
@@ -1815,17 +1853,21 @@ func (x *PrintOperation) ConnectStatusChanged(cb *func(PrintOperation)) uint32 {
18151853 }
18161854 cbRefPtr := purego.NewCallback(fcb)
18171855 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1818- return gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
1856+ handlerID := gobject.SignalConnect(x.GoPointer(), "status-changed", cbRefPtr)
1857+ glib.SaveHandlerMapping(handlerID, cbPtr)
1858+ return handlerID
18191859 }
18201860
18211861 // Emitted after change of selected printer.
18221862 //
18231863 // The actual page setup and print settings are passed to the custom
18241864 // widget, which can actualize itself according to this change.
1825-func (x *PrintOperation) ConnectUpdateCustomWidget(cb *func(PrintOperation, uintptr, uintptr, uintptr)) uint32 {
1865+func (x *PrintOperation) ConnectUpdateCustomWidget(cb *func(PrintOperation, uintptr, uintptr, uintptr)) uint {
18261866 cbPtr := uintptr(unsafe.Pointer(cb))
18271867 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1828- return gobject.SignalConnect(x.GoPointer(), "update-custom-widget", cbRefPtr)
1868+ handlerID := gobject.SignalConnect(x.GoPointer(), "update-custom-widget", cbRefPtr)
1869+ glib.SaveHandlerMapping(handlerID, cbPtr)
1870+ return handlerID
18291871 }
18301872
18311873 fcb := func(clsPtr uintptr, WidgetVarp uintptr, SetupVarp uintptr, SettingsVarp uintptr) {
@@ -1838,7 +1880,9 @@ func (x *PrintOperation) ConnectUpdateCustomWidget(cb *func(PrintOperation, uint
18381880 }
18391881 cbRefPtr := purego.NewCallback(fcb)
18401882 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1841- return gobject.SignalConnect(x.GoPointer(), "update-custom-widget", cbRefPtr)
1883+ handlerID := gobject.SignalConnect(x.GoPointer(), "update-custom-widget", cbRefPtr)
1884+ glib.SaveHandlerMapping(handlerID, cbPtr)
1885+ return handlerID
18421886 }
18431887
18441888 // Ends a preview.
M v4/gtk/gtkrange.go +28 -12
@@ -575,10 +575,12 @@ func (x *Range) GetPropertyShowFillLevel() bool {
575575
576576 // Emitted before clamping a value, to give the application a
577577 // chance to adjust the bounds.
578-func (x *Range) ConnectAdjustBounds(cb *func(Range, float64)) uint32 {
578+func (x *Range) ConnectAdjustBounds(cb *func(Range, float64)) uint {
579579 cbPtr := uintptr(unsafe.Pointer(cb))
580580 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
581- return gobject.SignalConnect(x.GoPointer(), "adjust-bounds", cbRefPtr)
581+ handlerID := gobject.SignalConnect(x.GoPointer(), "adjust-bounds", cbRefPtr)
582+ glib.SaveHandlerMapping(handlerID, cbPtr)
583+ return handlerID
582584 }
583585
584586 fcb := func(clsPtr uintptr, ValueVarp float64) {
@@ -591,7 +593,9 @@ func (x *Range) ConnectAdjustBounds(cb *func(Range, float64)) uint32 {
591593 }
592594 cbRefPtr := purego.NewCallback(fcb)
593595 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
594- return gobject.SignalConnect(x.GoPointer(), "adjust-bounds", cbRefPtr)
596+ handlerID := gobject.SignalConnect(x.GoPointer(), "adjust-bounds", cbRefPtr)
597+ glib.SaveHandlerMapping(handlerID, cbPtr)
598+ return handlerID
595599 }
596600
597601 // Emitted when a scroll action is performed on a range.
@@ -606,10 +610,12 @@ func (x *Range) ConnectAdjustBounds(cb *func(Range, float64)) uint32 {
606610 // the ::change-value signal is responsible for clamping the value
607611 // to the desired number of decimal digits; the default GTK
608612 // handler clamps the value based on [property@Gtk.Range:round-digits].
609-func (x *Range) ConnectChangeValue(cb *func(Range, ScrollType, float64) bool) uint32 {
613+func (x *Range) ConnectChangeValue(cb *func(Range, ScrollType, float64) bool) uint {
610614 cbPtr := uintptr(unsafe.Pointer(cb))
611615 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
612- return gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
616+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
617+ glib.SaveHandlerMapping(handlerID, cbPtr)
618+ return handlerID
613619 }
614620
615621 fcb := func(clsPtr uintptr, ScrollVarp ScrollType, ValueVarp float64) bool {
@@ -622,16 +628,20 @@ func (x *Range) ConnectChangeValue(cb *func(Range, ScrollType, float64) bool) ui
622628 }
623629 cbRefPtr := purego.NewCallback(fcb)
624630 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
625- return gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
631+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
632+ glib.SaveHandlerMapping(handlerID, cbPtr)
633+ return handlerID
626634 }
627635
628636 // Virtual function that moves the slider.
629637 //
630638 // Used for keybindings.
631-func (x *Range) ConnectMoveSlider(cb *func(Range, ScrollType)) uint32 {
639+func (x *Range) ConnectMoveSlider(cb *func(Range, ScrollType)) uint {
632640 cbPtr := uintptr(unsafe.Pointer(cb))
633641 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
634- return gobject.SignalConnect(x.GoPointer(), "move-slider", cbRefPtr)
642+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-slider", cbRefPtr)
643+ glib.SaveHandlerMapping(handlerID, cbPtr)
644+ return handlerID
635645 }
636646
637647 fcb := func(clsPtr uintptr, StepVarp ScrollType) {
@@ -644,14 +654,18 @@ func (x *Range) ConnectMoveSlider(cb *func(Range, ScrollType)) uint32 {
644654 }
645655 cbRefPtr := purego.NewCallback(fcb)
646656 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
647- return gobject.SignalConnect(x.GoPointer(), "move-slider", cbRefPtr)
657+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-slider", cbRefPtr)
658+ glib.SaveHandlerMapping(handlerID, cbPtr)
659+ return handlerID
648660 }
649661
650662 // Emitted when the range value changes.
651-func (x *Range) ConnectValueChanged(cb *func(Range)) uint32 {
663+func (x *Range) ConnectValueChanged(cb *func(Range)) uint {
652664 cbPtr := uintptr(unsafe.Pointer(cb))
653665 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
654- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
666+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
667+ glib.SaveHandlerMapping(handlerID, cbPtr)
668+ return handlerID
655669 }
656670
657671 fcb := func(clsPtr uintptr) {
@@ -664,7 +678,9 @@ func (x *Range) ConnectValueChanged(cb *func(Range)) uint32 {
664678 }
665679 cbRefPtr := purego.NewCallback(fcb)
666680 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
667- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
681+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
682+ glib.SaveHandlerMapping(handlerID, cbPtr)
683+ return handlerID
668684 }
669685
670686 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkrecentmanager.go +7 -3
@@ -818,10 +818,12 @@ func (x *RecentManager) GetPropertySize() int {
818818 //
819819 // This can happen either by calling [method@Gtk.RecentManager.add_item]
820820 // or by another application.
821-func (x *RecentManager) ConnectChanged(cb *func(RecentManager)) uint32 {
821+func (x *RecentManager) ConnectChanged(cb *func(RecentManager)) uint {
822822 cbPtr := uintptr(unsafe.Pointer(cb))
823823 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
824- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
824+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
825+ glib.SaveHandlerMapping(handlerID, cbPtr)
826+ return handlerID
825827 }
826828
827829 fcb := func(clsPtr uintptr) {
@@ -834,7 +836,9 @@ func (x *RecentManager) ConnectChanged(cb *func(RecentManager)) uint32 {
834836 }
835837 cbRefPtr := purego.NewCallback(fcb)
836838 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
837- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
839+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
840+ glib.SaveHandlerMapping(handlerID, cbPtr)
841+ return handlerID
838842 }
839843
840844 var xRecentManagerGetDefault func() uintptr
M v4/gtk/gtkscalebutton.go +21 -9
@@ -362,10 +362,12 @@ func (x *ScaleButton) GetPropertyValue() float64 {
362362 // This is a [keybinding signal](class.SignalAction.html).
363363 //
364364 // The default binding for this signal is &lt;kbd&gt;Escape&lt;/kbd&gt;.
365-func (x *ScaleButton) ConnectPopdown(cb *func(ScaleButton)) uint32 {
365+func (x *ScaleButton) ConnectPopdown(cb *func(ScaleButton)) uint {
366366 cbPtr := uintptr(unsafe.Pointer(cb))
367367 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
368- return gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
368+ handlerID := gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
369+ glib.SaveHandlerMapping(handlerID, cbPtr)
370+ return handlerID
369371 }
370372
371373 fcb := func(clsPtr uintptr) {
@@ -378,7 +380,9 @@ func (x *ScaleButton) ConnectPopdown(cb *func(ScaleButton)) uint32 {
378380 }
379381 cbRefPtr := purego.NewCallback(fcb)
380382 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
381- return gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
383+ handlerID := gobject.SignalConnect(x.GoPointer(), "popdown", cbRefPtr)
384+ glib.SaveHandlerMapping(handlerID, cbPtr)
385+ return handlerID
382386 }
383387
384388 // Emitted to popup the scale widget.
@@ -387,10 +391,12 @@ func (x *ScaleButton) ConnectPopdown(cb *func(ScaleButton)) uint32 {
387391 //
388392 // The default bindings for this signal are &lt;kbd&gt;Space&lt;/kbd&gt;,
389393 // &lt;kbd&gt;Enter&lt;/kbd&gt; and &lt;kbd&gt;Return&lt;/kbd&gt;.
390-func (x *ScaleButton) ConnectPopup(cb *func(ScaleButton)) uint32 {
394+func (x *ScaleButton) ConnectPopup(cb *func(ScaleButton)) uint {
391395 cbPtr := uintptr(unsafe.Pointer(cb))
392396 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
393- return gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
397+ handlerID := gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
398+ glib.SaveHandlerMapping(handlerID, cbPtr)
399+ return handlerID
394400 }
395401
396402 fcb := func(clsPtr uintptr) {
@@ -403,14 +409,18 @@ func (x *ScaleButton) ConnectPopup(cb *func(ScaleButton)) uint32 {
403409 }
404410 cbRefPtr := purego.NewCallback(fcb)
405411 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
406- return gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
412+ handlerID := gobject.SignalConnect(x.GoPointer(), "popup", cbRefPtr)
413+ glib.SaveHandlerMapping(handlerID, cbPtr)
414+ return handlerID
407415 }
408416
409417 // Emitted when the value field has changed.
410-func (x *ScaleButton) ConnectValueChanged(cb *func(ScaleButton, float64)) uint32 {
418+func (x *ScaleButton) ConnectValueChanged(cb *func(ScaleButton, float64)) uint {
411419 cbPtr := uintptr(unsafe.Pointer(cb))
412420 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
413- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
421+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
422+ glib.SaveHandlerMapping(handlerID, cbPtr)
423+ return handlerID
414424 }
415425
416426 fcb := func(clsPtr uintptr, ValueVarp float64) {
@@ -423,7 +433,9 @@ func (x *ScaleButton) ConnectValueChanged(cb *func(ScaleButton, float64)) uint32
423433 }
424434 cbRefPtr := purego.NewCallback(fcb)
425435 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
426- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
436+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
437+ glib.SaveHandlerMapping(handlerID, cbPtr)
438+ return handlerID
427439 }
428440
429441 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkscrolledwindow.go +28 -12
@@ -784,10 +784,12 @@ func (x *ScrolledWindow) GetPropertyPropagateNaturalWidth() bool {
784784 //
785785 // Note: The @pos argument is LTR/RTL aware, so callers should be
786786 // aware too if intending to provide behavior on horizontal edges.
787-func (x *ScrolledWindow) ConnectEdgeOvershot(cb *func(ScrolledWindow, PositionType)) uint32 {
787+func (x *ScrolledWindow) ConnectEdgeOvershot(cb *func(ScrolledWindow, PositionType)) uint {
788788 cbPtr := uintptr(unsafe.Pointer(cb))
789789 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
790- return gobject.SignalConnect(x.GoPointer(), "edge-overshot", cbRefPtr)
790+ handlerID := gobject.SignalConnect(x.GoPointer(), "edge-overshot", cbRefPtr)
791+ glib.SaveHandlerMapping(handlerID, cbPtr)
792+ return handlerID
791793 }
792794
793795 fcb := func(clsPtr uintptr, PosVarp PositionType) {
@@ -800,7 +802,9 @@ func (x *ScrolledWindow) ConnectEdgeOvershot(cb *func(ScrolledWindow, PositionTy
800802 }
801803 cbRefPtr := purego.NewCallback(fcb)
802804 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
803- return gobject.SignalConnect(x.GoPointer(), "edge-overshot", cbRefPtr)
805+ handlerID := gobject.SignalConnect(x.GoPointer(), "edge-overshot", cbRefPtr)
806+ glib.SaveHandlerMapping(handlerID, cbPtr)
807+ return handlerID
804808 }
805809
806810 // Emitted whenever user-initiated scrolling makes the scrolled
@@ -812,10 +816,12 @@ func (x *ScrolledWindow) ConnectEdgeOvershot(cb *func(ScrolledWindow, PositionTy
812816 //
813817 // Note: The @pos argument is LTR/RTL aware, so callers should be
814818 // aware too if intending to provide behavior on horizontal edges.
815-func (x *ScrolledWindow) ConnectEdgeReached(cb *func(ScrolledWindow, PositionType)) uint32 {
819+func (x *ScrolledWindow) ConnectEdgeReached(cb *func(ScrolledWindow, PositionType)) uint {
816820 cbPtr := uintptr(unsafe.Pointer(cb))
817821 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
818- return gobject.SignalConnect(x.GoPointer(), "edge-reached", cbRefPtr)
822+ handlerID := gobject.SignalConnect(x.GoPointer(), "edge-reached", cbRefPtr)
823+ glib.SaveHandlerMapping(handlerID, cbPtr)
824+ return handlerID
819825 }
820826
821827 fcb := func(clsPtr uintptr, PosVarp PositionType) {
@@ -828,7 +834,9 @@ func (x *ScrolledWindow) ConnectEdgeReached(cb *func(ScrolledWindow, PositionTyp
828834 }
829835 cbRefPtr := purego.NewCallback(fcb)
830836 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
831- return gobject.SignalConnect(x.GoPointer(), "edge-reached", cbRefPtr)
837+ handlerID := gobject.SignalConnect(x.GoPointer(), "edge-reached", cbRefPtr)
838+ glib.SaveHandlerMapping(handlerID, cbPtr)
839+ return handlerID
832840 }
833841
834842 // Emitted when focus is moved away from the scrolled window by a
@@ -839,10 +847,12 @@ func (x *ScrolledWindow) ConnectEdgeReached(cb *func(ScrolledWindow, PositionTyp
839847 // The default bindings for this signal are
840848 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt; to move forward and
841849 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt;` to move backward.
842-func (x *ScrolledWindow) ConnectMoveFocusOut(cb *func(ScrolledWindow, DirectionType)) uint32 {
850+func (x *ScrolledWindow) ConnectMoveFocusOut(cb *func(ScrolledWindow, DirectionType)) uint {
843851 cbPtr := uintptr(unsafe.Pointer(cb))
844852 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
845- return gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
853+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
854+ glib.SaveHandlerMapping(handlerID, cbPtr)
855+ return handlerID
846856 }
847857
848858 fcb := func(clsPtr uintptr, DirectionTypeVarp DirectionType) {
@@ -855,7 +865,9 @@ func (x *ScrolledWindow) ConnectMoveFocusOut(cb *func(ScrolledWindow, DirectionT
855865 }
856866 cbRefPtr := purego.NewCallback(fcb)
857867 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
858- return gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
868+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus-out", cbRefPtr)
869+ glib.SaveHandlerMapping(handlerID, cbPtr)
870+ return handlerID
859871 }
860872
861873 // Emitted when a keybinding that scrolls is pressed.
@@ -864,10 +876,12 @@ func (x *ScrolledWindow) ConnectMoveFocusOut(cb *func(ScrolledWindow, DirectionT
864876 //
865877 // The horizontal or vertical adjustment is updated which triggers a
866878 // signal that the scrolled window’s child may listen to and scroll itself.
867-func (x *ScrolledWindow) ConnectScrollChild(cb *func(ScrolledWindow, ScrollType, bool) bool) uint32 {
879+func (x *ScrolledWindow) ConnectScrollChild(cb *func(ScrolledWindow, ScrollType, bool) bool) uint {
868880 cbPtr := uintptr(unsafe.Pointer(cb))
869881 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
870- return gobject.SignalConnect(x.GoPointer(), "scroll-child", cbRefPtr)
882+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-child", cbRefPtr)
883+ glib.SaveHandlerMapping(handlerID, cbPtr)
884+ return handlerID
871885 }
872886
873887 fcb := func(clsPtr uintptr, ScrollVarp ScrollType, HorizontalVarp bool) bool {
@@ -880,7 +894,9 @@ func (x *ScrolledWindow) ConnectScrollChild(cb *func(ScrolledWindow, ScrollType,
880894 }
881895 cbRefPtr := purego.NewCallback(fcb)
882896 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
883- return gobject.SignalConnect(x.GoPointer(), "scroll-child", cbRefPtr)
897+ handlerID := gobject.SignalConnect(x.GoPointer(), "scroll-child", cbRefPtr)
898+ glib.SaveHandlerMapping(handlerID, cbPtr)
899+ return handlerID
884900 }
885901
886902 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtksearchentry.go +42 -18
@@ -295,10 +295,12 @@ func (x *SearchEntry) GetPropertySearchDelay() uint {
295295 // Emitted when the entry is activated.
296296 //
297297 // The keybindings for this signal are all forms of the &lt;kbd&gt;Enter&lt;/kbd&gt; key.
298-func (x *SearchEntry) ConnectActivate(cb *func(SearchEntry)) uint32 {
298+func (x *SearchEntry) ConnectActivate(cb *func(SearchEntry)) uint {
299299 cbPtr := uintptr(unsafe.Pointer(cb))
300300 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
301- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
301+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
302+ glib.SaveHandlerMapping(handlerID, cbPtr)
303+ return handlerID
302304 }
303305
304306 fcb := func(clsPtr uintptr) {
@@ -311,7 +313,9 @@ func (x *SearchEntry) ConnectActivate(cb *func(SearchEntry)) uint32 {
311313 }
312314 cbRefPtr := purego.NewCallback(fcb)
313315 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
314- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
316+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
317+ glib.SaveHandlerMapping(handlerID, cbPtr)
318+ return handlerID
315319 }
316320
317321 // Emitted when the user initiates a move to the next match
@@ -323,10 +327,12 @@ func (x *SearchEntry) ConnectActivate(cb *func(SearchEntry)) uint32 {
323327 // between matches.
324328 //
325329 // The default bindings for this signal is &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;g&lt;/kbd&gt;.
326-func (x *SearchEntry) ConnectNextMatch(cb *func(SearchEntry)) uint32 {
330+func (x *SearchEntry) ConnectNextMatch(cb *func(SearchEntry)) uint {
327331 cbPtr := uintptr(unsafe.Pointer(cb))
328332 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
329- return gobject.SignalConnect(x.GoPointer(), "next-match", cbRefPtr)
333+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-match", cbRefPtr)
334+ glib.SaveHandlerMapping(handlerID, cbPtr)
335+ return handlerID
330336 }
331337
332338 fcb := func(clsPtr uintptr) {
@@ -339,7 +345,9 @@ func (x *SearchEntry) ConnectNextMatch(cb *func(SearchEntry)) uint32 {
339345 }
340346 cbRefPtr := purego.NewCallback(fcb)
341347 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
342- return gobject.SignalConnect(x.GoPointer(), "next-match", cbRefPtr)
348+ handlerID := gobject.SignalConnect(x.GoPointer(), "next-match", cbRefPtr)
349+ glib.SaveHandlerMapping(handlerID, cbPtr)
350+ return handlerID
343351 }
344352
345353 // Emitted when the user initiates a move to the previous match
@@ -352,10 +360,12 @@ func (x *SearchEntry) ConnectNextMatch(cb *func(SearchEntry)) uint32 {
352360 //
353361 // The default bindings for this signal is
354362 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;g&lt;/kbd&gt;.
355-func (x *SearchEntry) ConnectPreviousMatch(cb *func(SearchEntry)) uint32 {
363+func (x *SearchEntry) ConnectPreviousMatch(cb *func(SearchEntry)) uint {
356364 cbPtr := uintptr(unsafe.Pointer(cb))
357365 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
358- return gobject.SignalConnect(x.GoPointer(), "previous-match", cbRefPtr)
366+ handlerID := gobject.SignalConnect(x.GoPointer(), "previous-match", cbRefPtr)
367+ glib.SaveHandlerMapping(handlerID, cbPtr)
368+ return handlerID
359369 }
360370
361371 fcb := func(clsPtr uintptr) {
@@ -368,16 +378,20 @@ func (x *SearchEntry) ConnectPreviousMatch(cb *func(SearchEntry)) uint32 {
368378 }
369379 cbRefPtr := purego.NewCallback(fcb)
370380 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
371- return gobject.SignalConnect(x.GoPointer(), "previous-match", cbRefPtr)
381+ handlerID := gobject.SignalConnect(x.GoPointer(), "previous-match", cbRefPtr)
382+ glib.SaveHandlerMapping(handlerID, cbPtr)
383+ return handlerID
372384 }
373385
374386 // Emitted with a delay. The length of the delay can be
375387 // changed with the [property@Gtk.SearchEntry:search-delay]
376388 // property.
377-func (x *SearchEntry) ConnectSearchChanged(cb *func(SearchEntry)) uint32 {
389+func (x *SearchEntry) ConnectSearchChanged(cb *func(SearchEntry)) uint {
378390 cbPtr := uintptr(unsafe.Pointer(cb))
379391 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
380- return gobject.SignalConnect(x.GoPointer(), "search-changed", cbRefPtr)
392+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-changed", cbRefPtr)
393+ glib.SaveHandlerMapping(handlerID, cbPtr)
394+ return handlerID
381395 }
382396
383397 fcb := func(clsPtr uintptr) {
@@ -390,14 +404,18 @@ func (x *SearchEntry) ConnectSearchChanged(cb *func(SearchEntry)) uint32 {
390404 }
391405 cbRefPtr := purego.NewCallback(fcb)
392406 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
393- return gobject.SignalConnect(x.GoPointer(), "search-changed", cbRefPtr)
407+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-changed", cbRefPtr)
408+ glib.SaveHandlerMapping(handlerID, cbPtr)
409+ return handlerID
394410 }
395411
396412 // Emitted when the user initiated a search on the entry.
397-func (x *SearchEntry) ConnectSearchStarted(cb *func(SearchEntry)) uint32 {
413+func (x *SearchEntry) ConnectSearchStarted(cb *func(SearchEntry)) uint {
398414 cbPtr := uintptr(unsafe.Pointer(cb))
399415 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
400- return gobject.SignalConnect(x.GoPointer(), "search-started", cbRefPtr)
416+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-started", cbRefPtr)
417+ glib.SaveHandlerMapping(handlerID, cbPtr)
418+ return handlerID
401419 }
402420
403421 fcb := func(clsPtr uintptr) {
@@ -410,7 +428,9 @@ func (x *SearchEntry) ConnectSearchStarted(cb *func(SearchEntry)) uint32 {
410428 }
411429 cbRefPtr := purego.NewCallback(fcb)
412430 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
413- return gobject.SignalConnect(x.GoPointer(), "search-started", cbRefPtr)
431+ handlerID := gobject.SignalConnect(x.GoPointer(), "search-started", cbRefPtr)
432+ glib.SaveHandlerMapping(handlerID, cbPtr)
433+ return handlerID
414434 }
415435
416436 // Emitted when the user stops a search via keyboard input.
@@ -421,10 +441,12 @@ func (x *SearchEntry) ConnectSearchStarted(cb *func(SearchEntry)) uint32 {
421441 // the search entry in this case.
422442 //
423443 // The default bindings for this signal is &lt;kbd&gt;Escape&lt;/kbd&gt;.
424-func (x *SearchEntry) ConnectStopSearch(cb *func(SearchEntry)) uint32 {
444+func (x *SearchEntry) ConnectStopSearch(cb *func(SearchEntry)) uint {
425445 cbPtr := uintptr(unsafe.Pointer(cb))
426446 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
427- return gobject.SignalConnect(x.GoPointer(), "stop-search", cbRefPtr)
447+ handlerID := gobject.SignalConnect(x.GoPointer(), "stop-search", cbRefPtr)
448+ glib.SaveHandlerMapping(handlerID, cbPtr)
449+ return handlerID
428450 }
429451
430452 fcb := func(clsPtr uintptr) {
@@ -437,7 +459,9 @@ func (x *SearchEntry) ConnectStopSearch(cb *func(SearchEntry)) uint32 {
437459 }
438460 cbRefPtr := purego.NewCallback(fcb)
439461 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
440- return gobject.SignalConnect(x.GoPointer(), "stop-search", cbRefPtr)
462+ handlerID := gobject.SignalConnect(x.GoPointer(), "stop-search", cbRefPtr)
463+ glib.SaveHandlerMapping(handlerID, cbPtr)
464+ return handlerID
441465 }
442466
443467 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkshortcutssection.go +7 -3
@@ -201,10 +201,12 @@ func (x *ShortcutsSection) GetPropertyViewName() string {
201201 // The default bindings for this signal are
202202 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgUp&lt;/kbd&gt;, &lt;kbd&gt;PgUp&lt;/kbd&gt;,
203203 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgDn&lt;/kbd&gt;, &lt;kbd&gt;PgDn&lt;/kbd&gt;.
204-func (x *ShortcutsSection) ConnectChangeCurrentPage(cb *func(ShortcutsSection, int) bool) uint32 {
204+func (x *ShortcutsSection) ConnectChangeCurrentPage(cb *func(ShortcutsSection, int) bool) uint {
205205 cbPtr := uintptr(unsafe.Pointer(cb))
206206 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
207- return gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
207+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
208+ glib.SaveHandlerMapping(handlerID, cbPtr)
209+ return handlerID
208210 }
209211
210212 fcb := func(clsPtr uintptr, OffsetVarp int) bool {
@@ -217,7 +219,9 @@ func (x *ShortcutsSection) ConnectChangeCurrentPage(cb *func(ShortcutsSection, i
217219 }
218220 cbRefPtr := purego.NewCallback(fcb)
219221 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
220- return gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
222+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-current-page", cbRefPtr)
223+ glib.SaveHandlerMapping(handlerID, cbPtr)
224+ return handlerID
221225 }
222226
223227 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkshortcutswindow.go +14 -6
@@ -185,10 +185,12 @@ func (x *ShortcutsWindow) GetPropertyViewName() string {
185185 // This is a [keybinding signal](class.SignalAction.html).
186186 //
187187 // The default binding for this signal is the &lt;kbd&gt;Escape&lt;/kbd&gt; key.
188-func (x *ShortcutsWindow) ConnectClose(cb *func(ShortcutsWindow)) uint32 {
188+func (x *ShortcutsWindow) ConnectClose(cb *func(ShortcutsWindow)) uint {
189189 cbPtr := uintptr(unsafe.Pointer(cb))
190190 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
191- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
191+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
192+ glib.SaveHandlerMapping(handlerID, cbPtr)
193+ return handlerID
192194 }
193195
194196 fcb := func(clsPtr uintptr) {
@@ -201,7 +203,9 @@ func (x *ShortcutsWindow) ConnectClose(cb *func(ShortcutsWindow)) uint32 {
201203 }
202204 cbRefPtr := purego.NewCallback(fcb)
203205 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
204- return gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
206+ handlerID := gobject.SignalConnect(x.GoPointer(), "close", cbRefPtr)
207+ glib.SaveHandlerMapping(handlerID, cbPtr)
208+ return handlerID
205209 }
206210
207211 // Emitted when the user uses a keybinding to start a search.
@@ -209,10 +213,12 @@ func (x *ShortcutsWindow) ConnectClose(cb *func(ShortcutsWindow)) uint32 {
209213 // This is a [keybinding signal](class.SignalAction.html).
210214 //
211215 // The default binding for this signal is &lt;kbd&gt;Control&lt;/kbd&gt;+&lt;kbd&gt;F&lt;/kbd&gt;.
212-func (x *ShortcutsWindow) ConnectSearch(cb *func(ShortcutsWindow)) uint32 {
216+func (x *ShortcutsWindow) ConnectSearch(cb *func(ShortcutsWindow)) uint {
213217 cbPtr := uintptr(unsafe.Pointer(cb))
214218 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
215- return gobject.SignalConnect(x.GoPointer(), "search", cbRefPtr)
219+ handlerID := gobject.SignalConnect(x.GoPointer(), "search", cbRefPtr)
220+ glib.SaveHandlerMapping(handlerID, cbPtr)
221+ return handlerID
216222 }
217223
218224 fcb := func(clsPtr uintptr) {
@@ -225,7 +231,9 @@ func (x *ShortcutsWindow) ConnectSearch(cb *func(ShortcutsWindow)) uint32 {
225231 }
226232 cbRefPtr := purego.NewCallback(fcb)
227233 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
228- return gobject.SignalConnect(x.GoPointer(), "search", cbRefPtr)
234+ handlerID := gobject.SignalConnect(x.GoPointer(), "search", cbRefPtr)
235+ glib.SaveHandlerMapping(handlerID, cbPtr)
236+ return handlerID
229237 }
230238
231239 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtksignallistitemfactory.go +28 -12
@@ -115,10 +115,12 @@ func (c *SignalListItemFactory) SetGoPointer(ptr uintptr) {
115115 // The [signal@Gtk.SignalListItemFactory::unbind] signal is the
116116 // opposite of this signal and can be used to undo everything done
117117 // in this signal.
118-func (x *SignalListItemFactory) ConnectBind(cb *func(SignalListItemFactory, uintptr)) uint32 {
118+func (x *SignalListItemFactory) ConnectBind(cb *func(SignalListItemFactory, uintptr)) uint {
119119 cbPtr := uintptr(unsafe.Pointer(cb))
120120 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
121- return gobject.SignalConnect(x.GoPointer(), "bind", cbRefPtr)
121+ handlerID := gobject.SignalConnect(x.GoPointer(), "bind", cbRefPtr)
122+ glib.SaveHandlerMapping(handlerID, cbPtr)
123+ return handlerID
122124 }
123125
124126 fcb := func(clsPtr uintptr, ObjectVarp uintptr) {
@@ -131,7 +133,9 @@ func (x *SignalListItemFactory) ConnectBind(cb *func(SignalListItemFactory, uint
131133 }
132134 cbRefPtr := purego.NewCallback(fcb)
133135 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
134- return gobject.SignalConnect(x.GoPointer(), "bind", cbRefPtr)
136+ handlerID := gobject.SignalConnect(x.GoPointer(), "bind", cbRefPtr)
137+ glib.SaveHandlerMapping(handlerID, cbPtr)
138+ return handlerID
135139 }
136140
137141 // Emitted when a newly created listitem needs to be prepared for use.
@@ -143,10 +147,12 @@ func (x *SignalListItemFactory) ConnectBind(cb *func(SignalListItemFactory, uint
143147 //
144148 // The [signal@Gtk.SignalListItemFactory::teardown] signal is the opposite
145149 // of this signal and can be used to undo everything done in this signal.
146-func (x *SignalListItemFactory) ConnectSetup(cb *func(SignalListItemFactory, uintptr)) uint32 {
150+func (x *SignalListItemFactory) ConnectSetup(cb *func(SignalListItemFactory, uintptr)) uint {
147151 cbPtr := uintptr(unsafe.Pointer(cb))
148152 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
149- return gobject.SignalConnect(x.GoPointer(), "setup", cbRefPtr)
153+ handlerID := gobject.SignalConnect(x.GoPointer(), "setup", cbRefPtr)
154+ glib.SaveHandlerMapping(handlerID, cbPtr)
155+ return handlerID
150156 }
151157
152158 fcb := func(clsPtr uintptr, ObjectVarp uintptr) {
@@ -159,7 +165,9 @@ func (x *SignalListItemFactory) ConnectSetup(cb *func(SignalListItemFactory, uin
159165 }
160166 cbRefPtr := purego.NewCallback(fcb)
161167 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
162- return gobject.SignalConnect(x.GoPointer(), "setup", cbRefPtr)
168+ handlerID := gobject.SignalConnect(x.GoPointer(), "setup", cbRefPtr)
169+ glib.SaveHandlerMapping(handlerID, cbPtr)
170+ return handlerID
163171 }
164172
165173 // Emitted when an object is about to be destroyed.
@@ -168,10 +176,12 @@ func (x *SignalListItemFactory) ConnectSetup(cb *func(SignalListItemFactory, uin
168176 //
169177 // This signal is the opposite of the [signal@Gtk.SignalListItemFactory::setup]
170178 // signal and should be used to undo everything done in that signal.
171-func (x *SignalListItemFactory) ConnectTeardown(cb *func(SignalListItemFactory, uintptr)) uint32 {
179+func (x *SignalListItemFactory) ConnectTeardown(cb *func(SignalListItemFactory, uintptr)) uint {
172180 cbPtr := uintptr(unsafe.Pointer(cb))
173181 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
174- return gobject.SignalConnect(x.GoPointer(), "teardown", cbRefPtr)
182+ handlerID := gobject.SignalConnect(x.GoPointer(), "teardown", cbRefPtr)
183+ glib.SaveHandlerMapping(handlerID, cbPtr)
184+ return handlerID
175185 }
176186
177187 fcb := func(clsPtr uintptr, ObjectVarp uintptr) {
@@ -184,7 +194,9 @@ func (x *SignalListItemFactory) ConnectTeardown(cb *func(SignalListItemFactory,
184194 }
185195 cbRefPtr := purego.NewCallback(fcb)
186196 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
187- return gobject.SignalConnect(x.GoPointer(), "teardown", cbRefPtr)
197+ handlerID := gobject.SignalConnect(x.GoPointer(), "teardown", cbRefPtr)
198+ glib.SaveHandlerMapping(handlerID, cbPtr)
199+ return handlerID
188200 }
189201
190202 // Emitted when an object has been unbound from its item.
@@ -195,10 +207,12 @@ func (x *SignalListItemFactory) ConnectTeardown(cb *func(SignalListItemFactory,
195207 //
196208 // This signal is the opposite of the [signal@Gtk.SignalListItemFactory::bind]
197209 // signal and should be used to undo everything done in that signal.
198-func (x *SignalListItemFactory) ConnectUnbind(cb *func(SignalListItemFactory, uintptr)) uint32 {
210+func (x *SignalListItemFactory) ConnectUnbind(cb *func(SignalListItemFactory, uintptr)) uint {
199211 cbPtr := uintptr(unsafe.Pointer(cb))
200212 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
201- return gobject.SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
213+ handlerID := gobject.SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
214+ glib.SaveHandlerMapping(handlerID, cbPtr)
215+ return handlerID
202216 }
203217
204218 fcb := func(clsPtr uintptr, ObjectVarp uintptr) {
@@ -211,7 +225,9 @@ func (x *SignalListItemFactory) ConnectUnbind(cb *func(SignalListItemFactory, ui
211225 }
212226 cbRefPtr := purego.NewCallback(fcb)
213227 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
214- return gobject.SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
228+ handlerID := gobject.SignalConnect(x.GoPointer(), "unbind", cbRefPtr)
229+ glib.SaveHandlerMapping(handlerID, cbPtr)
230+ return handlerID
215231 }
216232
217233 func init() {
M v4/gtk/gtksorter.go +7 -3
@@ -443,10 +443,12 @@ func (c *Sorter) SetGoPointer(ptr uintptr) {
443443 // Depending on the @change parameter, it may be possible to update
444444 // the sort order without a full resorting. Refer to the
445445 // [enum@Gtk.SorterChange] documentation for details.
446-func (x *Sorter) ConnectChanged(cb *func(Sorter, SorterChange)) uint32 {
446+func (x *Sorter) ConnectChanged(cb *func(Sorter, SorterChange)) uint {
447447 cbPtr := uintptr(unsafe.Pointer(cb))
448448 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
449- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
449+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
450+ glib.SaveHandlerMapping(handlerID, cbPtr)
451+ return handlerID
450452 }
451453
452454 fcb := func(clsPtr uintptr, ChangeVarp SorterChange) {
@@ -459,7 +461,9 @@ func (x *Sorter) ConnectChanged(cb *func(Sorter, SorterChange)) uint32 {
459461 }
460462 cbRefPtr := purego.NewCallback(fcb)
461463 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
462- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
464+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
465+ glib.SaveHandlerMapping(handlerID, cbPtr)
466+ return handlerID
463467 }
464468
465469 func init() {
M v4/gtk/gtkspinbutton.go +42 -18
@@ -689,10 +689,12 @@ func (x *SpinButton) GetPropertyWrap() bool {
689689 // If the &lt;kbd&gt;Enter&lt;/kbd&gt; key results in the value being committed to the
690690 // spin button, then activation does not occur until &lt;kbd&gt;Enter&lt;/kbd&gt; is
691691 // pressed again.
692-func (x *SpinButton) ConnectActivate(cb *func(SpinButton)) uint32 {
692+func (x *SpinButton) ConnectActivate(cb *func(SpinButton)) uint {
693693 cbPtr := uintptr(unsafe.Pointer(cb))
694694 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
695- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
695+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
696+ glib.SaveHandlerMapping(handlerID, cbPtr)
697+ return handlerID
696698 }
697699
698700 fcb := func(clsPtr uintptr) {
@@ -705,7 +707,9 @@ func (x *SpinButton) ConnectActivate(cb *func(SpinButton)) uint32 {
705707 }
706708 cbRefPtr := purego.NewCallback(fcb)
707709 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
708- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
710+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
711+ glib.SaveHandlerMapping(handlerID, cbPtr)
712+ return handlerID
709713 }
710714
711715 // Emitted when the user initiates a value change.
@@ -717,10 +721,12 @@ func (x *SpinButton) ConnectActivate(cb *func(SpinButton)) uint32 {
717721 // programmatically.
718722 //
719723 // The default bindings for this signal are Up/Down and PageUp/PageDown.
720-func (x *SpinButton) ConnectChangeValue(cb *func(SpinButton, ScrollType)) uint32 {
724+func (x *SpinButton) ConnectChangeValue(cb *func(SpinButton, ScrollType)) uint {
721725 cbPtr := uintptr(unsafe.Pointer(cb))
722726 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
723- return gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
727+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
728+ glib.SaveHandlerMapping(handlerID, cbPtr)
729+ return handlerID
724730 }
725731
726732 fcb := func(clsPtr uintptr, ScrollVarp ScrollType) {
@@ -733,7 +739,9 @@ func (x *SpinButton) ConnectChangeValue(cb *func(SpinButton, ScrollType)) uint32
733739 }
734740 cbRefPtr := purego.NewCallback(fcb)
735741 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
736- return gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
742+ handlerID := gobject.SignalConnect(x.GoPointer(), "change-value", cbRefPtr)
743+ glib.SaveHandlerMapping(handlerID, cbPtr)
744+ return handlerID
737745 }
738746
739747 // Emitted to convert the users input into a double value.
@@ -743,10 +751,12 @@ func (x *SpinButton) ConnectChangeValue(cb *func(SpinButton, ScrollType)) uint32
743751 // new value.
744752 //
745753 // The default conversion uses g_strtod().
746-func (x *SpinButton) ConnectInput(cb *func(SpinButton, *float64) int) uint32 {
754+func (x *SpinButton) ConnectInput(cb *func(SpinButton, *float64) int) uint {
747755 cbPtr := uintptr(unsafe.Pointer(cb))
748756 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
749- return gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
757+ handlerID := gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
758+ glib.SaveHandlerMapping(handlerID, cbPtr)
759+ return handlerID
750760 }
751761
752762 fcb := func(clsPtr uintptr, NewValueVarp *float64) int {
@@ -759,7 +769,9 @@ func (x *SpinButton) ConnectInput(cb *func(SpinButton, *float64) int) uint32 {
759769 }
760770 cbRefPtr := purego.NewCallback(fcb)
761771 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
762- return gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
772+ handlerID := gobject.SignalConnect(x.GoPointer(), "input", cbRefPtr)
773+ glib.SaveHandlerMapping(handlerID, cbPtr)
774+ return handlerID
763775 }
764776
765777 // Emitted to tweak the formatting of the value for display.
@@ -784,10 +796,12 @@ func (x *SpinButton) ConnectInput(cb *func(SpinButton, *float64) int) uint32 {
784796 // }
785797 //
786798 // ```
787-func (x *SpinButton) ConnectOutput(cb *func(SpinButton) bool) uint32 {
799+func (x *SpinButton) ConnectOutput(cb *func(SpinButton) bool) uint {
788800 cbPtr := uintptr(unsafe.Pointer(cb))
789801 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
790- return gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
802+ handlerID := gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
803+ glib.SaveHandlerMapping(handlerID, cbPtr)
804+ return handlerID
791805 }
792806
793807 fcb := func(clsPtr uintptr) bool {
@@ -800,16 +814,20 @@ func (x *SpinButton) ConnectOutput(cb *func(SpinButton) bool) uint32 {
800814 }
801815 cbRefPtr := purego.NewCallback(fcb)
802816 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
803- return gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
817+ handlerID := gobject.SignalConnect(x.GoPointer(), "output", cbRefPtr)
818+ glib.SaveHandlerMapping(handlerID, cbPtr)
819+ return handlerID
804820 }
805821
806822 // Emitted when the value is changed.
807823 //
808824 // Also see the [signal@Gtk.SpinButton::output] signal.
809-func (x *SpinButton) ConnectValueChanged(cb *func(SpinButton)) uint32 {
825+func (x *SpinButton) ConnectValueChanged(cb *func(SpinButton)) uint {
810826 cbPtr := uintptr(unsafe.Pointer(cb))
811827 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
812- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
828+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
829+ glib.SaveHandlerMapping(handlerID, cbPtr)
830+ return handlerID
813831 }
814832
815833 fcb := func(clsPtr uintptr) {
@@ -822,15 +840,19 @@ func (x *SpinButton) ConnectValueChanged(cb *func(SpinButton)) uint32 {
822840 }
823841 cbRefPtr := purego.NewCallback(fcb)
824842 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
825- return gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
843+ handlerID := gobject.SignalConnect(x.GoPointer(), "value-changed", cbRefPtr)
844+ glib.SaveHandlerMapping(handlerID, cbPtr)
845+ return handlerID
826846 }
827847
828848 // Emitted right after the spinbutton wraps from its maximum
829849 // to its minimum value or vice-versa.
830-func (x *SpinButton) ConnectWrapped(cb *func(SpinButton)) uint32 {
850+func (x *SpinButton) ConnectWrapped(cb *func(SpinButton)) uint {
831851 cbPtr := uintptr(unsafe.Pointer(cb))
832852 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
833- return gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
853+ handlerID := gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
854+ glib.SaveHandlerMapping(handlerID, cbPtr)
855+ return handlerID
834856 }
835857
836858 fcb := func(clsPtr uintptr) {
@@ -843,7 +865,9 @@ func (x *SpinButton) ConnectWrapped(cb *func(SpinButton)) uint32 {
843865 }
844866 cbRefPtr := purego.NewCallback(fcb)
845867 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
846- return gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
868+ handlerID := gobject.SignalConnect(x.GoPointer(), "wrapped", cbRefPtr)
869+ glib.SaveHandlerMapping(handlerID, cbPtr)
870+ return handlerID
847871 }
848872
849873 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkstatusbar.go +14 -6
@@ -154,10 +154,12 @@ func (c *Statusbar) SetGoPointer(ptr uintptr) {
154154 }
155155
156156 // Emitted whenever a new message is popped off a statusbar's stack.
157-func (x *Statusbar) ConnectTextPopped(cb *func(Statusbar, uint, string)) uint32 {
157+func (x *Statusbar) ConnectTextPopped(cb *func(Statusbar, uint, string)) uint {
158158 cbPtr := uintptr(unsafe.Pointer(cb))
159159 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
160- return gobject.SignalConnect(x.GoPointer(), "text-popped", cbRefPtr)
160+ handlerID := gobject.SignalConnect(x.GoPointer(), "text-popped", cbRefPtr)
161+ glib.SaveHandlerMapping(handlerID, cbPtr)
162+ return handlerID
161163 }
162164
163165 fcb := func(clsPtr uintptr, ContextIdVarp uint, TextVarp string) {
@@ -170,14 +172,18 @@ func (x *Statusbar) ConnectTextPopped(cb *func(Statusbar, uint, string)) uint32
170172 }
171173 cbRefPtr := purego.NewCallback(fcb)
172174 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
173- return gobject.SignalConnect(x.GoPointer(), "text-popped", cbRefPtr)
175+ handlerID := gobject.SignalConnect(x.GoPointer(), "text-popped", cbRefPtr)
176+ glib.SaveHandlerMapping(handlerID, cbPtr)
177+ return handlerID
174178 }
175179
176180 // Emitted whenever a new message gets pushed onto a statusbar's stack.
177-func (x *Statusbar) ConnectTextPushed(cb *func(Statusbar, uint, string)) uint32 {
181+func (x *Statusbar) ConnectTextPushed(cb *func(Statusbar, uint, string)) uint {
178182 cbPtr := uintptr(unsafe.Pointer(cb))
179183 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
180- return gobject.SignalConnect(x.GoPointer(), "text-pushed", cbRefPtr)
184+ handlerID := gobject.SignalConnect(x.GoPointer(), "text-pushed", cbRefPtr)
185+ glib.SaveHandlerMapping(handlerID, cbPtr)
186+ return handlerID
181187 }
182188
183189 fcb := func(clsPtr uintptr, ContextIdVarp uint, TextVarp string) {
@@ -190,7 +196,9 @@ func (x *Statusbar) ConnectTextPushed(cb *func(Statusbar, uint, string)) uint32
190196 }
191197 cbRefPtr := purego.NewCallback(fcb)
192198 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
193- return gobject.SignalConnect(x.GoPointer(), "text-pushed", cbRefPtr)
199+ handlerID := gobject.SignalConnect(x.GoPointer(), "text-pushed", cbRefPtr)
200+ glib.SaveHandlerMapping(handlerID, cbPtr)
201+ return handlerID
194202 }
195203
196204 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkstringlist.go +2 -2
@@ -165,7 +165,7 @@ func (x *StringList) Splice(PositionVar uint, NRemovalsVar uint, AdditionsVar []
165165
166166 }
167167
168-var xStringListTake func(uintptr, string)
168+var xStringListTake func(uintptr, uintptr)
169169
170170 // Adds @string to self at the end, and takes
171171 // ownership of it.
@@ -178,7 +178,7 @@ var xStringListTake func(uintptr, string)
178178 // ```
179179 func (x *StringList) Take(StringVar string) {
180180
181- xStringListTake(x.GoPointer(), StringVar)
181+ xStringListTake(x.GoPointer(), core.GStrdup(StringVar))
182182
183183 }
184184
M v4/gtk/gtkswitch.go +14 -6
@@ -196,10 +196,12 @@ func (x *Switch) GetPropertyState() bool {
196196 //
197197 // Applications should never connect to this signal,
198198 // but use the [property@Gtk.Switch:active] property.
199-func (x *Switch) ConnectActivate(cb *func(Switch)) uint32 {
199+func (x *Switch) ConnectActivate(cb *func(Switch)) uint {
200200 cbPtr := uintptr(unsafe.Pointer(cb))
201201 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
202- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
202+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
203+ glib.SaveHandlerMapping(handlerID, cbPtr)
204+ return handlerID
203205 }
204206
205207 fcb := func(clsPtr uintptr) {
@@ -212,7 +214,9 @@ func (x *Switch) ConnectActivate(cb *func(Switch)) uint32 {
212214 }
213215 cbRefPtr := purego.NewCallback(fcb)
214216 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
215- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
217+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
218+ glib.SaveHandlerMapping(handlerID, cbPtr)
219+ return handlerID
216220 }
217221
218222 // Emitted to change the underlying state.
@@ -226,10 +230,12 @@ func (x *Switch) ConnectActivate(cb *func(Switch)) uint32 {
226230 // [method@Gtk.Switch.set_state] when the underlying state change is
227231 // complete. The signal handler should return %TRUE to prevent the
228232 // default handler from running.
229-func (x *Switch) ConnectStateSet(cb *func(Switch, bool) bool) uint32 {
233+func (x *Switch) ConnectStateSet(cb *func(Switch, bool) bool) uint {
230234 cbPtr := uintptr(unsafe.Pointer(cb))
231235 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
232- return gobject.SignalConnect(x.GoPointer(), "state-set", cbRefPtr)
236+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-set", cbRefPtr)
237+ glib.SaveHandlerMapping(handlerID, cbPtr)
238+ return handlerID
233239 }
234240
235241 fcb := func(clsPtr uintptr, StateVarp bool) bool {
@@ -242,7 +248,9 @@ func (x *Switch) ConnectStateSet(cb *func(Switch, bool) bool) uint32 {
242248 }
243249 cbRefPtr := purego.NewCallback(fcb)
244250 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
245- return gobject.SignalConnect(x.GoPointer(), "state-set", cbRefPtr)
251+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-set", cbRefPtr)
252+ glib.SaveHandlerMapping(handlerID, cbPtr)
253+ return handlerID
246254 }
247255
248256 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtktext.go +77 -33
@@ -875,10 +875,12 @@ func (x *Text) GetPropertyVisibility() bool {
875875 //
876876 // The default bindings for this signal are all forms
877877 // of the &lt;kbd&gt;Enter&lt;/kbd&gt; key.
878-func (x *Text) ConnectActivate(cb *func(Text)) uint32 {
878+func (x *Text) ConnectActivate(cb *func(Text)) uint {
879879 cbPtr := uintptr(unsafe.Pointer(cb))
880880 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
881- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
881+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
882+ glib.SaveHandlerMapping(handlerID, cbPtr)
883+ return handlerID
882884 }
883885
884886 fcb := func(clsPtr uintptr) {
@@ -891,7 +893,9 @@ func (x *Text) ConnectActivate(cb *func(Text)) uint32 {
891893 }
892894 cbRefPtr := purego.NewCallback(fcb)
893895 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
894- return gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
896+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate", cbRefPtr)
897+ glib.SaveHandlerMapping(handlerID, cbPtr)
898+ return handlerID
895899 }
896900
897901 // Emitted when the user asks for it.
@@ -900,10 +904,12 @@ func (x *Text) ConnectActivate(cb *func(Text)) uint32 {
900904 //
901905 // The default bindings for this signal are
902906 // &lt;kbd&gt;Backspace&lt;/kbd&gt; and &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Backspace&lt;/kbd&gt;.
903-func (x *Text) ConnectBackspace(cb *func(Text)) uint32 {
907+func (x *Text) ConnectBackspace(cb *func(Text)) uint {
904908 cbPtr := uintptr(unsafe.Pointer(cb))
905909 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
906- return gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
910+ handlerID := gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
911+ glib.SaveHandlerMapping(handlerID, cbPtr)
912+ return handlerID
907913 }
908914
909915 fcb := func(clsPtr uintptr) {
@@ -916,7 +922,9 @@ func (x *Text) ConnectBackspace(cb *func(Text)) uint32 {
916922 }
917923 cbRefPtr := purego.NewCallback(fcb)
918924 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
919- return gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
925+ handlerID := gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
926+ glib.SaveHandlerMapping(handlerID, cbPtr)
927+ return handlerID
920928 }
921929
922930 // Emitted to copy the selection to the clipboard.
@@ -926,10 +934,12 @@ func (x *Text) ConnectBackspace(cb *func(Text)) uint32 {
926934 // The default bindings for this signal are
927935 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;c&lt;/kbd&gt; and
928936 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Insert&lt;/kbd&gt;.
929-func (x *Text) ConnectCopyClipboard(cb *func(Text)) uint32 {
937+func (x *Text) ConnectCopyClipboard(cb *func(Text)) uint {
930938 cbPtr := uintptr(unsafe.Pointer(cb))
931939 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
932- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
940+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
941+ glib.SaveHandlerMapping(handlerID, cbPtr)
942+ return handlerID
933943 }
934944
935945 fcb := func(clsPtr uintptr) {
@@ -942,7 +952,9 @@ func (x *Text) ConnectCopyClipboard(cb *func(Text)) uint32 {
942952 }
943953 cbRefPtr := purego.NewCallback(fcb)
944954 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
945- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
955+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
956+ glib.SaveHandlerMapping(handlerID, cbPtr)
957+ return handlerID
946958 }
947959
948960 // Emitted to cut the selection to the clipboard.
@@ -952,10 +964,12 @@ func (x *Text) ConnectCopyClipboard(cb *func(Text)) uint32 {
952964 // The default bindings for this signal are
953965 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;x&lt;/kbd&gt; and
954966 // &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Delete&lt;/kbd&gt;.
955-func (x *Text) ConnectCutClipboard(cb *func(Text)) uint32 {
967+func (x *Text) ConnectCutClipboard(cb *func(Text)) uint {
956968 cbPtr := uintptr(unsafe.Pointer(cb))
957969 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
958- return gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
970+ handlerID := gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
971+ glib.SaveHandlerMapping(handlerID, cbPtr)
972+ return handlerID
959973 }
960974
961975 fcb := func(clsPtr uintptr) {
@@ -968,7 +982,9 @@ func (x *Text) ConnectCutClipboard(cb *func(Text)) uint32 {
968982 }
969983 cbRefPtr := purego.NewCallback(fcb)
970984 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
971- return gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
985+ handlerID := gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
986+ glib.SaveHandlerMapping(handlerID, cbPtr)
987+ return handlerID
972988 }
973989
974990 // Emitted when the user initiates a text deletion.
@@ -982,10 +998,12 @@ func (x *Text) ConnectCutClipboard(cb *func(Text)) uint32 {
982998 // The default bindings for this signal are &lt;kbd&gt;Delete&lt;/kbd&gt;
983999 // for deleting a character and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Delete&lt;/kbd&gt;
9841000 // for deleting a word.
985-func (x *Text) ConnectDeleteFromCursor(cb *func(Text, DeleteType, int)) uint32 {
1001+func (x *Text) ConnectDeleteFromCursor(cb *func(Text, DeleteType, int)) uint {
9861002 cbPtr := uintptr(unsafe.Pointer(cb))
9871003 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
988- return gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
1004+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
1005+ glib.SaveHandlerMapping(handlerID, cbPtr)
1006+ return handlerID
9891007 }
9901008
9911009 fcb := func(clsPtr uintptr, TypeVarp DeleteType, CountVarp int) {
@@ -998,7 +1016,9 @@ func (x *Text) ConnectDeleteFromCursor(cb *func(Text, DeleteType, int)) uint32 {
9981016 }
9991017 cbRefPtr := purego.NewCallback(fcb)
10001018 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1001- return gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
1019+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
1020+ glib.SaveHandlerMapping(handlerID, cbPtr)
1021+ return handlerID
10021022 }
10031023
10041024 // Emitted when the user initiates the insertion of a
@@ -1007,10 +1027,12 @@ func (x *Text) ConnectDeleteFromCursor(cb *func(Text, DeleteType, int)) uint32 {
10071027 // This is a [keybinding signal](class.SignalAction.html).
10081028 //
10091029 // This signal has no default bindings.
1010-func (x *Text) ConnectInsertAtCursor(cb *func(Text, string)) uint32 {
1030+func (x *Text) ConnectInsertAtCursor(cb *func(Text, string)) uint {
10111031 cbPtr := uintptr(unsafe.Pointer(cb))
10121032 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1013- return gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
1033+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
1034+ glib.SaveHandlerMapping(handlerID, cbPtr)
1035+ return handlerID
10141036 }
10151037
10161038 fcb := func(clsPtr uintptr, StringVarp string) {
@@ -1023,7 +1045,9 @@ func (x *Text) ConnectInsertAtCursor(cb *func(Text, string)) uint32 {
10231045 }
10241046 cbRefPtr := purego.NewCallback(fcb)
10251047 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1026- return gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
1048+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
1049+ glib.SaveHandlerMapping(handlerID, cbPtr)
1050+ return handlerID
10271051 }
10281052
10291053 // Emitted to present the Emoji chooser.
@@ -1033,10 +1057,12 @@ func (x *Text) ConnectInsertAtCursor(cb *func(Text, string)) uint32 {
10331057 // The default bindings for this signal are
10341058 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;.&lt;/kbd&gt; and
10351059 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;;&lt;/kbd&gt;
1036-func (x *Text) ConnectInsertEmoji(cb *func(Text)) uint32 {
1060+func (x *Text) ConnectInsertEmoji(cb *func(Text)) uint {
10371061 cbPtr := uintptr(unsafe.Pointer(cb))
10381062 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1039- return gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
1063+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
1064+ glib.SaveHandlerMapping(handlerID, cbPtr)
1065+ return handlerID
10401066 }
10411067
10421068 fcb := func(clsPtr uintptr) {
@@ -1049,7 +1075,9 @@ func (x *Text) ConnectInsertEmoji(cb *func(Text)) uint32 {
10491075 }
10501076 cbRefPtr := purego.NewCallback(fcb)
10511077 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1052- return gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
1078+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
1079+ glib.SaveHandlerMapping(handlerID, cbPtr)
1080+ return handlerID
10531081 }
10541082
10551083 // Emitted when the user initiates a cursor movement.
@@ -1072,10 +1100,12 @@ func (x *Text) ConnectInsertEmoji(cb *func(Text)) uint32 {
10721100 // move by individual characters/lines
10731101 // - &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;←&lt;/kbd&gt;, etc. move by words/paragraphs
10741102 // - &lt;kbd&gt;Home&lt;/kbd&gt; and &lt;kbd&gt;End&lt;/kbd&gt; move to the ends of the buffer
1075-func (x *Text) ConnectMoveCursor(cb *func(Text, MovementStep, int, bool)) uint32 {
1103+func (x *Text) ConnectMoveCursor(cb *func(Text, MovementStep, int, bool)) uint {
10761104 cbPtr := uintptr(unsafe.Pointer(cb))
10771105 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1078- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1106+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1107+ glib.SaveHandlerMapping(handlerID, cbPtr)
1108+ return handlerID
10791109 }
10801110
10811111 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendVarp bool) {
@@ -1088,7 +1118,9 @@ func (x *Text) ConnectMoveCursor(cb *func(Text, MovementStep, int, bool)) uint32
10881118 }
10891119 cbRefPtr := purego.NewCallback(fcb)
10901120 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1091- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1121+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
1122+ glib.SaveHandlerMapping(handlerID, cbPtr)
1123+ return handlerID
10921124 }
10931125
10941126 // Emitted to paste the contents of the clipboard.
@@ -1097,10 +1129,12 @@ func (x *Text) ConnectMoveCursor(cb *func(Text, MovementStep, int, bool)) uint32
10971129 //
10981130 // The default bindings for this signal are
10991131 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;v&lt;/kbd&gt; and &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Insert&lt;/kbd&gt;.
1100-func (x *Text) ConnectPasteClipboard(cb *func(Text)) uint32 {
1132+func (x *Text) ConnectPasteClipboard(cb *func(Text)) uint {
11011133 cbPtr := uintptr(unsafe.Pointer(cb))
11021134 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1103- return gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
1135+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
1136+ glib.SaveHandlerMapping(handlerID, cbPtr)
1137+ return handlerID
11041138 }
11051139
11061140 fcb := func(clsPtr uintptr) {
@@ -1113,7 +1147,9 @@ func (x *Text) ConnectPasteClipboard(cb *func(Text)) uint32 {
11131147 }
11141148 cbRefPtr := purego.NewCallback(fcb)
11151149 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1116- return gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
1150+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
1151+ glib.SaveHandlerMapping(handlerID, cbPtr)
1152+ return handlerID
11171153 }
11181154
11191155 // Emitted when the preedit text changes.
@@ -1121,10 +1157,12 @@ func (x *Text) ConnectPasteClipboard(cb *func(Text)) uint32 {
11211157 // If an input method is used, the typed text will not immediately
11221158 // be committed to the buffer. So if you are interested in the text,
11231159 // connect to this signal.
1124-func (x *Text) ConnectPreeditChanged(cb *func(Text, string)) uint32 {
1160+func (x *Text) ConnectPreeditChanged(cb *func(Text, string)) uint {
11251161 cbPtr := uintptr(unsafe.Pointer(cb))
11261162 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1127- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1163+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1164+ glib.SaveHandlerMapping(handlerID, cbPtr)
1165+ return handlerID
11281166 }
11291167
11301168 fcb := func(clsPtr uintptr, PreeditVarp string) {
@@ -1137,7 +1175,9 @@ func (x *Text) ConnectPreeditChanged(cb *func(Text, string)) uint32 {
11371175 }
11381176 cbRefPtr := purego.NewCallback(fcb)
11391177 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1140- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1178+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
1179+ glib.SaveHandlerMapping(handlerID, cbPtr)
1180+ return handlerID
11411181 }
11421182
11431183 // Emitted to toggle the overwrite mode.
@@ -1145,10 +1185,12 @@ func (x *Text) ConnectPreeditChanged(cb *func(Text, string)) uint32 {
11451185 // This is a [keybinding signal](class.SignalAction.html).
11461186 //
11471187 // The default bindings for this signal is &lt;kbd&gt;Insert&lt;/kbd&gt;.
1148-func (x *Text) ConnectToggleOverwrite(cb *func(Text)) uint32 {
1188+func (x *Text) ConnectToggleOverwrite(cb *func(Text)) uint {
11491189 cbPtr := uintptr(unsafe.Pointer(cb))
11501190 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1151- return gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
1191+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
1192+ glib.SaveHandlerMapping(handlerID, cbPtr)
1193+ return handlerID
11521194 }
11531195
11541196 fcb := func(clsPtr uintptr) {
@@ -1161,7 +1203,9 @@ func (x *Text) ConnectToggleOverwrite(cb *func(Text)) uint32 {
11611203 }
11621204 cbRefPtr := purego.NewCallback(fcb)
11631205 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1164- return gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
1206+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
1207+ glib.SaveHandlerMapping(handlerID, cbPtr)
1208+ return handlerID
11651209 }
11661210
11671211 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtktextbuffer.go +105 -45
@@ -1882,10 +1882,12 @@ func (x *TextBuffer) GetPropertyText() string {
18821882 // [method@Gtk.TextBuffer.apply_tag],
18831883 // [method@Gtk.TextBuffer.insert_with_tags],
18841884 // [method@Gtk.TextBuffer.insert_range].
1885-func (x *TextBuffer) ConnectApplyTag(cb *func(TextBuffer, uintptr, uintptr, uintptr)) uint32 {
1885+func (x *TextBuffer) ConnectApplyTag(cb *func(TextBuffer, uintptr, uintptr, uintptr)) uint {
18861886 cbPtr := uintptr(unsafe.Pointer(cb))
18871887 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1888- return gobject.SignalConnect(x.GoPointer(), "apply-tag", cbRefPtr)
1888+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply-tag", cbRefPtr)
1889+ glib.SaveHandlerMapping(handlerID, cbPtr)
1890+ return handlerID
18891891 }
18901892
18911893 fcb := func(clsPtr uintptr, TagVarp uintptr, StartVarp uintptr, EndVarp uintptr) {
@@ -1898,7 +1900,9 @@ func (x *TextBuffer) ConnectApplyTag(cb *func(TextBuffer, uintptr, uintptr, uint
18981900 }
18991901 cbRefPtr := purego.NewCallback(fcb)
19001902 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1901- return gobject.SignalConnect(x.GoPointer(), "apply-tag", cbRefPtr)
1903+ handlerID := gobject.SignalConnect(x.GoPointer(), "apply-tag", cbRefPtr)
1904+ glib.SaveHandlerMapping(handlerID, cbPtr)
1905+ return handlerID
19021906 }
19031907
19041908 // Emitted at the beginning of a single user-visible
@@ -1911,10 +1915,12 @@ func (x *TextBuffer) ConnectApplyTag(cb *func(TextBuffer, uintptr, uintptr, uint
19111915 // [method@Gtk.TextBuffer.delete_interactive],
19121916 // [method@Gtk.TextBuffer.backspace],
19131917 // [method@Gtk.TextBuffer.delete_selection].
1914-func (x *TextBuffer) ConnectBeginUserAction(cb *func(TextBuffer)) uint32 {
1918+func (x *TextBuffer) ConnectBeginUserAction(cb *func(TextBuffer)) uint {
19151919 cbPtr := uintptr(unsafe.Pointer(cb))
19161920 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1917- return gobject.SignalConnect(x.GoPointer(), "begin-user-action", cbRefPtr)
1921+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-user-action", cbRefPtr)
1922+ glib.SaveHandlerMapping(handlerID, cbPtr)
1923+ return handlerID
19181924 }
19191925
19201926 fcb := func(clsPtr uintptr) {
@@ -1927,14 +1933,18 @@ func (x *TextBuffer) ConnectBeginUserAction(cb *func(TextBuffer)) uint32 {
19271933 }
19281934 cbRefPtr := purego.NewCallback(fcb)
19291935 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1930- return gobject.SignalConnect(x.GoPointer(), "begin-user-action", cbRefPtr)
1936+ handlerID := gobject.SignalConnect(x.GoPointer(), "begin-user-action", cbRefPtr)
1937+ glib.SaveHandlerMapping(handlerID, cbPtr)
1938+ return handlerID
19311939 }
19321940
19331941 // Emitted when the content of a `GtkTextBuffer` has changed.
1934-func (x *TextBuffer) ConnectChanged(cb *func(TextBuffer)) uint32 {
1942+func (x *TextBuffer) ConnectChanged(cb *func(TextBuffer)) uint {
19351943 cbPtr := uintptr(unsafe.Pointer(cb))
19361944 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1937- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1945+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1946+ glib.SaveHandlerMapping(handlerID, cbPtr)
1947+ return handlerID
19381948 }
19391949
19401950 fcb := func(clsPtr uintptr) {
@@ -1947,7 +1957,9 @@ func (x *TextBuffer) ConnectChanged(cb *func(TextBuffer)) uint32 {
19471957 }
19481958 cbRefPtr := purego.NewCallback(fcb)
19491959 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1950- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1960+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
1961+ glib.SaveHandlerMapping(handlerID, cbPtr)
1962+ return handlerID
19511963 }
19521964
19531965 // Emitted to delete a range from a `GtkTextBuffer`.
@@ -1961,10 +1973,12 @@ func (x *TextBuffer) ConnectChanged(cb *func(TextBuffer)) uint32 {
19611973 // the deleted text.
19621974 //
19631975 // See also: [method@Gtk.TextBuffer.delete].
1964-func (x *TextBuffer) ConnectDeleteRange(cb *func(TextBuffer, uintptr, uintptr)) uint32 {
1976+func (x *TextBuffer) ConnectDeleteRange(cb *func(TextBuffer, uintptr, uintptr)) uint {
19651977 cbPtr := uintptr(unsafe.Pointer(cb))
19661978 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1967- return gobject.SignalConnect(x.GoPointer(), "delete-range", cbRefPtr)
1979+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-range", cbRefPtr)
1980+ glib.SaveHandlerMapping(handlerID, cbPtr)
1981+ return handlerID
19681982 }
19691983
19701984 fcb := func(clsPtr uintptr, StartVarp uintptr, EndVarp uintptr) {
@@ -1977,7 +1991,9 @@ func (x *TextBuffer) ConnectDeleteRange(cb *func(TextBuffer, uintptr, uintptr))
19771991 }
19781992 cbRefPtr := purego.NewCallback(fcb)
19791993 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1980- return gobject.SignalConnect(x.GoPointer(), "delete-range", cbRefPtr)
1994+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-range", cbRefPtr)
1995+ glib.SaveHandlerMapping(handlerID, cbPtr)
1996+ return handlerID
19811997 }
19821998
19831999 // Emitted at the end of a single user-visible
@@ -1991,10 +2007,12 @@ func (x *TextBuffer) ConnectDeleteRange(cb *func(TextBuffer, uintptr, uintptr))
19912007 // [method@Gtk.TextBuffer.backspace],
19922008 // [method@Gtk.TextBuffer.delete_selection],
19932009 // [method@Gtk.TextBuffer.backspace].
1994-func (x *TextBuffer) ConnectEndUserAction(cb *func(TextBuffer)) uint32 {
2010+func (x *TextBuffer) ConnectEndUserAction(cb *func(TextBuffer)) uint {
19952011 cbPtr := uintptr(unsafe.Pointer(cb))
19962012 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1997- return gobject.SignalConnect(x.GoPointer(), "end-user-action", cbRefPtr)
2013+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-user-action", cbRefPtr)
2014+ glib.SaveHandlerMapping(handlerID, cbPtr)
2015+ return handlerID
19982016 }
19992017
20002018 fcb := func(clsPtr uintptr) {
@@ -2007,7 +2025,9 @@ func (x *TextBuffer) ConnectEndUserAction(cb *func(TextBuffer)) uint32 {
20072025 }
20082026 cbRefPtr := purego.NewCallback(fcb)
20092027 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2010- return gobject.SignalConnect(x.GoPointer(), "end-user-action", cbRefPtr)
2028+ handlerID := gobject.SignalConnect(x.GoPointer(), "end-user-action", cbRefPtr)
2029+ glib.SaveHandlerMapping(handlerID, cbPtr)
2030+ return handlerID
20112031 }
20122032
20132033 // Emitted to insert a `GtkTextChildAnchor` in a `GtkTextBuffer`.
@@ -2020,10 +2040,12 @@ func (x *TextBuffer) ConnectEndUserAction(cb *func(TextBuffer)) uint32 {
20202040 // it to be placed after the inserted @anchor.
20212041 //
20222042 // See also: [method@Gtk.TextBuffer.insert_child_anchor].
2023-func (x *TextBuffer) ConnectInsertChildAnchor(cb *func(TextBuffer, uintptr, uintptr)) uint32 {
2043+func (x *TextBuffer) ConnectInsertChildAnchor(cb *func(TextBuffer, uintptr, uintptr)) uint {
20242044 cbPtr := uintptr(unsafe.Pointer(cb))
20252045 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2026- return gobject.SignalConnect(x.GoPointer(), "insert-child-anchor", cbRefPtr)
2046+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-child-anchor", cbRefPtr)
2047+ glib.SaveHandlerMapping(handlerID, cbPtr)
2048+ return handlerID
20272049 }
20282050
20292051 fcb := func(clsPtr uintptr, LocationVarp uintptr, AnchorVarp uintptr) {
@@ -2036,7 +2058,9 @@ func (x *TextBuffer) ConnectInsertChildAnchor(cb *func(TextBuffer, uintptr, uint
20362058 }
20372059 cbRefPtr := purego.NewCallback(fcb)
20382060 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2039- return gobject.SignalConnect(x.GoPointer(), "insert-child-anchor", cbRefPtr)
2061+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-child-anchor", cbRefPtr)
2062+ glib.SaveHandlerMapping(handlerID, cbPtr)
2063+ return handlerID
20402064 }
20412065
20422066 // Emitted to insert a `GdkPaintable` in a `GtkTextBuffer`.
@@ -2049,10 +2073,12 @@ func (x *TextBuffer) ConnectInsertChildAnchor(cb *func(TextBuffer, uintptr, uint
20492073 // it to be placed after the inserted @paintable.
20502074 //
20512075 // See also: [method@Gtk.TextBuffer.insert_paintable].
2052-func (x *TextBuffer) ConnectInsertPaintable(cb *func(TextBuffer, uintptr, uintptr)) uint32 {
2076+func (x *TextBuffer) ConnectInsertPaintable(cb *func(TextBuffer, uintptr, uintptr)) uint {
20532077 cbPtr := uintptr(unsafe.Pointer(cb))
20542078 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2055- return gobject.SignalConnect(x.GoPointer(), "insert-paintable", cbRefPtr)
2079+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-paintable", cbRefPtr)
2080+ glib.SaveHandlerMapping(handlerID, cbPtr)
2081+ return handlerID
20562082 }
20572083
20582084 fcb := func(clsPtr uintptr, LocationVarp uintptr, PaintableVarp uintptr) {
@@ -2065,7 +2091,9 @@ func (x *TextBuffer) ConnectInsertPaintable(cb *func(TextBuffer, uintptr, uintpt
20652091 }
20662092 cbRefPtr := purego.NewCallback(fcb)
20672093 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2068- return gobject.SignalConnect(x.GoPointer(), "insert-paintable", cbRefPtr)
2094+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-paintable", cbRefPtr)
2095+ glib.SaveHandlerMapping(handlerID, cbPtr)
2096+ return handlerID
20692097 }
20702098
20712099 // Emitted to insert text in a `GtkTextBuffer`.
@@ -2079,10 +2107,12 @@ func (x *TextBuffer) ConnectInsertPaintable(cb *func(TextBuffer, uintptr, uintpt
20792107 //
20802108 // See also: [method@Gtk.TextBuffer.insert],
20812109 // [method@Gtk.TextBuffer.insert_range].
2082-func (x *TextBuffer) ConnectInsertText(cb *func(TextBuffer, uintptr, string, int)) uint32 {
2110+func (x *TextBuffer) ConnectInsertText(cb *func(TextBuffer, uintptr, string, int)) uint {
20832111 cbPtr := uintptr(unsafe.Pointer(cb))
20842112 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2085- return gobject.SignalConnect(x.GoPointer(), "insert-text", cbRefPtr)
2113+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-text", cbRefPtr)
2114+ glib.SaveHandlerMapping(handlerID, cbPtr)
2115+ return handlerID
20862116 }
20872117
20882118 fcb := func(clsPtr uintptr, LocationVarp uintptr, TextVarp string, LenVarp int) {
@@ -2095,16 +2125,20 @@ func (x *TextBuffer) ConnectInsertText(cb *func(TextBuffer, uintptr, string, int
20952125 }
20962126 cbRefPtr := purego.NewCallback(fcb)
20972127 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2098- return gobject.SignalConnect(x.GoPointer(), "insert-text", cbRefPtr)
2128+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-text", cbRefPtr)
2129+ glib.SaveHandlerMapping(handlerID, cbPtr)
2130+ return handlerID
20992131 }
21002132
21012133 // Emitted as notification after a `GtkTextMark` is deleted.
21022134 //
21032135 // See also: [method@Gtk.TextBuffer.delete_mark].
2104-func (x *TextBuffer) ConnectMarkDeleted(cb *func(TextBuffer, uintptr)) uint32 {
2136+func (x *TextBuffer) ConnectMarkDeleted(cb *func(TextBuffer, uintptr)) uint {
21052137 cbPtr := uintptr(unsafe.Pointer(cb))
21062138 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2107- return gobject.SignalConnect(x.GoPointer(), "mark-deleted", cbRefPtr)
2139+ handlerID := gobject.SignalConnect(x.GoPointer(), "mark-deleted", cbRefPtr)
2140+ glib.SaveHandlerMapping(handlerID, cbPtr)
2141+ return handlerID
21082142 }
21092143
21102144 fcb := func(clsPtr uintptr, MarkVarp uintptr) {
@@ -2117,7 +2151,9 @@ func (x *TextBuffer) ConnectMarkDeleted(cb *func(TextBuffer, uintptr)) uint32 {
21172151 }
21182152 cbRefPtr := purego.NewCallback(fcb)
21192153 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2120- return gobject.SignalConnect(x.GoPointer(), "mark-deleted", cbRefPtr)
2154+ handlerID := gobject.SignalConnect(x.GoPointer(), "mark-deleted", cbRefPtr)
2155+ glib.SaveHandlerMapping(handlerID, cbPtr)
2156+ return handlerID
21212157 }
21222158
21232159 // Emitted as notification after a `GtkTextMark` is set.
@@ -2125,10 +2161,12 @@ func (x *TextBuffer) ConnectMarkDeleted(cb *func(TextBuffer, uintptr)) uint32 {
21252161 // See also:
21262162 // [method@Gtk.TextBuffer.create_mark],
21272163 // [method@Gtk.TextBuffer.move_mark].
2128-func (x *TextBuffer) ConnectMarkSet(cb *func(TextBuffer, uintptr, uintptr)) uint32 {
2164+func (x *TextBuffer) ConnectMarkSet(cb *func(TextBuffer, uintptr, uintptr)) uint {
21292165 cbPtr := uintptr(unsafe.Pointer(cb))
21302166 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2131- return gobject.SignalConnect(x.GoPointer(), "mark-set", cbRefPtr)
2167+ handlerID := gobject.SignalConnect(x.GoPointer(), "mark-set", cbRefPtr)
2168+ glib.SaveHandlerMapping(handlerID, cbPtr)
2169+ return handlerID
21322170 }
21332171
21342172 fcb := func(clsPtr uintptr, LocationVarp uintptr, MarkVarp uintptr) {
@@ -2141,16 +2179,20 @@ func (x *TextBuffer) ConnectMarkSet(cb *func(TextBuffer, uintptr, uintptr)) uint
21412179 }
21422180 cbRefPtr := purego.NewCallback(fcb)
21432181 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2144- return gobject.SignalConnect(x.GoPointer(), "mark-set", cbRefPtr)
2182+ handlerID := gobject.SignalConnect(x.GoPointer(), "mark-set", cbRefPtr)
2183+ glib.SaveHandlerMapping(handlerID, cbPtr)
2184+ return handlerID
21452185 }
21462186
21472187 // Emitted when the modified bit of a `GtkTextBuffer` flips.
21482188 //
21492189 // See also: [method@Gtk.TextBuffer.set_modified].
2150-func (x *TextBuffer) ConnectModifiedChanged(cb *func(TextBuffer)) uint32 {
2190+func (x *TextBuffer) ConnectModifiedChanged(cb *func(TextBuffer)) uint {
21512191 cbPtr := uintptr(unsafe.Pointer(cb))
21522192 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2153- return gobject.SignalConnect(x.GoPointer(), "modified-changed", cbRefPtr)
2193+ handlerID := gobject.SignalConnect(x.GoPointer(), "modified-changed", cbRefPtr)
2194+ glib.SaveHandlerMapping(handlerID, cbPtr)
2195+ return handlerID
21542196 }
21552197
21562198 fcb := func(clsPtr uintptr) {
@@ -2163,7 +2205,9 @@ func (x *TextBuffer) ConnectModifiedChanged(cb *func(TextBuffer)) uint32 {
21632205 }
21642206 cbRefPtr := purego.NewCallback(fcb)
21652207 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2166- return gobject.SignalConnect(x.GoPointer(), "modified-changed", cbRefPtr)
2208+ handlerID := gobject.SignalConnect(x.GoPointer(), "modified-changed", cbRefPtr)
2209+ glib.SaveHandlerMapping(handlerID, cbPtr)
2210+ return handlerID
21672211 }
21682212
21692213 // Emitted after paste operation has been completed.
@@ -2171,10 +2215,12 @@ func (x *TextBuffer) ConnectModifiedChanged(cb *func(TextBuffer)) uint32 {
21712215 // This is useful to properly scroll the view to the end
21722216 // of the pasted text. See [method@Gtk.TextBuffer.paste_clipboard]
21732217 // for more details.
2174-func (x *TextBuffer) ConnectPasteDone(cb *func(TextBuffer, uintptr)) uint32 {
2218+func (x *TextBuffer) ConnectPasteDone(cb *func(TextBuffer, uintptr)) uint {
21752219 cbPtr := uintptr(unsafe.Pointer(cb))
21762220 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2177- return gobject.SignalConnect(x.GoPointer(), "paste-done", cbRefPtr)
2221+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-done", cbRefPtr)
2222+ glib.SaveHandlerMapping(handlerID, cbPtr)
2223+ return handlerID
21782224 }
21792225
21802226 fcb := func(clsPtr uintptr, ClipboardVarp uintptr) {
@@ -2187,15 +2233,19 @@ func (x *TextBuffer) ConnectPasteDone(cb *func(TextBuffer, uintptr)) uint32 {
21872233 }
21882234 cbRefPtr := purego.NewCallback(fcb)
21892235 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2190- return gobject.SignalConnect(x.GoPointer(), "paste-done", cbRefPtr)
2236+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-done", cbRefPtr)
2237+ glib.SaveHandlerMapping(handlerID, cbPtr)
2238+ return handlerID
21912239 }
21922240
21932241 // Emitted when a request has been made to redo the
21942242 // previously undone operation.
2195-func (x *TextBuffer) ConnectRedo(cb *func(TextBuffer)) uint32 {
2243+func (x *TextBuffer) ConnectRedo(cb *func(TextBuffer)) uint {
21962244 cbPtr := uintptr(unsafe.Pointer(cb))
21972245 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2198- return gobject.SignalConnect(x.GoPointer(), "redo", cbRefPtr)
2246+ handlerID := gobject.SignalConnect(x.GoPointer(), "redo", cbRefPtr)
2247+ glib.SaveHandlerMapping(handlerID, cbPtr)
2248+ return handlerID
21992249 }
22002250
22012251 fcb := func(clsPtr uintptr) {
@@ -2208,7 +2258,9 @@ func (x *TextBuffer) ConnectRedo(cb *func(TextBuffer)) uint32 {
22082258 }
22092259 cbRefPtr := purego.NewCallback(fcb)
22102260 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2211- return gobject.SignalConnect(x.GoPointer(), "redo", cbRefPtr)
2261+ handlerID := gobject.SignalConnect(x.GoPointer(), "redo", cbRefPtr)
2262+ glib.SaveHandlerMapping(handlerID, cbPtr)
2263+ return handlerID
22122264 }
22132265
22142266 // Emitted to remove all occurrences of @tag from a range
@@ -2221,10 +2273,12 @@ func (x *TextBuffer) ConnectRedo(cb *func(TextBuffer)) uint32 {
22212273 // to revalidate them).
22222274 //
22232275 // See also: [method@Gtk.TextBuffer.remove_tag].
2224-func (x *TextBuffer) ConnectRemoveTag(cb *func(TextBuffer, uintptr, uintptr, uintptr)) uint32 {
2276+func (x *TextBuffer) ConnectRemoveTag(cb *func(TextBuffer, uintptr, uintptr, uintptr)) uint {
22252277 cbPtr := uintptr(unsafe.Pointer(cb))
22262278 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2227- return gobject.SignalConnect(x.GoPointer(), "remove-tag", cbRefPtr)
2279+ handlerID := gobject.SignalConnect(x.GoPointer(), "remove-tag", cbRefPtr)
2280+ glib.SaveHandlerMapping(handlerID, cbPtr)
2281+ return handlerID
22282282 }
22292283
22302284 fcb := func(clsPtr uintptr, TagVarp uintptr, StartVarp uintptr, EndVarp uintptr) {
@@ -2237,16 +2291,20 @@ func (x *TextBuffer) ConnectRemoveTag(cb *func(TextBuffer, uintptr, uintptr, uin
22372291 }
22382292 cbRefPtr := purego.NewCallback(fcb)
22392293 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2240- return gobject.SignalConnect(x.GoPointer(), "remove-tag", cbRefPtr)
2294+ handlerID := gobject.SignalConnect(x.GoPointer(), "remove-tag", cbRefPtr)
2295+ glib.SaveHandlerMapping(handlerID, cbPtr)
2296+ return handlerID
22412297 }
22422298
22432299 // Emitted when a request has been made to undo the
22442300 // previous operation or set of operations that have
22452301 // been grouped together.
2246-func (x *TextBuffer) ConnectUndo(cb *func(TextBuffer)) uint32 {
2302+func (x *TextBuffer) ConnectUndo(cb *func(TextBuffer)) uint {
22472303 cbPtr := uintptr(unsafe.Pointer(cb))
22482304 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2249- return gobject.SignalConnect(x.GoPointer(), "undo", cbRefPtr)
2305+ handlerID := gobject.SignalConnect(x.GoPointer(), "undo", cbRefPtr)
2306+ glib.SaveHandlerMapping(handlerID, cbPtr)
2307+ return handlerID
22502308 }
22512309
22522310 fcb := func(clsPtr uintptr) {
@@ -2259,7 +2317,9 @@ func (x *TextBuffer) ConnectUndo(cb *func(TextBuffer)) uint32 {
22592317 }
22602318 cbRefPtr := purego.NewCallback(fcb)
22612319 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2262- return gobject.SignalConnect(x.GoPointer(), "undo", cbRefPtr)
2320+ handlerID := gobject.SignalConnect(x.GoPointer(), "undo", cbRefPtr)
2321+ glib.SaveHandlerMapping(handlerID, cbPtr)
2322+ return handlerID
22632323 }
22642324
22652325 func init() {
M v4/gtk/gtktexttagtable.go +21 -9
@@ -167,10 +167,12 @@ func (c *TextTagTable) SetGoPointer(ptr uintptr) {
167167 }
168168
169169 // Emitted every time a new tag is added in the `GtkTextTagTable`.
170-func (x *TextTagTable) ConnectTagAdded(cb *func(TextTagTable, uintptr)) uint32 {
170+func (x *TextTagTable) ConnectTagAdded(cb *func(TextTagTable, uintptr)) uint {
171171 cbPtr := uintptr(unsafe.Pointer(cb))
172172 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
173- return gobject.SignalConnect(x.GoPointer(), "tag-added", cbRefPtr)
173+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-added", cbRefPtr)
174+ glib.SaveHandlerMapping(handlerID, cbPtr)
175+ return handlerID
174176 }
175177
176178 fcb := func(clsPtr uintptr, TagVarp uintptr) {
@@ -183,14 +185,18 @@ func (x *TextTagTable) ConnectTagAdded(cb *func(TextTagTable, uintptr)) uint32 {
183185 }
184186 cbRefPtr := purego.NewCallback(fcb)
185187 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
186- return gobject.SignalConnect(x.GoPointer(), "tag-added", cbRefPtr)
188+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-added", cbRefPtr)
189+ glib.SaveHandlerMapping(handlerID, cbPtr)
190+ return handlerID
187191 }
188192
189193 // Emitted every time a tag in the `GtkTextTagTable` changes.
190-func (x *TextTagTable) ConnectTagChanged(cb *func(TextTagTable, uintptr, bool)) uint32 {
194+func (x *TextTagTable) ConnectTagChanged(cb *func(TextTagTable, uintptr, bool)) uint {
191195 cbPtr := uintptr(unsafe.Pointer(cb))
192196 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
193- return gobject.SignalConnect(x.GoPointer(), "tag-changed", cbRefPtr)
197+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-changed", cbRefPtr)
198+ glib.SaveHandlerMapping(handlerID, cbPtr)
199+ return handlerID
194200 }
195201
196202 fcb := func(clsPtr uintptr, TagVarp uintptr, SizeChangedVarp bool) {
@@ -203,17 +209,21 @@ func (x *TextTagTable) ConnectTagChanged(cb *func(TextTagTable, uintptr, bool))
203209 }
204210 cbRefPtr := purego.NewCallback(fcb)
205211 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
206- return gobject.SignalConnect(x.GoPointer(), "tag-changed", cbRefPtr)
212+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-changed", cbRefPtr)
213+ glib.SaveHandlerMapping(handlerID, cbPtr)
214+ return handlerID
207215 }
208216
209217 // Emitted every time a tag is removed from the `GtkTextTagTable`.
210218 //
211219 // The @tag is still valid by the time the signal is emitted, but
212220 // it is not associated with a tag table any more.
213-func (x *TextTagTable) ConnectTagRemoved(cb *func(TextTagTable, uintptr)) uint32 {
221+func (x *TextTagTable) ConnectTagRemoved(cb *func(TextTagTable, uintptr)) uint {
214222 cbPtr := uintptr(unsafe.Pointer(cb))
215223 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
216- return gobject.SignalConnect(x.GoPointer(), "tag-removed", cbRefPtr)
224+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-removed", cbRefPtr)
225+ glib.SaveHandlerMapping(handlerID, cbPtr)
226+ return handlerID
217227 }
218228
219229 fcb := func(clsPtr uintptr, TagVarp uintptr) {
@@ -226,7 +236,9 @@ func (x *TextTagTable) ConnectTagRemoved(cb *func(TextTagTable, uintptr)) uint32
226236 }
227237 cbRefPtr := purego.NewCallback(fcb)
228238 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
229- return gobject.SignalConnect(x.GoPointer(), "tag-removed", cbRefPtr)
239+ handlerID := gobject.SignalConnect(x.GoPointer(), "tag-removed", cbRefPtr)
240+ glib.SaveHandlerMapping(handlerID, cbPtr)
241+ return handlerID
230242 }
231243
232244 // Gets the ID of the @buildable object.
M v4/gtk/gtktextview.go +105 -45
@@ -2003,10 +2003,12 @@ func (x *TextView) GetPropertyTopMargin() int {
20032003 //
20042004 // The default bindings for this signal are
20052005 // &lt;kbd&gt;Backspace&lt;/kbd&gt; and &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Backspace&lt;/kbd&gt;.
2006-func (x *TextView) ConnectBackspace(cb *func(TextView)) uint32 {
2006+func (x *TextView) ConnectBackspace(cb *func(TextView)) uint {
20072007 cbPtr := uintptr(unsafe.Pointer(cb))
20082008 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2009- return gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
2009+ handlerID := gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
2010+ glib.SaveHandlerMapping(handlerID, cbPtr)
2011+ return handlerID
20102012 }
20112013
20122014 fcb := func(clsPtr uintptr) {
@@ -2019,7 +2021,9 @@ func (x *TextView) ConnectBackspace(cb *func(TextView)) uint32 {
20192021 }
20202022 cbRefPtr := purego.NewCallback(fcb)
20212023 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2022- return gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
2024+ handlerID := gobject.SignalConnect(x.GoPointer(), "backspace", cbRefPtr)
2025+ glib.SaveHandlerMapping(handlerID, cbPtr)
2026+ return handlerID
20232027 }
20242028
20252029 // Gets emitted to copy the selection to the clipboard.
@@ -2029,10 +2033,12 @@ func (x *TextView) ConnectBackspace(cb *func(TextView)) uint32 {
20292033 // The default bindings for this signal are
20302034 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;c&lt;/kbd&gt; and
20312035 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Insert&lt;/kbd&gt;.
2032-func (x *TextView) ConnectCopyClipboard(cb *func(TextView)) uint32 {
2036+func (x *TextView) ConnectCopyClipboard(cb *func(TextView)) uint {
20332037 cbPtr := uintptr(unsafe.Pointer(cb))
20342038 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2035- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
2039+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
2040+ glib.SaveHandlerMapping(handlerID, cbPtr)
2041+ return handlerID
20362042 }
20372043
20382044 fcb := func(clsPtr uintptr) {
@@ -2045,7 +2051,9 @@ func (x *TextView) ConnectCopyClipboard(cb *func(TextView)) uint32 {
20452051 }
20462052 cbRefPtr := purego.NewCallback(fcb)
20472053 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2048- return gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
2054+ handlerID := gobject.SignalConnect(x.GoPointer(), "copy-clipboard", cbRefPtr)
2055+ glib.SaveHandlerMapping(handlerID, cbPtr)
2056+ return handlerID
20492057 }
20502058
20512059 // Gets emitted to cut the selection to the clipboard.
@@ -2055,10 +2063,12 @@ func (x *TextView) ConnectCopyClipboard(cb *func(TextView)) uint32 {
20552063 // The default bindings for this signal are
20562064 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;x&lt;/kbd&gt; and
20572065 // &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Delete&lt;/kbd&gt;.
2058-func (x *TextView) ConnectCutClipboard(cb *func(TextView)) uint32 {
2066+func (x *TextView) ConnectCutClipboard(cb *func(TextView)) uint {
20592067 cbPtr := uintptr(unsafe.Pointer(cb))
20602068 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2061- return gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
2069+ handlerID := gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
2070+ glib.SaveHandlerMapping(handlerID, cbPtr)
2071+ return handlerID
20622072 }
20632073
20642074 fcb := func(clsPtr uintptr) {
@@ -2071,7 +2081,9 @@ func (x *TextView) ConnectCutClipboard(cb *func(TextView)) uint32 {
20712081 }
20722082 cbRefPtr := purego.NewCallback(fcb)
20732083 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2074- return gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
2084+ handlerID := gobject.SignalConnect(x.GoPointer(), "cut-clipboard", cbRefPtr)
2085+ glib.SaveHandlerMapping(handlerID, cbPtr)
2086+ return handlerID
20752087 }
20762088
20772089 // Gets emitted when the user initiates a text deletion.
@@ -2086,10 +2098,12 @@ func (x *TextView) ConnectCutClipboard(cb *func(TextView)) uint32 {
20862098 // deleting a character, &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Delete&lt;/kbd&gt; for
20872099 // deleting a word and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Backspace&lt;/kbd&gt; for
20882100 // deleting a word backwards.
2089-func (x *TextView) ConnectDeleteFromCursor(cb *func(TextView, DeleteType, int)) uint32 {
2101+func (x *TextView) ConnectDeleteFromCursor(cb *func(TextView, DeleteType, int)) uint {
20902102 cbPtr := uintptr(unsafe.Pointer(cb))
20912103 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2092- return gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
2104+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
2105+ glib.SaveHandlerMapping(handlerID, cbPtr)
2106+ return handlerID
20932107 }
20942108
20952109 fcb := func(clsPtr uintptr, TypeVarp DeleteType, CountVarp int) {
@@ -2102,14 +2116,18 @@ func (x *TextView) ConnectDeleteFromCursor(cb *func(TextView, DeleteType, int))
21022116 }
21032117 cbRefPtr := purego.NewCallback(fcb)
21042118 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2105- return gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
2119+ handlerID := gobject.SignalConnect(x.GoPointer(), "delete-from-cursor", cbRefPtr)
2120+ glib.SaveHandlerMapping(handlerID, cbPtr)
2121+ return handlerID
21062122 }
21072123
21082124 // Emitted when the selection needs to be extended at @location.
2109-func (x *TextView) ConnectExtendSelection(cb *func(TextView, TextExtendSelection, uintptr, uintptr, uintptr) bool) uint32 {
2125+func (x *TextView) ConnectExtendSelection(cb *func(TextView, TextExtendSelection, uintptr, uintptr, uintptr) bool) uint {
21102126 cbPtr := uintptr(unsafe.Pointer(cb))
21112127 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2112- return gobject.SignalConnect(x.GoPointer(), "extend-selection", cbRefPtr)
2128+ handlerID := gobject.SignalConnect(x.GoPointer(), "extend-selection", cbRefPtr)
2129+ glib.SaveHandlerMapping(handlerID, cbPtr)
2130+ return handlerID
21132131 }
21142132
21152133 fcb := func(clsPtr uintptr, GranularityVarp TextExtendSelection, LocationVarp uintptr, StartVarp uintptr, EndVarp uintptr) bool {
@@ -2122,7 +2140,9 @@ func (x *TextView) ConnectExtendSelection(cb *func(TextView, TextExtendSelection
21222140 }
21232141 cbRefPtr := purego.NewCallback(fcb)
21242142 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2125- return gobject.SignalConnect(x.GoPointer(), "extend-selection", cbRefPtr)
2143+ handlerID := gobject.SignalConnect(x.GoPointer(), "extend-selection", cbRefPtr)
2144+ glib.SaveHandlerMapping(handlerID, cbPtr)
2145+ return handlerID
21262146 }
21272147
21282148 // Gets emitted when the user initiates the insertion of a
@@ -2131,10 +2151,12 @@ func (x *TextView) ConnectExtendSelection(cb *func(TextView, TextExtendSelection
21312151 // The ::insert-at-cursor signal is a [keybinding signal](class.SignalAction.html).
21322152 //
21332153 // This signal has no default bindings.
2134-func (x *TextView) ConnectInsertAtCursor(cb *func(TextView, string)) uint32 {
2154+func (x *TextView) ConnectInsertAtCursor(cb *func(TextView, string)) uint {
21352155 cbPtr := uintptr(unsafe.Pointer(cb))
21362156 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2137- return gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
2157+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
2158+ glib.SaveHandlerMapping(handlerID, cbPtr)
2159+ return handlerID
21382160 }
21392161
21402162 fcb := func(clsPtr uintptr, StringVarp string) {
@@ -2147,7 +2169,9 @@ func (x *TextView) ConnectInsertAtCursor(cb *func(TextView, string)) uint32 {
21472169 }
21482170 cbRefPtr := purego.NewCallback(fcb)
21492171 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2150- return gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
2172+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-at-cursor", cbRefPtr)
2173+ glib.SaveHandlerMapping(handlerID, cbPtr)
2174+ return handlerID
21512175 }
21522176
21532177 // Gets emitted to present the Emoji chooser for the @text_view.
@@ -2157,10 +2181,12 @@ func (x *TextView) ConnectInsertAtCursor(cb *func(TextView, string)) uint32 {
21572181 // The default bindings for this signal are
21582182 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;.&lt;/kbd&gt; and
21592183 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;;&lt;/kbd&gt;
2160-func (x *TextView) ConnectInsertEmoji(cb *func(TextView)) uint32 {
2184+func (x *TextView) ConnectInsertEmoji(cb *func(TextView)) uint {
21612185 cbPtr := uintptr(unsafe.Pointer(cb))
21622186 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2163- return gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
2187+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
2188+ glib.SaveHandlerMapping(handlerID, cbPtr)
2189+ return handlerID
21642190 }
21652191
21662192 fcb := func(clsPtr uintptr) {
@@ -2173,7 +2199,9 @@ func (x *TextView) ConnectInsertEmoji(cb *func(TextView)) uint32 {
21732199 }
21742200 cbRefPtr := purego.NewCallback(fcb)
21752201 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2176- return gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
2202+ handlerID := gobject.SignalConnect(x.GoPointer(), "insert-emoji", cbRefPtr)
2203+ glib.SaveHandlerMapping(handlerID, cbPtr)
2204+ return handlerID
21772205 }
21782206
21792207 // Gets emitted when the user initiates a cursor movement.
@@ -2198,10 +2226,12 @@ func (x *TextView) ConnectInsertEmoji(cb *func(TextView)) uint32 {
21982226 // - &lt;kbd&gt;PgUp&lt;/kbd&gt; and &lt;kbd&gt;PgDn&lt;/kbd&gt; move vertically by pages
21992227 // - &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgUp&lt;/kbd&gt; and &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;PgDn&lt;/kbd&gt;
22002228 // move horizontally by pages
2201-func (x *TextView) ConnectMoveCursor(cb *func(TextView, MovementStep, int, bool)) uint32 {
2229+func (x *TextView) ConnectMoveCursor(cb *func(TextView, MovementStep, int, bool)) uint {
22022230 cbPtr := uintptr(unsafe.Pointer(cb))
22032231 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2204- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2232+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2233+ glib.SaveHandlerMapping(handlerID, cbPtr)
2234+ return handlerID
22052235 }
22062236
22072237 fcb := func(clsPtr uintptr, StepVarp MovementStep, CountVarp int, ExtendSelectionVarp bool) {
@@ -2214,7 +2244,9 @@ func (x *TextView) ConnectMoveCursor(cb *func(TextView, MovementStep, int, bool)
22142244 }
22152245 cbRefPtr := purego.NewCallback(fcb)
22162246 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2217- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2247+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2248+ glib.SaveHandlerMapping(handlerID, cbPtr)
2249+ return handlerID
22182250 }
22192251
22202252 // Gets emitted to move the viewport.
@@ -2225,10 +2257,12 @@ func (x *TextView) ConnectMoveCursor(cb *func(TextView, MovementStep, int, bool)
22252257 // window.
22262258 //
22272259 // There are no default bindings for this signal.
2228-func (x *TextView) ConnectMoveViewport(cb *func(TextView, ScrollStep, int)) uint32 {
2260+func (x *TextView) ConnectMoveViewport(cb *func(TextView, ScrollStep, int)) uint {
22292261 cbPtr := uintptr(unsafe.Pointer(cb))
22302262 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2231- return gobject.SignalConnect(x.GoPointer(), "move-viewport", cbRefPtr)
2263+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-viewport", cbRefPtr)
2264+ glib.SaveHandlerMapping(handlerID, cbPtr)
2265+ return handlerID
22322266 }
22332267
22342268 fcb := func(clsPtr uintptr, StepVarp ScrollStep, CountVarp int) {
@@ -2241,7 +2275,9 @@ func (x *TextView) ConnectMoveViewport(cb *func(TextView, ScrollStep, int)) uint
22412275 }
22422276 cbRefPtr := purego.NewCallback(fcb)
22432277 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2244- return gobject.SignalConnect(x.GoPointer(), "move-viewport", cbRefPtr)
2278+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-viewport", cbRefPtr)
2279+ glib.SaveHandlerMapping(handlerID, cbPtr)
2280+ return handlerID
22452281 }
22462282
22472283 // Gets emitted to paste the contents of the clipboard
@@ -2252,10 +2288,12 @@ func (x *TextView) ConnectMoveViewport(cb *func(TextView, ScrollStep, int)) uint
22522288 // The default bindings for this signal are
22532289 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;v&lt;/kbd&gt; and
22542290 // &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Insert&lt;/kbd&gt;.
2255-func (x *TextView) ConnectPasteClipboard(cb *func(TextView)) uint32 {
2291+func (x *TextView) ConnectPasteClipboard(cb *func(TextView)) uint {
22562292 cbPtr := uintptr(unsafe.Pointer(cb))
22572293 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2258- return gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
2294+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
2295+ glib.SaveHandlerMapping(handlerID, cbPtr)
2296+ return handlerID
22592297 }
22602298
22612299 fcb := func(clsPtr uintptr) {
@@ -2268,7 +2306,9 @@ func (x *TextView) ConnectPasteClipboard(cb *func(TextView)) uint32 {
22682306 }
22692307 cbRefPtr := purego.NewCallback(fcb)
22702308 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2271- return gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
2309+ handlerID := gobject.SignalConnect(x.GoPointer(), "paste-clipboard", cbRefPtr)
2310+ glib.SaveHandlerMapping(handlerID, cbPtr)
2311+ return handlerID
22722312 }
22732313
22742314 // Emitted when preedit text of the active IM changes.
@@ -2279,10 +2319,12 @@ func (x *TextView) ConnectPasteClipboard(cb *func(TextView)) uint32 {
22792319 //
22802320 // This signal is only emitted if the text at the given position
22812321 // is actually editable.
2282-func (x *TextView) ConnectPreeditChanged(cb *func(TextView, string)) uint32 {
2322+func (x *TextView) ConnectPreeditChanged(cb *func(TextView, string)) uint {
22832323 cbPtr := uintptr(unsafe.Pointer(cb))
22842324 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2285- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
2325+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
2326+ glib.SaveHandlerMapping(handlerID, cbPtr)
2327+ return handlerID
22862328 }
22872329
22882330 fcb := func(clsPtr uintptr, PreeditVarp string) {
@@ -2295,7 +2337,9 @@ func (x *TextView) ConnectPreeditChanged(cb *func(TextView, string)) uint32 {
22952337 }
22962338 cbRefPtr := purego.NewCallback(fcb)
22972339 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2298- return gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
2340+ handlerID := gobject.SignalConnect(x.GoPointer(), "preedit-changed", cbRefPtr)
2341+ glib.SaveHandlerMapping(handlerID, cbPtr)
2342+ return handlerID
22992343 }
23002344
23012345 // Gets emitted to select or unselect the complete contents of the text view.
@@ -2307,10 +2351,12 @@ func (x *TextView) ConnectPreeditChanged(cb *func(TextView, string)) uint32 {
23072351 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;/&lt;/kbd&gt; for selecting and
23082352 // &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;a&lt;/kbd&gt; and
23092353 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;\&lt;/kbd&gt; for unselecting.
2310-func (x *TextView) ConnectSelectAll(cb *func(TextView, bool)) uint32 {
2354+func (x *TextView) ConnectSelectAll(cb *func(TextView, bool)) uint {
23112355 cbPtr := uintptr(unsafe.Pointer(cb))
23122356 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2313- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2357+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2358+ glib.SaveHandlerMapping(handlerID, cbPtr)
2359+ return handlerID
23142360 }
23152361
23162362 fcb := func(clsPtr uintptr, SelectVarp bool) {
@@ -2323,7 +2369,9 @@ func (x *TextView) ConnectSelectAll(cb *func(TextView, bool)) uint32 {
23232369 }
23242370 cbRefPtr := purego.NewCallback(fcb)
23252371 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2326- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2372+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2373+ glib.SaveHandlerMapping(handlerID, cbPtr)
2374+ return handlerID
23272375 }
23282376
23292377 // Gets emitted when the user initiates settings the "anchor" mark.
@@ -2334,10 +2382,12 @@ func (x *TextView) ConnectSelectAll(cb *func(TextView, bool)) uint32 {
23342382 // "insert" mark.
23352383 //
23362384 // This signal has no default bindings.
2337-func (x *TextView) ConnectSetAnchor(cb *func(TextView)) uint32 {
2385+func (x *TextView) ConnectSetAnchor(cb *func(TextView)) uint {
23382386 cbPtr := uintptr(unsafe.Pointer(cb))
23392387 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2340- return gobject.SignalConnect(x.GoPointer(), "set-anchor", cbRefPtr)
2388+ handlerID := gobject.SignalConnect(x.GoPointer(), "set-anchor", cbRefPtr)
2389+ glib.SaveHandlerMapping(handlerID, cbPtr)
2390+ return handlerID
23412391 }
23422392
23432393 fcb := func(clsPtr uintptr) {
@@ -2350,7 +2400,9 @@ func (x *TextView) ConnectSetAnchor(cb *func(TextView)) uint32 {
23502400 }
23512401 cbRefPtr := purego.NewCallback(fcb)
23522402 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2353- return gobject.SignalConnect(x.GoPointer(), "set-anchor", cbRefPtr)
2403+ handlerID := gobject.SignalConnect(x.GoPointer(), "set-anchor", cbRefPtr)
2404+ glib.SaveHandlerMapping(handlerID, cbPtr)
2405+ return handlerID
23542406 }
23552407
23562408 // Gets emitted to toggle the `cursor-visible` property.
@@ -2359,10 +2411,12 @@ func (x *TextView) ConnectSetAnchor(cb *func(TextView)) uint32 {
23592411 // [keybinding signal](class.SignalAction.html).
23602412 //
23612413 // The default binding for this signal is &lt;kbd&gt;F7&lt;/kbd&gt;.
2362-func (x *TextView) ConnectToggleCursorVisible(cb *func(TextView)) uint32 {
2414+func (x *TextView) ConnectToggleCursorVisible(cb *func(TextView)) uint {
23632415 cbPtr := uintptr(unsafe.Pointer(cb))
23642416 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2365- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-visible", cbRefPtr)
2417+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-visible", cbRefPtr)
2418+ glib.SaveHandlerMapping(handlerID, cbPtr)
2419+ return handlerID
23662420 }
23672421
23682422 fcb := func(clsPtr uintptr) {
@@ -2375,7 +2429,9 @@ func (x *TextView) ConnectToggleCursorVisible(cb *func(TextView)) uint32 {
23752429 }
23762430 cbRefPtr := purego.NewCallback(fcb)
23772431 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2378- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-visible", cbRefPtr)
2432+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-visible", cbRefPtr)
2433+ glib.SaveHandlerMapping(handlerID, cbPtr)
2434+ return handlerID
23792435 }
23802436
23812437 // Gets emitted to toggle the overwrite mode of the text view.
@@ -2383,10 +2439,12 @@ func (x *TextView) ConnectToggleCursorVisible(cb *func(TextView)) uint32 {
23832439 // The ::toggle-overwrite signal is a [keybinding signal](class.SignalAction.html).
23842440 //
23852441 // The default binding for this signal is &lt;kbd&gt;Insert&lt;/kbd&gt;.
2386-func (x *TextView) ConnectToggleOverwrite(cb *func(TextView)) uint32 {
2442+func (x *TextView) ConnectToggleOverwrite(cb *func(TextView)) uint {
23872443 cbPtr := uintptr(unsafe.Pointer(cb))
23882444 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2389- return gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
2445+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
2446+ glib.SaveHandlerMapping(handlerID, cbPtr)
2447+ return handlerID
23902448 }
23912449
23922450 fcb := func(clsPtr uintptr) {
@@ -2399,7 +2457,9 @@ func (x *TextView) ConnectToggleOverwrite(cb *func(TextView)) uint32 {
23992457 }
24002458 cbRefPtr := purego.NewCallback(fcb)
24012459 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2402- return gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
2460+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-overwrite", cbRefPtr)
2461+ glib.SaveHandlerMapping(handlerID, cbPtr)
2462+ return handlerID
24032463 }
24042464
24052465 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtktogglebutton.go +7 -3
@@ -289,10 +289,12 @@ func (x *ToggleButton) GetPropertyActive() bool {
289289 }
290290
291291 // Emitted whenever the `GtkToggleButton`'s state is changed.
292-func (x *ToggleButton) ConnectToggled(cb *func(ToggleButton)) uint32 {
292+func (x *ToggleButton) ConnectToggled(cb *func(ToggleButton)) uint {
293293 cbPtr := uintptr(unsafe.Pointer(cb))
294294 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
295- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
295+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
296+ glib.SaveHandlerMapping(handlerID, cbPtr)
297+ return handlerID
296298 }
297299
298300 fcb := func(clsPtr uintptr) {
@@ -305,7 +307,9 @@ func (x *ToggleButton) ConnectToggled(cb *func(ToggleButton)) uint32 {
305307 }
306308 cbRefPtr := purego.NewCallback(fcb)
307309 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
308- return gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
310+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggled", cbRefPtr)
311+ glib.SaveHandlerMapping(handlerID, cbPtr)
312+ return handlerID
309313 }
310314
311315 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtktreeselection.go +7 -3
@@ -347,10 +347,12 @@ func (c *TreeSelection) SetGoPointer(ptr uintptr) {
347347 // this signal is mostly a hint. It may only be emitted once when a range
348348 // of rows are selected, and it may occasionally be emitted when nothing
349349 // has happened.
350-func (x *TreeSelection) ConnectChanged(cb *func(TreeSelection)) uint32 {
350+func (x *TreeSelection) ConnectChanged(cb *func(TreeSelection)) uint {
351351 cbPtr := uintptr(unsafe.Pointer(cb))
352352 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
353- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
353+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
354+ glib.SaveHandlerMapping(handlerID, cbPtr)
355+ return handlerID
354356 }
355357
356358 fcb := func(clsPtr uintptr) {
@@ -363,7 +365,9 @@ func (x *TreeSelection) ConnectChanged(cb *func(TreeSelection)) uint32 {
363365 }
364366 cbRefPtr := purego.NewCallback(fcb)
365367 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
366- return gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
368+ handlerID := gobject.SignalConnect(x.GoPointer(), "changed", cbRefPtr)
369+ glib.SaveHandlerMapping(handlerID, cbPtr)
370+ return handlerID
367371 }
368372
369373 func init() {
M v4/gtk/gtktreeview.go +105 -45
@@ -2123,10 +2123,12 @@ func (x *TreeView) GetPropertyTooltipColumn() int {
21232123 }
21242124
21252125 // The number of columns of the treeview has changed.
2126-func (x *TreeView) ConnectColumnsChanged(cb *func(TreeView)) uint32 {
2126+func (x *TreeView) ConnectColumnsChanged(cb *func(TreeView)) uint {
21272127 cbPtr := uintptr(unsafe.Pointer(cb))
21282128 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2129- return gobject.SignalConnect(x.GoPointer(), "columns-changed", cbRefPtr)
2129+ handlerID := gobject.SignalConnect(x.GoPointer(), "columns-changed", cbRefPtr)
2130+ glib.SaveHandlerMapping(handlerID, cbPtr)
2131+ return handlerID
21302132 }
21312133
21322134 fcb := func(clsPtr uintptr) {
@@ -2139,14 +2141,18 @@ func (x *TreeView) ConnectColumnsChanged(cb *func(TreeView)) uint32 {
21392141 }
21402142 cbRefPtr := purego.NewCallback(fcb)
21412143 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2142- return gobject.SignalConnect(x.GoPointer(), "columns-changed", cbRefPtr)
2144+ handlerID := gobject.SignalConnect(x.GoPointer(), "columns-changed", cbRefPtr)
2145+ glib.SaveHandlerMapping(handlerID, cbPtr)
2146+ return handlerID
21432147 }
21442148
21452149 // The position of the cursor (focused cell) has changed.
2146-func (x *TreeView) ConnectCursorChanged(cb *func(TreeView)) uint32 {
2150+func (x *TreeView) ConnectCursorChanged(cb *func(TreeView)) uint {
21472151 cbPtr := uintptr(unsafe.Pointer(cb))
21482152 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2149- return gobject.SignalConnect(x.GoPointer(), "cursor-changed", cbRefPtr)
2153+ handlerID := gobject.SignalConnect(x.GoPointer(), "cursor-changed", cbRefPtr)
2154+ glib.SaveHandlerMapping(handlerID, cbPtr)
2155+ return handlerID
21502156 }
21512157
21522158 fcb := func(clsPtr uintptr) {
@@ -2159,13 +2165,17 @@ func (x *TreeView) ConnectCursorChanged(cb *func(TreeView)) uint32 {
21592165 }
21602166 cbRefPtr := purego.NewCallback(fcb)
21612167 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2162- return gobject.SignalConnect(x.GoPointer(), "cursor-changed", cbRefPtr)
2168+ handlerID := gobject.SignalConnect(x.GoPointer(), "cursor-changed", cbRefPtr)
2169+ glib.SaveHandlerMapping(handlerID, cbPtr)
2170+ return handlerID
21632171 }
21642172
2165-func (x *TreeView) ConnectExpandCollapseCursorRow(cb *func(TreeView, bool, bool, bool) bool) uint32 {
2173+func (x *TreeView) ConnectExpandCollapseCursorRow(cb *func(TreeView, bool, bool, bool) bool) uint {
21662174 cbPtr := uintptr(unsafe.Pointer(cb))
21672175 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2168- return gobject.SignalConnect(x.GoPointer(), "expand-collapse-cursor-row", cbRefPtr)
2176+ handlerID := gobject.SignalConnect(x.GoPointer(), "expand-collapse-cursor-row", cbRefPtr)
2177+ glib.SaveHandlerMapping(handlerID, cbPtr)
2178+ return handlerID
21692179 }
21702180
21712181 fcb := func(clsPtr uintptr, ObjectVarp bool, P0Varp bool, P1Varp bool) bool {
@@ -2178,7 +2188,9 @@ func (x *TreeView) ConnectExpandCollapseCursorRow(cb *func(TreeView, bool, bool,
21782188 }
21792189 cbRefPtr := purego.NewCallback(fcb)
21802190 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2181- return gobject.SignalConnect(x.GoPointer(), "expand-collapse-cursor-row", cbRefPtr)
2191+ handlerID := gobject.SignalConnect(x.GoPointer(), "expand-collapse-cursor-row", cbRefPtr)
2192+ glib.SaveHandlerMapping(handlerID, cbPtr)
2193+ return handlerID
21822194 }
21832195
21842196 // The `GtkTreeView`::move-cursor signal is a [keybinding
@@ -2190,10 +2202,12 @@ func (x *TreeView) ConnectExpandCollapseCursorRow(cb *func(TreeView, bool, bool,
21902202 // programmatically. In contrast to gtk_tree_view_set_cursor() and
21912203 // gtk_tree_view_set_cursor_on_cell() when moving horizontally
21922204 // `GtkTreeView`::move-cursor does not reset the current selection.
2193-func (x *TreeView) ConnectMoveCursor(cb *func(TreeView, MovementStep, int, bool, bool) bool) uint32 {
2205+func (x *TreeView) ConnectMoveCursor(cb *func(TreeView, MovementStep, int, bool, bool) bool) uint {
21942206 cbPtr := uintptr(unsafe.Pointer(cb))
21952207 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2196- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2208+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2209+ glib.SaveHandlerMapping(handlerID, cbPtr)
2210+ return handlerID
21972211 }
21982212
21992213 fcb := func(clsPtr uintptr, StepVarp MovementStep, DirectionVarp int, ExtendVarp bool, ModifyVarp bool) bool {
@@ -2206,7 +2220,9 @@ func (x *TreeView) ConnectMoveCursor(cb *func(TreeView, MovementStep, int, bool,
22062220 }
22072221 cbRefPtr := purego.NewCallback(fcb)
22082222 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2209- return gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2223+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-cursor", cbRefPtr)
2224+ glib.SaveHandlerMapping(handlerID, cbPtr)
2225+ return handlerID
22102226 }
22112227
22122228 // The "row-activated" signal is emitted when the method
@@ -2223,10 +2239,12 @@ func (x *TreeView) ConnectMoveCursor(cb *func(TreeView, MovementStep, int, bool,
22232239 // For selection handling refer to the
22242240 // [tree widget conceptual overview](section-tree-widget.html)
22252241 // as well as `GtkTreeSelection`.
2226-func (x *TreeView) ConnectRowActivated(cb *func(TreeView, uintptr, uintptr)) uint32 {
2242+func (x *TreeView) ConnectRowActivated(cb *func(TreeView, uintptr, uintptr)) uint {
22272243 cbPtr := uintptr(unsafe.Pointer(cb))
22282244 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2229- return gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
2245+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
2246+ glib.SaveHandlerMapping(handlerID, cbPtr)
2247+ return handlerID
22302248 }
22312249
22322250 fcb := func(clsPtr uintptr, PathVarp uintptr, ColumnVarp uintptr) {
@@ -2239,14 +2257,18 @@ func (x *TreeView) ConnectRowActivated(cb *func(TreeView, uintptr, uintptr)) uin
22392257 }
22402258 cbRefPtr := purego.NewCallback(fcb)
22412259 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2242- return gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
2260+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-activated", cbRefPtr)
2261+ glib.SaveHandlerMapping(handlerID, cbPtr)
2262+ return handlerID
22432263 }
22442264
22452265 // The given row has been collapsed (child nodes are hidden).
2246-func (x *TreeView) ConnectRowCollapsed(cb *func(TreeView, uintptr, uintptr)) uint32 {
2266+func (x *TreeView) ConnectRowCollapsed(cb *func(TreeView, uintptr, uintptr)) uint {
22472267 cbPtr := uintptr(unsafe.Pointer(cb))
22482268 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2249- return gobject.SignalConnect(x.GoPointer(), "row-collapsed", cbRefPtr)
2269+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-collapsed", cbRefPtr)
2270+ glib.SaveHandlerMapping(handlerID, cbPtr)
2271+ return handlerID
22502272 }
22512273
22522274 fcb := func(clsPtr uintptr, IterVarp uintptr, PathVarp uintptr) {
@@ -2259,14 +2281,18 @@ func (x *TreeView) ConnectRowCollapsed(cb *func(TreeView, uintptr, uintptr)) uin
22592281 }
22602282 cbRefPtr := purego.NewCallback(fcb)
22612283 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2262- return gobject.SignalConnect(x.GoPointer(), "row-collapsed", cbRefPtr)
2284+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-collapsed", cbRefPtr)
2285+ glib.SaveHandlerMapping(handlerID, cbPtr)
2286+ return handlerID
22632287 }
22642288
22652289 // The given row has been expanded (child nodes are shown).
2266-func (x *TreeView) ConnectRowExpanded(cb *func(TreeView, uintptr, uintptr)) uint32 {
2290+func (x *TreeView) ConnectRowExpanded(cb *func(TreeView, uintptr, uintptr)) uint {
22672291 cbPtr := uintptr(unsafe.Pointer(cb))
22682292 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2269- return gobject.SignalConnect(x.GoPointer(), "row-expanded", cbRefPtr)
2293+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-expanded", cbRefPtr)
2294+ glib.SaveHandlerMapping(handlerID, cbPtr)
2295+ return handlerID
22702296 }
22712297
22722298 fcb := func(clsPtr uintptr, IterVarp uintptr, PathVarp uintptr) {
@@ -2279,13 +2305,17 @@ func (x *TreeView) ConnectRowExpanded(cb *func(TreeView, uintptr, uintptr)) uint
22792305 }
22802306 cbRefPtr := purego.NewCallback(fcb)
22812307 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2282- return gobject.SignalConnect(x.GoPointer(), "row-expanded", cbRefPtr)
2308+ handlerID := gobject.SignalConnect(x.GoPointer(), "row-expanded", cbRefPtr)
2309+ glib.SaveHandlerMapping(handlerID, cbPtr)
2310+ return handlerID
22832311 }
22842312
2285-func (x *TreeView) ConnectSelectAll(cb *func(TreeView) bool) uint32 {
2313+func (x *TreeView) ConnectSelectAll(cb *func(TreeView) bool) uint {
22862314 cbPtr := uintptr(unsafe.Pointer(cb))
22872315 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2288- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2316+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2317+ glib.SaveHandlerMapping(handlerID, cbPtr)
2318+ return handlerID
22892319 }
22902320
22912321 fcb := func(clsPtr uintptr) bool {
@@ -2298,13 +2328,17 @@ func (x *TreeView) ConnectSelectAll(cb *func(TreeView) bool) uint32 {
22982328 }
22992329 cbRefPtr := purego.NewCallback(fcb)
23002330 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2301- return gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2331+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-all", cbRefPtr)
2332+ glib.SaveHandlerMapping(handlerID, cbPtr)
2333+ return handlerID
23022334 }
23032335
2304-func (x *TreeView) ConnectSelectCursorParent(cb *func(TreeView) bool) uint32 {
2336+func (x *TreeView) ConnectSelectCursorParent(cb *func(TreeView) bool) uint {
23052337 cbPtr := uintptr(unsafe.Pointer(cb))
23062338 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2307- return gobject.SignalConnect(x.GoPointer(), "select-cursor-parent", cbRefPtr)
2339+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-parent", cbRefPtr)
2340+ glib.SaveHandlerMapping(handlerID, cbPtr)
2341+ return handlerID
23082342 }
23092343
23102344 fcb := func(clsPtr uintptr) bool {
@@ -2317,13 +2351,17 @@ func (x *TreeView) ConnectSelectCursorParent(cb *func(TreeView) bool) uint32 {
23172351 }
23182352 cbRefPtr := purego.NewCallback(fcb)
23192353 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2320- return gobject.SignalConnect(x.GoPointer(), "select-cursor-parent", cbRefPtr)
2354+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-parent", cbRefPtr)
2355+ glib.SaveHandlerMapping(handlerID, cbPtr)
2356+ return handlerID
23212357 }
23222358
2323-func (x *TreeView) ConnectSelectCursorRow(cb *func(TreeView, bool) bool) uint32 {
2359+func (x *TreeView) ConnectSelectCursorRow(cb *func(TreeView, bool) bool) uint {
23242360 cbPtr := uintptr(unsafe.Pointer(cb))
23252361 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2326- return gobject.SignalConnect(x.GoPointer(), "select-cursor-row", cbRefPtr)
2362+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-row", cbRefPtr)
2363+ glib.SaveHandlerMapping(handlerID, cbPtr)
2364+ return handlerID
23272365 }
23282366
23292367 fcb := func(clsPtr uintptr, ObjectVarp bool) bool {
@@ -2336,13 +2374,17 @@ func (x *TreeView) ConnectSelectCursorRow(cb *func(TreeView, bool) bool) uint32
23362374 }
23372375 cbRefPtr := purego.NewCallback(fcb)
23382376 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2339- return gobject.SignalConnect(x.GoPointer(), "select-cursor-row", cbRefPtr)
2377+ handlerID := gobject.SignalConnect(x.GoPointer(), "select-cursor-row", cbRefPtr)
2378+ glib.SaveHandlerMapping(handlerID, cbPtr)
2379+ return handlerID
23402380 }
23412381
2342-func (x *TreeView) ConnectStartInteractiveSearch(cb *func(TreeView) bool) uint32 {
2382+func (x *TreeView) ConnectStartInteractiveSearch(cb *func(TreeView) bool) uint {
23432383 cbPtr := uintptr(unsafe.Pointer(cb))
23442384 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2345- return gobject.SignalConnect(x.GoPointer(), "start-interactive-search", cbRefPtr)
2385+ handlerID := gobject.SignalConnect(x.GoPointer(), "start-interactive-search", cbRefPtr)
2386+ glib.SaveHandlerMapping(handlerID, cbPtr)
2387+ return handlerID
23462388 }
23472389
23482390 fcb := func(clsPtr uintptr) bool {
@@ -2355,15 +2397,19 @@ func (x *TreeView) ConnectStartInteractiveSearch(cb *func(TreeView) bool) uint32
23552397 }
23562398 cbRefPtr := purego.NewCallback(fcb)
23572399 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2358- return gobject.SignalConnect(x.GoPointer(), "start-interactive-search", cbRefPtr)
2400+ handlerID := gobject.SignalConnect(x.GoPointer(), "start-interactive-search", cbRefPtr)
2401+ glib.SaveHandlerMapping(handlerID, cbPtr)
2402+ return handlerID
23592403 }
23602404
23612405 // The given row is about to be collapsed (hide its children nodes). Use this
23622406 // signal if you need to control the collapsibility of individual rows.
2363-func (x *TreeView) ConnectTestCollapseRow(cb *func(TreeView, uintptr, uintptr) bool) uint32 {
2407+func (x *TreeView) ConnectTestCollapseRow(cb *func(TreeView, uintptr, uintptr) bool) uint {
23642408 cbPtr := uintptr(unsafe.Pointer(cb))
23652409 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2366- return gobject.SignalConnect(x.GoPointer(), "test-collapse-row", cbRefPtr)
2410+ handlerID := gobject.SignalConnect(x.GoPointer(), "test-collapse-row", cbRefPtr)
2411+ glib.SaveHandlerMapping(handlerID, cbPtr)
2412+ return handlerID
23672413 }
23682414
23692415 fcb := func(clsPtr uintptr, IterVarp uintptr, PathVarp uintptr) bool {
@@ -2376,15 +2422,19 @@ func (x *TreeView) ConnectTestCollapseRow(cb *func(TreeView, uintptr, uintptr) b
23762422 }
23772423 cbRefPtr := purego.NewCallback(fcb)
23782424 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2379- return gobject.SignalConnect(x.GoPointer(), "test-collapse-row", cbRefPtr)
2425+ handlerID := gobject.SignalConnect(x.GoPointer(), "test-collapse-row", cbRefPtr)
2426+ glib.SaveHandlerMapping(handlerID, cbPtr)
2427+ return handlerID
23802428 }
23812429
23822430 // The given row is about to be expanded (show its children nodes). Use this
23832431 // signal if you need to control the expandability of individual rows.
2384-func (x *TreeView) ConnectTestExpandRow(cb *func(TreeView, uintptr, uintptr) bool) uint32 {
2432+func (x *TreeView) ConnectTestExpandRow(cb *func(TreeView, uintptr, uintptr) bool) uint {
23852433 cbPtr := uintptr(unsafe.Pointer(cb))
23862434 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2387- return gobject.SignalConnect(x.GoPointer(), "test-expand-row", cbRefPtr)
2435+ handlerID := gobject.SignalConnect(x.GoPointer(), "test-expand-row", cbRefPtr)
2436+ glib.SaveHandlerMapping(handlerID, cbPtr)
2437+ return handlerID
23882438 }
23892439
23902440 fcb := func(clsPtr uintptr, IterVarp uintptr, PathVarp uintptr) bool {
@@ -2397,13 +2447,17 @@ func (x *TreeView) ConnectTestExpandRow(cb *func(TreeView, uintptr, uintptr) boo
23972447 }
23982448 cbRefPtr := purego.NewCallback(fcb)
23992449 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2400- return gobject.SignalConnect(x.GoPointer(), "test-expand-row", cbRefPtr)
2450+ handlerID := gobject.SignalConnect(x.GoPointer(), "test-expand-row", cbRefPtr)
2451+ glib.SaveHandlerMapping(handlerID, cbPtr)
2452+ return handlerID
24012453 }
24022454
2403-func (x *TreeView) ConnectToggleCursorRow(cb *func(TreeView) bool) uint32 {
2455+func (x *TreeView) ConnectToggleCursorRow(cb *func(TreeView) bool) uint {
24042456 cbPtr := uintptr(unsafe.Pointer(cb))
24052457 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2406- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
2458+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
2459+ glib.SaveHandlerMapping(handlerID, cbPtr)
2460+ return handlerID
24072461 }
24082462
24092463 fcb := func(clsPtr uintptr) bool {
@@ -2416,13 +2470,17 @@ func (x *TreeView) ConnectToggleCursorRow(cb *func(TreeView) bool) uint32 {
24162470 }
24172471 cbRefPtr := purego.NewCallback(fcb)
24182472 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2419- return gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
2473+ handlerID := gobject.SignalConnect(x.GoPointer(), "toggle-cursor-row", cbRefPtr)
2474+ glib.SaveHandlerMapping(handlerID, cbPtr)
2475+ return handlerID
24202476 }
24212477
2422-func (x *TreeView) ConnectUnselectAll(cb *func(TreeView) bool) uint32 {
2478+func (x *TreeView) ConnectUnselectAll(cb *func(TreeView) bool) uint {
24232479 cbPtr := uintptr(unsafe.Pointer(cb))
24242480 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
2425- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
2481+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
2482+ glib.SaveHandlerMapping(handlerID, cbPtr)
2483+ return handlerID
24262484 }
24272485
24282486 fcb := func(clsPtr uintptr) bool {
@@ -2435,7 +2493,9 @@ func (x *TreeView) ConnectUnselectAll(cb *func(TreeView) bool) uint32 {
24352493 }
24362494 cbRefPtr := purego.NewCallback(fcb)
24372495 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
2438- return gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
2496+ handlerID := gobject.SignalConnect(x.GoPointer(), "unselect-all", cbRefPtr)
2497+ glib.SaveHandlerMapping(handlerID, cbPtr)
2498+ return handlerID
24392499 }
24402500
24412501 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtktreeviewcolumn.go +7 -3
@@ -980,10 +980,12 @@ func (x *TreeViewColumn) GetPropertyXOffset() int {
980980 }
981981
982982 // Emitted when the column's header has been clicked.
983-func (x *TreeViewColumn) ConnectClicked(cb *func(TreeViewColumn)) uint32 {
983+func (x *TreeViewColumn) ConnectClicked(cb *func(TreeViewColumn)) uint {
984984 cbPtr := uintptr(unsafe.Pointer(cb))
985985 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
986- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
986+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
987+ glib.SaveHandlerMapping(handlerID, cbPtr)
988+ return handlerID
987989 }
988990
989991 fcb := func(clsPtr uintptr) {
@@ -996,7 +998,9 @@ func (x *TreeViewColumn) ConnectClicked(cb *func(TreeViewColumn)) uint32 {
996998 }
997999 cbRefPtr := purego.NewCallback(fcb)
9981000 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
999- return gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
1001+ handlerID := gobject.SignalConnect(x.GoPointer(), "clicked", cbRefPtr)
1002+ glib.SaveHandlerMapping(handlerID, cbPtr)
1003+ return handlerID
10001004 }
10011005
10021006 // Gets the ID of the @buildable object.
M v4/gtk/gtkwidget.go +91 -39
@@ -5154,10 +5154,12 @@ func (x *Widget) GetPropertyWidthRequest() int {
51545154 // May result in finalization of the widget if all references are released.
51555155 //
51565156 // This signal is not suitable for saving widget state.
5157-func (x *Widget) ConnectDestroy(cb *func(Widget)) uint32 {
5157+func (x *Widget) ConnectDestroy(cb *func(Widget)) uint {
51585158 cbPtr := uintptr(unsafe.Pointer(cb))
51595159 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5160- return gobject.SignalConnect(x.GoPointer(), "destroy", cbRefPtr)
5160+ handlerID := gobject.SignalConnect(x.GoPointer(), "destroy", cbRefPtr)
5161+ glib.SaveHandlerMapping(handlerID, cbPtr)
5162+ return handlerID
51615163 }
51625164
51635165 fcb := func(clsPtr uintptr) {
@@ -5170,14 +5172,18 @@ func (x *Widget) ConnectDestroy(cb *func(Widget)) uint32 {
51705172 }
51715173 cbRefPtr := purego.NewCallback(fcb)
51725174 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5173- return gobject.SignalConnect(x.GoPointer(), "destroy", cbRefPtr)
5175+ handlerID := gobject.SignalConnect(x.GoPointer(), "destroy", cbRefPtr)
5176+ glib.SaveHandlerMapping(handlerID, cbPtr)
5177+ return handlerID
51745178 }
51755179
51765180 // Emitted when the text direction of a widget changes.
5177-func (x *Widget) ConnectDirectionChanged(cb *func(Widget, TextDirection)) uint32 {
5181+func (x *Widget) ConnectDirectionChanged(cb *func(Widget, TextDirection)) uint {
51785182 cbPtr := uintptr(unsafe.Pointer(cb))
51795183 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5180- return gobject.SignalConnect(x.GoPointer(), "direction-changed", cbRefPtr)
5184+ handlerID := gobject.SignalConnect(x.GoPointer(), "direction-changed", cbRefPtr)
5185+ glib.SaveHandlerMapping(handlerID, cbPtr)
5186+ return handlerID
51815187 }
51825188
51835189 fcb := func(clsPtr uintptr, PreviousDirectionVarp TextDirection) {
@@ -5190,14 +5196,18 @@ func (x *Widget) ConnectDirectionChanged(cb *func(Widget, TextDirection)) uint32
51905196 }
51915197 cbRefPtr := purego.NewCallback(fcb)
51925198 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5193- return gobject.SignalConnect(x.GoPointer(), "direction-changed", cbRefPtr)
5199+ handlerID := gobject.SignalConnect(x.GoPointer(), "direction-changed", cbRefPtr)
5200+ glib.SaveHandlerMapping(handlerID, cbPtr)
5201+ return handlerID
51945202 }
51955203
51965204 // Emitted when @widget is hidden.
5197-func (x *Widget) ConnectHide(cb *func(Widget)) uint32 {
5205+func (x *Widget) ConnectHide(cb *func(Widget)) uint {
51985206 cbPtr := uintptr(unsafe.Pointer(cb))
51995207 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5200- return gobject.SignalConnect(x.GoPointer(), "hide", cbRefPtr)
5208+ handlerID := gobject.SignalConnect(x.GoPointer(), "hide", cbRefPtr)
5209+ glib.SaveHandlerMapping(handlerID, cbPtr)
5210+ return handlerID
52015211 }
52025212
52035213 fcb := func(clsPtr uintptr) {
@@ -5210,16 +5220,20 @@ func (x *Widget) ConnectHide(cb *func(Widget)) uint32 {
52105220 }
52115221 cbRefPtr := purego.NewCallback(fcb)
52125222 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5213- return gobject.SignalConnect(x.GoPointer(), "hide", cbRefPtr)
5223+ handlerID := gobject.SignalConnect(x.GoPointer(), "hide", cbRefPtr)
5224+ glib.SaveHandlerMapping(handlerID, cbPtr)
5225+ return handlerID
52145226 }
52155227
52165228 // Emitted if keyboard navigation fails.
52175229 //
52185230 // See [method@Gtk.Widget.keynav_failed] for details.
5219-func (x *Widget) ConnectKeynavFailed(cb *func(Widget, DirectionType) bool) uint32 {
5231+func (x *Widget) ConnectKeynavFailed(cb *func(Widget, DirectionType) bool) uint {
52205232 cbPtr := uintptr(unsafe.Pointer(cb))
52215233 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5222- return gobject.SignalConnect(x.GoPointer(), "keynav-failed", cbRefPtr)
5234+ handlerID := gobject.SignalConnect(x.GoPointer(), "keynav-failed", cbRefPtr)
5235+ glib.SaveHandlerMapping(handlerID, cbPtr)
5236+ return handlerID
52235237 }
52245238
52255239 fcb := func(clsPtr uintptr, DirectionVarp DirectionType) bool {
@@ -5232,7 +5246,9 @@ func (x *Widget) ConnectKeynavFailed(cb *func(Widget, DirectionType) bool) uint3
52325246 }
52335247 cbRefPtr := purego.NewCallback(fcb)
52345248 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5235- return gobject.SignalConnect(x.GoPointer(), "keynav-failed", cbRefPtr)
5249+ handlerID := gobject.SignalConnect(x.GoPointer(), "keynav-failed", cbRefPtr)
5250+ glib.SaveHandlerMapping(handlerID, cbPtr)
5251+ return handlerID
52365252 }
52375253
52385254 // Emitted when @widget is going to be mapped.
@@ -5244,10 +5260,12 @@ func (x *Widget) ConnectKeynavFailed(cb *func(Widget, DirectionType) bool) uint3
52445260 // The `::map` signal can be used to determine whether a widget will be drawn,
52455261 // for instance it can resume an animation that was stopped during the
52465262 // emission of [signal@Gtk.Widget::unmap].
5247-func (x *Widget) ConnectMap(cb *func(Widget)) uint32 {
5263+func (x *Widget) ConnectMap(cb *func(Widget)) uint {
52485264 cbPtr := uintptr(unsafe.Pointer(cb))
52495265 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5250- return gobject.SignalConnect(x.GoPointer(), "map", cbRefPtr)
5266+ handlerID := gobject.SignalConnect(x.GoPointer(), "map", cbRefPtr)
5267+ glib.SaveHandlerMapping(handlerID, cbPtr)
5268+ return handlerID
52515269 }
52525270
52535271 fcb := func(clsPtr uintptr) {
@@ -5260,17 +5278,21 @@ func (x *Widget) ConnectMap(cb *func(Widget)) uint32 {
52605278 }
52615279 cbRefPtr := purego.NewCallback(fcb)
52625280 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5263- return gobject.SignalConnect(x.GoPointer(), "map", cbRefPtr)
5281+ handlerID := gobject.SignalConnect(x.GoPointer(), "map", cbRefPtr)
5282+ glib.SaveHandlerMapping(handlerID, cbPtr)
5283+ return handlerID
52645284 }
52655285
52665286 // Emitted when a widget is activated via a mnemonic.
52675287 //
52685288 // The default handler for this signal activates @widget if @group_cycling
52695289 // is false, or just makes @widget grab focus if @group_cycling is true.
5270-func (x *Widget) ConnectMnemonicActivate(cb *func(Widget, bool) bool) uint32 {
5290+func (x *Widget) ConnectMnemonicActivate(cb *func(Widget, bool) bool) uint {
52715291 cbPtr := uintptr(unsafe.Pointer(cb))
52725292 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5273- return gobject.SignalConnect(x.GoPointer(), "mnemonic-activate", cbRefPtr)
5293+ handlerID := gobject.SignalConnect(x.GoPointer(), "mnemonic-activate", cbRefPtr)
5294+ glib.SaveHandlerMapping(handlerID, cbPtr)
5295+ return handlerID
52745296 }
52755297
52765298 fcb := func(clsPtr uintptr, GroupCyclingVarp bool) bool {
@@ -5283,7 +5305,9 @@ func (x *Widget) ConnectMnemonicActivate(cb *func(Widget, bool) bool) uint32 {
52835305 }
52845306 cbRefPtr := purego.NewCallback(fcb)
52855307 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5286- return gobject.SignalConnect(x.GoPointer(), "mnemonic-activate", cbRefPtr)
5308+ handlerID := gobject.SignalConnect(x.GoPointer(), "mnemonic-activate", cbRefPtr)
5309+ glib.SaveHandlerMapping(handlerID, cbPtr)
5310+ return handlerID
52875311 }
52885312
52895313 // Emitted when the focus is moved.
@@ -5292,10 +5316,12 @@ func (x *Widget) ConnectMnemonicActivate(cb *func(Widget, bool) bool) uint32 {
52925316 //
52935317 // The default bindings for this signal are &lt;kbd&gt;Tab&lt;/kbd&gt; to move forward,
52945318 // and &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt; to move backward.
5295-func (x *Widget) ConnectMoveFocus(cb *func(Widget, DirectionType)) uint32 {
5319+func (x *Widget) ConnectMoveFocus(cb *func(Widget, DirectionType)) uint {
52965320 cbPtr := uintptr(unsafe.Pointer(cb))
52975321 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5298- return gobject.SignalConnect(x.GoPointer(), "move-focus", cbRefPtr)
5322+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus", cbRefPtr)
5323+ glib.SaveHandlerMapping(handlerID, cbPtr)
5324+ return handlerID
52995325 }
53005326
53015327 fcb := func(clsPtr uintptr, DirectionVarp DirectionType) {
@@ -5308,7 +5334,9 @@ func (x *Widget) ConnectMoveFocus(cb *func(Widget, DirectionType)) uint32 {
53085334 }
53095335 cbRefPtr := purego.NewCallback(fcb)
53105336 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5311- return gobject.SignalConnect(x.GoPointer(), "move-focus", cbRefPtr)
5337+ handlerID := gobject.SignalConnect(x.GoPointer(), "move-focus", cbRefPtr)
5338+ glib.SaveHandlerMapping(handlerID, cbPtr)
5339+ return handlerID
53125340 }
53135341
53145342 // Emitted when the widget’s tooltip is about to be shown.
@@ -5324,10 +5352,12 @@ func (x *Widget) ConnectMoveFocus(cb *func(Widget, DirectionType)) uint32 {
53245352 //
53255353 // The signal handler is free to manipulate @tooltip with the therefore
53265354 // destined function calls.
5327-func (x *Widget) ConnectQueryTooltip(cb *func(Widget, int, int, bool, uintptr) bool) uint32 {
5355+func (x *Widget) ConnectQueryTooltip(cb *func(Widget, int, int, bool, uintptr) bool) uint {
53285356 cbPtr := uintptr(unsafe.Pointer(cb))
53295357 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5330- return gobject.SignalConnect(x.GoPointer(), "query-tooltip", cbRefPtr)
5358+ handlerID := gobject.SignalConnect(x.GoPointer(), "query-tooltip", cbRefPtr)
5359+ glib.SaveHandlerMapping(handlerID, cbPtr)
5360+ return handlerID
53315361 }
53325362
53335363 fcb := func(clsPtr uintptr, XVarp int, YVarp int, KeyboardModeVarp bool, TooltipVarp uintptr) bool {
@@ -5340,17 +5370,21 @@ func (x *Widget) ConnectQueryTooltip(cb *func(Widget, int, int, bool, uintptr) b
53405370 }
53415371 cbRefPtr := purego.NewCallback(fcb)
53425372 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5343- return gobject.SignalConnect(x.GoPointer(), "query-tooltip", cbRefPtr)
5373+ handlerID := gobject.SignalConnect(x.GoPointer(), "query-tooltip", cbRefPtr)
5374+ glib.SaveHandlerMapping(handlerID, cbPtr)
5375+ return handlerID
53445376 }
53455377
53465378 // Emitted when @widget is associated with a `GdkSurface`.
53475379 //
53485380 // This means that [method@Gtk.Widget.realize] has been called
53495381 // or the widget has been mapped (that is, it is going to be drawn).
5350-func (x *Widget) ConnectRealize(cb *func(Widget)) uint32 {
5382+func (x *Widget) ConnectRealize(cb *func(Widget)) uint {
53515383 cbPtr := uintptr(unsafe.Pointer(cb))
53525384 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5353- return gobject.SignalConnect(x.GoPointer(), "realize", cbRefPtr)
5385+ handlerID := gobject.SignalConnect(x.GoPointer(), "realize", cbRefPtr)
5386+ glib.SaveHandlerMapping(handlerID, cbPtr)
5387+ return handlerID
53545388 }
53555389
53565390 fcb := func(clsPtr uintptr) {
@@ -5363,14 +5397,18 @@ func (x *Widget) ConnectRealize(cb *func(Widget)) uint32 {
53635397 }
53645398 cbRefPtr := purego.NewCallback(fcb)
53655399 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5366- return gobject.SignalConnect(x.GoPointer(), "realize", cbRefPtr)
5400+ handlerID := gobject.SignalConnect(x.GoPointer(), "realize", cbRefPtr)
5401+ glib.SaveHandlerMapping(handlerID, cbPtr)
5402+ return handlerID
53675403 }
53685404
53695405 // Emitted when @widget is shown.
5370-func (x *Widget) ConnectShow(cb *func(Widget)) uint32 {
5406+func (x *Widget) ConnectShow(cb *func(Widget)) uint {
53715407 cbPtr := uintptr(unsafe.Pointer(cb))
53725408 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5373- return gobject.SignalConnect(x.GoPointer(), "show", cbRefPtr)
5409+ handlerID := gobject.SignalConnect(x.GoPointer(), "show", cbRefPtr)
5410+ glib.SaveHandlerMapping(handlerID, cbPtr)
5411+ return handlerID
53745412 }
53755413
53765414 fcb := func(clsPtr uintptr) {
@@ -5383,16 +5421,20 @@ func (x *Widget) ConnectShow(cb *func(Widget)) uint32 {
53835421 }
53845422 cbRefPtr := purego.NewCallback(fcb)
53855423 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5386- return gobject.SignalConnect(x.GoPointer(), "show", cbRefPtr)
5424+ handlerID := gobject.SignalConnect(x.GoPointer(), "show", cbRefPtr)
5425+ glib.SaveHandlerMapping(handlerID, cbPtr)
5426+ return handlerID
53875427 }
53885428
53895429 // Emitted when the widget state changes.
53905430 //
53915431 // See [method@Gtk.Widget.get_state_flags].
5392-func (x *Widget) ConnectStateFlagsChanged(cb *func(Widget, StateFlags)) uint32 {
5432+func (x *Widget) ConnectStateFlagsChanged(cb *func(Widget, StateFlags)) uint {
53935433 cbPtr := uintptr(unsafe.Pointer(cb))
53945434 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5395- return gobject.SignalConnect(x.GoPointer(), "state-flags-changed", cbRefPtr)
5435+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-flags-changed", cbRefPtr)
5436+ glib.SaveHandlerMapping(handlerID, cbPtr)
5437+ return handlerID
53965438 }
53975439
53985440 fcb := func(clsPtr uintptr, FlagsVarp StateFlags) {
@@ -5405,7 +5447,9 @@ func (x *Widget) ConnectStateFlagsChanged(cb *func(Widget, StateFlags)) uint32 {
54055447 }
54065448 cbRefPtr := purego.NewCallback(fcb)
54075449 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5408- return gobject.SignalConnect(x.GoPointer(), "state-flags-changed", cbRefPtr)
5450+ handlerID := gobject.SignalConnect(x.GoPointer(), "state-flags-changed", cbRefPtr)
5451+ glib.SaveHandlerMapping(handlerID, cbPtr)
5452+ return handlerID
54095453 }
54105454
54115455 // Emitted when @widget is going to be unmapped.
@@ -5415,10 +5459,12 @@ func (x *Widget) ConnectStateFlagsChanged(cb *func(Widget, StateFlags)) uint32 {
54155459 //
54165460 // As `::unmap` indicates that a widget will not be shown any longer,
54175461 // it can be used to, for example, stop an animation on the widget.
5418-func (x *Widget) ConnectUnmap(cb *func(Widget)) uint32 {
5462+func (x *Widget) ConnectUnmap(cb *func(Widget)) uint {
54195463 cbPtr := uintptr(unsafe.Pointer(cb))
54205464 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5421- return gobject.SignalConnect(x.GoPointer(), "unmap", cbRefPtr)
5465+ handlerID := gobject.SignalConnect(x.GoPointer(), "unmap", cbRefPtr)
5466+ glib.SaveHandlerMapping(handlerID, cbPtr)
5467+ return handlerID
54225468 }
54235469
54245470 fcb := func(clsPtr uintptr) {
@@ -5431,17 +5477,21 @@ func (x *Widget) ConnectUnmap(cb *func(Widget)) uint32 {
54315477 }
54325478 cbRefPtr := purego.NewCallback(fcb)
54335479 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5434- return gobject.SignalConnect(x.GoPointer(), "unmap", cbRefPtr)
5480+ handlerID := gobject.SignalConnect(x.GoPointer(), "unmap", cbRefPtr)
5481+ glib.SaveHandlerMapping(handlerID, cbPtr)
5482+ return handlerID
54355483 }
54365484
54375485 // Emitted when the `GdkSurface` associated with @widget is destroyed.
54385486 //
54395487 // This means that [method@Gtk.Widget.unrealize] has been called
54405488 // or the widget has been unmapped (that is, it is going to be hidden).
5441-func (x *Widget) ConnectUnrealize(cb *func(Widget)) uint32 {
5489+func (x *Widget) ConnectUnrealize(cb *func(Widget)) uint {
54425490 cbPtr := uintptr(unsafe.Pointer(cb))
54435491 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
5444- return gobject.SignalConnect(x.GoPointer(), "unrealize", cbRefPtr)
5492+ handlerID := gobject.SignalConnect(x.GoPointer(), "unrealize", cbRefPtr)
5493+ glib.SaveHandlerMapping(handlerID, cbPtr)
5494+ return handlerID
54455495 }
54465496
54475497 fcb := func(clsPtr uintptr) {
@@ -5454,7 +5504,9 @@ func (x *Widget) ConnectUnrealize(cb *func(Widget)) uint32 {
54545504 }
54555505 cbRefPtr := purego.NewCallback(fcb)
54565506 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
5457- return gobject.SignalConnect(x.GoPointer(), "unrealize", cbRefPtr)
5507+ handlerID := gobject.SignalConnect(x.GoPointer(), "unrealize", cbRefPtr)
5508+ glib.SaveHandlerMapping(handlerID, cbPtr)
5509+ return handlerID
54585510 }
54595511
54605512 // Requests the user's screen reader to announce the given message.
M v4/gtk/gtkwindow.go +35 -15
@@ -1584,10 +1584,12 @@ func (x *Window) GetPropertyTitle() string {
15841584 // This is a [keybinding signal](class.SignalAction.html).
15851585 //
15861586 // The keybindings for this signal are all forms of the &lt;kbd&gt;Enter&lt;/kbd&gt; key.
1587-func (x *Window) ConnectActivateDefault(cb *func(Window)) uint32 {
1587+func (x *Window) ConnectActivateDefault(cb *func(Window)) uint {
15881588 cbPtr := uintptr(unsafe.Pointer(cb))
15891589 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1590- return gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
1590+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
1591+ glib.SaveHandlerMapping(handlerID, cbPtr)
1592+ return handlerID
15911593 }
15921594
15931595 fcb := func(clsPtr uintptr) {
@@ -1600,7 +1602,9 @@ func (x *Window) ConnectActivateDefault(cb *func(Window)) uint32 {
16001602 }
16011603 cbRefPtr := purego.NewCallback(fcb)
16021604 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1603- return gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
1605+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-default", cbRefPtr)
1606+ glib.SaveHandlerMapping(handlerID, cbPtr)
1607+ return handlerID
16041608 }
16051609
16061610 // Emitted when the user activates the currently focused
@@ -1609,10 +1613,12 @@ func (x *Window) ConnectActivateDefault(cb *func(Window)) uint32 {
16091613 // This is a [keybinding signal](class.SignalAction.html).
16101614 //
16111615 // The default binding for this signal is &lt;kbd&gt;␣&lt;/kbd&gt;.
1612-func (x *Window) ConnectActivateFocus(cb *func(Window)) uint32 {
1616+func (x *Window) ConnectActivateFocus(cb *func(Window)) uint {
16131617 cbPtr := uintptr(unsafe.Pointer(cb))
16141618 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1615- return gobject.SignalConnect(x.GoPointer(), "activate-focus", cbRefPtr)
1619+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-focus", cbRefPtr)
1620+ glib.SaveHandlerMapping(handlerID, cbPtr)
1621+ return handlerID
16161622 }
16171623
16181624 fcb := func(clsPtr uintptr) {
@@ -1625,14 +1631,18 @@ func (x *Window) ConnectActivateFocus(cb *func(Window)) uint32 {
16251631 }
16261632 cbRefPtr := purego.NewCallback(fcb)
16271633 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1628- return gobject.SignalConnect(x.GoPointer(), "activate-focus", cbRefPtr)
1634+ handlerID := gobject.SignalConnect(x.GoPointer(), "activate-focus", cbRefPtr)
1635+ glib.SaveHandlerMapping(handlerID, cbPtr)
1636+ return handlerID
16291637 }
16301638
16311639 // Emitted when the user clicks on the close button of the window.
1632-func (x *Window) ConnectCloseRequest(cb *func(Window) bool) uint32 {
1640+func (x *Window) ConnectCloseRequest(cb *func(Window) bool) uint {
16331641 cbPtr := uintptr(unsafe.Pointer(cb))
16341642 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1635- return gobject.SignalConnect(x.GoPointer(), "close-request", cbRefPtr)
1643+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-request", cbRefPtr)
1644+ glib.SaveHandlerMapping(handlerID, cbPtr)
1645+ return handlerID
16361646 }
16371647
16381648 fcb := func(clsPtr uintptr) bool {
@@ -1645,7 +1655,9 @@ func (x *Window) ConnectCloseRequest(cb *func(Window) bool) uint32 {
16451655 }
16461656 cbRefPtr := purego.NewCallback(fcb)
16471657 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1648- return gobject.SignalConnect(x.GoPointer(), "close-request", cbRefPtr)
1658+ handlerID := gobject.SignalConnect(x.GoPointer(), "close-request", cbRefPtr)
1659+ glib.SaveHandlerMapping(handlerID, cbPtr)
1660+ return handlerID
16491661 }
16501662
16511663 // Emitted when the user enables or disables interactive debugging.
@@ -1659,10 +1671,12 @@ func (x *Window) ConnectCloseRequest(cb *func(Window) bool) uint32 {
16591671 // The default bindings for this signal are
16601672 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;I&lt;/kbd&gt; and
16611673 // &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;D&lt;/kbd&gt;.
1662-func (x *Window) ConnectEnableDebugging(cb *func(Window, bool) bool) uint32 {
1674+func (x *Window) ConnectEnableDebugging(cb *func(Window, bool) bool) uint {
16631675 cbPtr := uintptr(unsafe.Pointer(cb))
16641676 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1665- return gobject.SignalConnect(x.GoPointer(), "enable-debugging", cbRefPtr)
1677+ handlerID := gobject.SignalConnect(x.GoPointer(), "enable-debugging", cbRefPtr)
1678+ glib.SaveHandlerMapping(handlerID, cbPtr)
1679+ return handlerID
16661680 }
16671681
16681682 fcb := func(clsPtr uintptr, ToggleVarp bool) bool {
@@ -1675,15 +1689,19 @@ func (x *Window) ConnectEnableDebugging(cb *func(Window, bool) bool) uint32 {
16751689 }
16761690 cbRefPtr := purego.NewCallback(fcb)
16771691 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1678- return gobject.SignalConnect(x.GoPointer(), "enable-debugging", cbRefPtr)
1692+ handlerID := gobject.SignalConnect(x.GoPointer(), "enable-debugging", cbRefPtr)
1693+ glib.SaveHandlerMapping(handlerID, cbPtr)
1694+ return handlerID
16791695 }
16801696
16811697 // Emitted when the set of accelerators or mnemonics that
16821698 // are associated with the window changes.
1683-func (x *Window) ConnectKeysChanged(cb *func(Window)) uint32 {
1699+func (x *Window) ConnectKeysChanged(cb *func(Window)) uint {
16841700 cbPtr := uintptr(unsafe.Pointer(cb))
16851701 if cbRefPtr, ok := glib.GetCallback(cbPtr); ok {
1686- return gobject.SignalConnect(x.GoPointer(), "keys-changed", cbRefPtr)
1702+ handlerID := gobject.SignalConnect(x.GoPointer(), "keys-changed", cbRefPtr)
1703+ glib.SaveHandlerMapping(handlerID, cbPtr)
1704+ return handlerID
16871705 }
16881706
16891707 fcb := func(clsPtr uintptr) {
@@ -1696,7 +1714,9 @@ func (x *Window) ConnectKeysChanged(cb *func(Window)) uint32 {
16961714 }
16971715 cbRefPtr := purego.NewCallback(fcb)
16981716 glib.SaveCallbackWithClosure(cbPtr, cbRefPtr, cb)
1699- return gobject.SignalConnect(x.GoPointer(), "keys-changed", cbRefPtr)
1717+ handlerID := gobject.SignalConnect(x.GoPointer(), "keys-changed", cbRefPtr)
1718+ glib.SaveHandlerMapping(handlerID, cbPtr)
1719+ return handlerID
17001720 }
17011721
17021722 // Requests the user's screen reader to announce the given message.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close