ui changes

This commit is contained in:
2026-01-31 10:02:04 +00:00
parent 19b43345f7
commit ca4548d3b0
2 changed files with 58 additions and 17 deletions

View File

@@ -16,6 +16,19 @@ import (
"path/filepath" "path/filepath"
) )
func generatePresenceWidget(p stanza.Packet) gtk.Widgetter {
presence, ok := p.(stanza.Presence)
if !ok {
return gtk.NewLabel("Unsupported message.")
}
if presence.Type == stanza.PresenceTypeUnavailable {
return gtk.NewLabel(jid.MustParse(presence.From).Resourcepart() + " left the room")
} else {
return gtk.NewLabel(jid.MustParse(presence.From).Resourcepart() + " joined the room")
}
}
func generateMessageWidget(p stanza.Packet) gtk.Widgetter { func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
m, ok := p.(stanza.Message) m, ok := p.(stanza.Message)
if !ok { if !ok {

42
main.go
View File

@@ -20,7 +20,6 @@ import (
_ "embed" _ "embed"
"encoding/xml" "encoding/xml"
"runtime" "runtime"
) )
var loadedConfig lambdaConfig var loadedConfig lambdaConfig
@@ -181,7 +180,6 @@ func main() {
return return
} }
var mu MucUser var mu MucUser
var ocu OccupantID var ocu OccupantID
@@ -206,6 +204,25 @@ func main() {
typed_unit.Members.Store(ocu.ID, presence) typed_unit.Members.Store(ocu.ID, presence)
} else { } else {
typed_unit.Members.Delete(ocu.ID) typed_unit.Members.Delete(ocu.ID)
glib.IdleAdd(func() {
uiQueue <- func() {
b := gtk.NewLabel("")
ba, ok := generatePresenceWidget(p).(*gtk.Label)
if ok {
b = ba
}
tab, ok := tabs.Load(muc)
typed_tab := tab.(*chatTab)
if ok {
typed_tab.msgs.Append(b)
scrollToBottomAfterUpdate(scroller)
} else {
fmt.Println("Got message when the tab does not exist!")
}
}
})
} }
mucmembers.Store(muc, typed_unit) mucmembers.Store(muc, typed_unit)
@@ -214,7 +231,8 @@ func main() {
// The code is basically the exact same as above, we just don't check for mucuser // The code is basically the exact same as above, we just don't check for mucuser
user := jid.MustParse(presence.From).Bare().String() user := jid.MustParse(presence.From).Bare().String()
_, ok := userdevices.Load(user) _, ok := userdevices.Load(user)
if !ok { _, mok := mucmembers.Load(user)
if !ok && !mok { // FIXME: The initial muc presence gets picked up from this check
userdevices.Store(user, userUnit{}) userdevices.Store(user, userUnit{})
createTab(user, false) createTab(user, false)
@@ -291,7 +309,7 @@ func activate(app *gtk.Application) {
window.SetTitle("Lambda") window.SetTitle("Lambda")
window.Window.AddCSSClass("ssd") window.Window.AddCSSClass("ssd")
menu = gtk.NewBox(gtk.OrientationHorizontal, 0) menu = gtk.NewBox(gtk.OrientationVertical, 0)
/* /*
f_menu := gtk.NewMenuButton() f_menu := gtk.NewMenuButton()
f_menu.SetLabel("File") f_menu.SetLabel("File")
@@ -333,12 +351,22 @@ func activate(app *gtk.Application) {
// scroller.SetChild(empty_dialog) // scroller.SetChild(empty_dialog)
scroller.SetChild(empty_dialog) scroller.SetChild(empty_dialog)
menu_scroll := gtk.NewScrolledWindow() menu_scroll := gtk.NewScrolledWindow()
menu_scroll.SetHExpand(true)
menu_scroll.SetChild(menu) menu_scroll.SetChild(menu)
box.Append(menu_scroll) // box.Append(menu_scroll)
chatbox := gtk.NewBox(gtk.OrientationHorizontal, 0) chatbox := gtk.NewBox(gtk.OrientationHorizontal, 0)
chatbox.Append(scroller) // chatbox.Append(menu_scroll)
chatbox.Append(memberList) chat_pane := gtk.NewPaned(gtk.OrientationHorizontal)
chat_pane.SetStartChild(scroller)
chat_pane.SetEndChild(memberList)
main_pane := gtk.NewPaned(gtk.OrientationHorizontal)
main_pane.SetStartChild(menu_scroll)
main_pane.SetEndChild(chat_pane)
chatbox.Append(main_pane)
box.Append(chatbox) box.Append(chatbox)
entry_box := gtk.NewBox(gtk.OrientationHorizontal, 0) entry_box := gtk.NewBox(gtk.OrientationHorizontal, 0)