Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
diamondburned
GitHub Repository: diamondburned/gtkcord4
Path: blob/main/internal/window/quickswitcher/dialog.go
366 views
1
package quickswitcher
2
3
import (
4
"context"
5
6
"github.com/diamondburned/gotk4-adwaita/pkg/adw"
7
"github.com/diamondburned/gotk4/pkg/gdk/v4"
8
"github.com/diamondburned/gotk4/pkg/gtk/v4"
9
"github.com/diamondburned/gotkit/app"
10
"github.com/diamondburned/gotkit/gtkutil/cssutil"
11
)
12
13
// Dialog is a Quick Switcher dialog.
14
type Dialog struct {
15
*adw.Dialog
16
QuickSwitcher *QuickSwitcher
17
}
18
19
// ShowDialog shows a new Quick Switcher dialog.
20
func ShowDialog(ctx context.Context) {
21
d := NewDialog(ctx)
22
d.Present(app.GTKWindowFromContext(ctx))
23
}
24
25
var dialogCSS = cssutil.Applier("quickswitcher-dialog", "")
26
27
// NewDialog creates a new Quick Switcher dialog.
28
func NewDialog(ctx context.Context) *Dialog {
29
qs := NewQuickSwitcher(ctx)
30
qs.Box.Remove(qs.search) // jank
31
qs.search.SetHExpand(true)
32
33
app := app.FromContext(ctx)
34
35
header := adw.NewHeaderBar()
36
header.SetTitleWidget(qs.search)
37
38
toolbarView := adw.NewToolbarView()
39
toolbarView.SetTopBarStyle(adw.ToolbarFlat)
40
toolbarView.AddTopBar(header)
41
toolbarView.SetContent(qs)
42
43
d := Dialog{QuickSwitcher: qs}
44
d.Dialog = adw.NewDialog()
45
d.SetContentWidth(375)
46
d.SetContentHeight(275)
47
d.SetTitle(app.SuffixedTitle("Quick Switcher"))
48
d.SetChild(toolbarView)
49
d.ConnectShow(func() {
50
qs.Clear()
51
qs.search.GrabFocus()
52
})
53
dialogCSS(d)
54
55
qs.ConnectChosen(func() {
56
d.Close()
57
})
58
59
esc := gtk.NewEventControllerKey()
60
esc.SetName("dialog-escape")
61
esc.ConnectKeyPressed(func(val, _ uint, state gdk.ModifierType) bool {
62
switch val {
63
case gdk.KEY_Escape:
64
d.Close()
65
return true
66
}
67
return false
68
})
69
70
qs.search.SetKeyCaptureWidget(d)
71
qs.search.AddController(esc)
72
73
return &d
74
}
75
76