Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/components/hoverpopover/button.go
366 views
1
package hoverpopover
2
3
import (
4
"github.com/diamondburned/gotk4/pkg/glib/v2"
5
"github.com/diamondburned/gotk4/pkg/gtk/v4"
6
)
7
8
// PopoverButton extends a ToggleButton to show a popover when toggled.
9
type PopoverButton struct {
10
*gtk.ToggleButton
11
controller *PopoverController
12
}
13
14
// NewPopoverButton creates a new PopoverButton.
15
func NewPopoverButton(initFn func(*gtk.Popover) bool) *PopoverButton {
16
b := &PopoverButton{ToggleButton: gtk.NewToggleButton()}
17
controller := NewPopoverController(b.ToggleButton, initFn)
18
b.ConnectClicked(func() {
19
if !b.Active() {
20
controller.Popdown()
21
return
22
}
23
24
popover := controller.Popup()
25
26
var closedSignal glib.SignalHandle
27
closedSignal = popover.ConnectClosed(func() {
28
b.SetActive(false)
29
if closedSignal != 0 {
30
popover.HandlerDisconnect(closedSignal)
31
closedSignal = 0
32
}
33
})
34
})
35
return b
36
}
37
38