Path: blob/main/internal/window/quickswitcher/dialog.go
366 views
package quickswitcher12import (3"context"45"github.com/diamondburned/gotk4-adwaita/pkg/adw"6"github.com/diamondburned/gotk4/pkg/gdk/v4"7"github.com/diamondburned/gotk4/pkg/gtk/v4"8"github.com/diamondburned/gotkit/app"9"github.com/diamondburned/gotkit/gtkutil/cssutil"10)1112// Dialog is a Quick Switcher dialog.13type Dialog struct {14*adw.Dialog15QuickSwitcher *QuickSwitcher16}1718// ShowDialog shows a new Quick Switcher dialog.19func ShowDialog(ctx context.Context) {20d := NewDialog(ctx)21d.Present(app.GTKWindowFromContext(ctx))22}2324var dialogCSS = cssutil.Applier("quickswitcher-dialog", "")2526// NewDialog creates a new Quick Switcher dialog.27func NewDialog(ctx context.Context) *Dialog {28qs := NewQuickSwitcher(ctx)29qs.Box.Remove(qs.search) // jank30qs.search.SetHExpand(true)3132app := app.FromContext(ctx)3334header := adw.NewHeaderBar()35header.SetTitleWidget(qs.search)3637toolbarView := adw.NewToolbarView()38toolbarView.SetTopBarStyle(adw.ToolbarFlat)39toolbarView.AddTopBar(header)40toolbarView.SetContent(qs)4142d := Dialog{QuickSwitcher: qs}43d.Dialog = adw.NewDialog()44d.SetContentWidth(375)45d.SetContentHeight(275)46d.SetTitle(app.SuffixedTitle("Quick Switcher"))47d.SetChild(toolbarView)48d.ConnectShow(func() {49qs.Clear()50qs.search.GrabFocus()51})52dialogCSS(d)5354qs.ConnectChosen(func() {55d.Close()56})5758esc := gtk.NewEventControllerKey()59esc.SetName("dialog-escape")60esc.ConnectKeyPressed(func(val, _ uint, state gdk.ModifierType) bool {61switch val {62case gdk.KEY_Escape:63d.Close()64return true65}66return false67})6869qs.search.SetKeyCaptureWidget(d)70qs.search.AddController(esc)7172return &d73}747576