package main import ( "fmt" "github.com/diamondburned/gotk4/pkg/glib/v2" "github.com/diamondburned/gotk4/pkg/gtk/v4" "gosrc.io/xmpp/stanza" Jid "mellium.im/xmpp/jid" ) func scrollToBottomAfterUpdate(scrolledWindow *gtk.ScrolledWindow) { glib.IdleAdd(func() bool { vAdj := scrolledWindow.VAdjustment() vAdj.SetValue(vAdj.Upper() - vAdj.PageSize()) return false // Return false to run only once }) } func createTab(jid string, isMuc bool) { _, ok := tabs[jid] if !ok { newTab := new(chatTab) newTab.isMuc = isMuc newTab.msgs = gtk.NewListBox() newTab.msgs.SetVExpand(true) newTab.msgs.SetShowSeparators(true) newTab.msgs.Append(gtk.NewButtonWithLabel("Get past messages...")) tabs[jid] = newTab } } func switchToTab(jid string) { current = jid scroller.SetChild(tabs[current].msgs) m, _ := mucmembers.Load(jid) ma := m.(mucUnit) mm := ma.Members gen := gtk.NewBox(gtk.OrientationVertical, 0) mm.Range(func(k, v any) bool { userbox := gtk.NewBox(gtk.OrientationHorizontal, 0) u := v.(stanza.Presence) var mu MucUser var ocu OccupantID u.Get(&mu) u.Get(&ocu) nick_label := gtk.NewLabel(Jid.MustParse(u.From).Resourcepart()) userbox.Append(nick_label) gen.Append(userbox) return true }) memberList.SetChild(gen) } func showErrorDialog(err error) { fmt.Println(err.Error()) }