package dialog import ( "github.com/diamondburned/cchat-gtk/internal/gts" "github.com/gotk3/gotk3/glib" "github.com/gotk3/gotk3/gtk" ) func NewModal(body gtk.IWidget, title, label string, callback func()) *gtk.Dialog { cancel, _ := gtk.ButtonNew() cancel.Show() cancel.SetHAlign(gtk.ALIGN_START) cancel.SetRelief(gtk.RELIEF_NONE) cancel.SetLabel("Cancel") action, _ := gtk.ButtonNew() action.Show() action.SetHAlign(gtk.ALIGN_END) action.SetRelief(gtk.RELIEF_NONE) action.SetLabel(label) header, _ := gtk.HeaderBarNew() header.Show() header.SetTitle(title) header.PackStart(cancel) header.PackEnd(action) dialog := newCSD(body, header) cancel.Connect("clicked", dialog.Destroy) action.Connect("clicked", callback) return dialog } func NewCSD(body, header gtk.IWidget) *gtk.Dialog { dialog := newCSD(body, header) dialog.Connect("response", func(_ *glib.Object, resp gtk.ResponseType) { if resp == gtk.RESPONSE_DELETE_EVENT { dialog.Destroy() } }) return dialog } func newCSD(body, header gtk.IWidget) *gtk.Dialog { dialog, _ := gtk.DialogNew() dialog.SetModal(true) dialog.SetTransientFor(gts.App.Window) if area, _ := dialog.GetContentArea(); area != nil { dialog.Remove(area) } if oldh, _ := dialog.GetHeaderBar(); oldh != nil { dialog.Remove(oldh) } dialog.Add(body) dialog.SetTitlebar(header) return dialog }