diff --git a/assets/cancel.png b/assets/cancel.png new file mode 100644 index 0000000..ef96f89 Binary files /dev/null and b/assets/cancel.png differ diff --git a/gtk-helpers.go b/gtk-helpers.go index 232b90f..984ef0b 100644 --- a/gtk-helpers.go +++ b/gtk-helpers.go @@ -196,8 +196,11 @@ func switchToTab(jid string, w *gtk.Window) { win.Present() }) userbox.AddController(gesture) - - gen.Append(userbox) + if mu.MucUserItem.Role == "moderator" { + gen.Prepend(userbox) + } else { + gen.Append(userbox) + } return true }) diff --git a/gtk-message.go b/gtk-message.go index 1293129..94bf417 100644 --- a/gtk-message.go +++ b/gtk-message.go @@ -49,7 +49,27 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter { readmarker := Marker{} ok = m.Get(&readmarker) if ok { - return gtk.NewLabel(fmt.Sprintf("%s has read to this point", JidMustParse(m.From).Resource)) + b := gtk.NewBox(gtk.OrientationHorizontal, 0) + b.Append(gtk.NewLabel(fmt.Sprintf("%s has read to this point", JidMustParse(m.From).Resource))) + return b + } + + indicator := stanza.StateComposing{} + ok = m.Get(&indicator) + if ok { // TODO: Display typing indicator in a stat bar or something similar + b := gtk.NewBox(gtk.OrientationHorizontal, 0) + b.Append(gtk.NewLabel(fmt.Sprintf("%s is typing...", JidMustParse(m.From).Resource))) + return b + } + + if m.Error.Type != "" { + error_box := gtk.NewBox(gtk.OrientationHorizontal, 0) + cancel_img := gtk.NewImageFromPaintable(clientAssets["cancel"]) + error_label := gtk.NewLabel(m.Error.Text) + + error_box.Append(cancel_img) + error_box.Append(error_label) + return error_box } diff --git a/main.go b/main.go index 3628574..e4b3df6 100644 --- a/main.go +++ b/main.go @@ -81,6 +81,9 @@ var noneMedalB64 string = base64.StdEncoding.EncodeToString(noneMedalBytes) var outcastMedalBytes []byte var outcastMedalB64 string = base64.StdEncoding.EncodeToString(outcastMedalBytes) +//go:embed assets/cancel.png +var cancelBytes []byte +var cancelB64 string = base64.StdEncoding.EncodeToString(cancelBytes) var clientAssets map[string]gdk.Paintabler = make(map[string]gdk.Paintabler) @@ -113,6 +116,14 @@ func init() { loader = gdkpixbuf.NewPixbufLoader() + cancelData, _ := base64.StdEncoding.DecodeString(cancelB64) + loader.Write(cancelData) + loader.Close() + + clientAssets["cancel"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) + + loader = gdkpixbuf.NewPixbufLoader() + adminMedalData, _ := base64.StdEncoding.DecodeString(adminMedalB64) loader.Write(adminMedalData) loader.Close() @@ -364,6 +375,7 @@ func main() { userdevices.Store(user, typed_unit) } + time.Sleep(1 * time.Second) }) c, err := xmpp.NewClient(&config, router, func(err error) {