forked from cwtch.im/ui
Deleting Contacts, Alerting, Click to Talk
This commit is contained in:
parent
1c614a9e66
commit
1a800a44bc
|
@ -16,9 +16,11 @@ func GroupPoller(getContact func(string) *gobjects.Contact, updateContact func(s
|
||||||
for i := range groups {
|
for i := range groups {
|
||||||
group := the.Peer.GetGroup(groups[i])
|
group := the.Peer.GetGroup(groups[i])
|
||||||
if group != nil && group.GroupID != "" {
|
if group != nil && group.GroupID != "" {
|
||||||
log.Debugf("Found a Group: %v %v", group.GroupID, group.GroupServer)
|
deleted,_ := group.GetAttribute("deleted")
|
||||||
|
if deleted != "deleted" {
|
||||||
getContact(group.GroupID).Status = int(servers[group.GroupServer])
|
getContact(group.GroupID).Status = int(servers[group.GroupServer])
|
||||||
updateContact(group.GroupID)
|
updateContact(group.GroupID)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Errorf("grouppoller found a group that is nil :/")
|
log.Errorf("grouppoller found a group that is nil :/")
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,9 @@ func PresencePoller(getContact func(string) *gobjects.Contact, addContact func(c
|
||||||
if ct == nil { // new contact has attempted to connect with us, treat it as an invite
|
if ct == nil { // new contact has attempted to connect with us, treat it as an invite
|
||||||
toc := the.Peer.GetContact(contacts[i])
|
toc := the.Peer.GetContact(contacts[i])
|
||||||
c, _ := the.Peer.GetProfile().GetContact(contacts[i])
|
c, _ := the.Peer.GetProfile().GetContact(contacts[i])
|
||||||
|
deleted,_ := c.GetAttribute("deleted")
|
||||||
|
|
||||||
|
if deleted != "deleted" {
|
||||||
addContact(&gobjects.Contact{
|
addContact(&gobjects.Contact{
|
||||||
toc.Onion,
|
toc.Onion,
|
||||||
toc.Name,
|
toc.Name,
|
||||||
|
@ -33,6 +36,7 @@ func PresencePoller(getContact func(string) *gobjects.Contact, addContact func(c
|
||||||
event.Data: c.Name,
|
event.Data: c.Name,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cxnState, found := the.Peer.GetPeers()[contacts[i]]
|
cxnState, found := the.Peer.GetPeers()[contacts[i]]
|
||||||
if !found {
|
if !found {
|
||||||
|
|
|
@ -28,6 +28,7 @@ type GrandCentralDispatcher struct {
|
||||||
// contact list stuff
|
// contact list stuff
|
||||||
_ func(handle, displayName, image, server string, badge, status int, trusted bool) `signal:"AddContact"`
|
_ func(handle, displayName, image, server string, badge, status int, trusted bool) `signal:"AddContact"`
|
||||||
_ func(handle, displayName, image, server string, badge, status int, trusted bool) `signal:"UpdateContact"`
|
_ func(handle, displayName, image, server string, badge, status int, trusted bool) `signal:"UpdateContact"`
|
||||||
|
_ func(handle, key, value string) `signal:"UpdateContactAttribute"`
|
||||||
|
|
||||||
// messages pane stuff
|
// messages pane stuff
|
||||||
_ func(handle, from, displayName, message, image string, mID uint, fromMe bool, ts string) `signal:"AppendMessage"`
|
_ func(handle, from, displayName, message, image string, mID uint, fromMe bool, ts string) `signal:"AppendMessage"`
|
||||||
|
@ -53,11 +54,13 @@ type GrandCentralDispatcher struct {
|
||||||
_ func(str string) `signal:"popup,auto"`
|
_ func(str string) `signal:"popup,auto"`
|
||||||
_ func(nick string) `signal:"updateNick,auto"`
|
_ func(nick string) `signal:"updateNick,auto"`
|
||||||
_ func(server, groupName string) `signal:"createGroup,auto"`
|
_ func(server, groupName string) `signal:"createGroup,auto"`
|
||||||
|
_ func(groupID string) `signal:"leaveGroup,auto"`
|
||||||
_ func() `signal:"requestGroupSettings,auto"`
|
_ func() `signal:"requestGroupSettings,auto"`
|
||||||
_ func(groupID, nick string) `signal:"saveGroupSettings,auto"`
|
_ func(groupID, nick string) `signal:"saveGroupSettings,auto"`
|
||||||
_ func() `signal:"requestPeerSettings,auto"`
|
_ func() `signal:"requestPeerSettings,auto"`
|
||||||
_ func(onion, nick string) `signal:"savePeerSettings,auto"`
|
_ func(onion, nick string) `signal:"savePeerSettings,auto"`
|
||||||
_ func(onion, groupID string) `signal:"inviteToGroup,auto"`
|
_ func(onion, groupID string) `signal:"inviteToGroup,auto"`
|
||||||
|
_ func(onion, key, nick string) `signal:"setAttribute,auto"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *GrandCentralDispatcher) sendMessage(message string, mID uint) {
|
func (this *GrandCentralDispatcher) sendMessage(message string, mID uint) {
|
||||||
|
@ -120,8 +123,23 @@ func (this *GrandCentralDispatcher) loadMessagesPaneHelper(handle string) {
|
||||||
this.SetCurrentOpenConversation(handle)
|
this.SetCurrentOpenConversation(handle)
|
||||||
c := this.UIState.GetContact(handle)
|
c := this.UIState.GetContact(handle)
|
||||||
|
|
||||||
|
if c == nil {
|
||||||
|
this.UIState.AddContact(&gobjects.Contact{
|
||||||
|
handle,
|
||||||
|
handle,
|
||||||
|
cwutil.RandomProfileImage(handle),
|
||||||
|
"",
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
c.Badge = 0
|
c.Badge = 0
|
||||||
this.UIState.UpdateContact(handle)
|
this.UIState.UpdateContact(handle)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if len(handle) == 32 { // LOAD GROUP
|
if len(handle) == 32 { // LOAD GROUP
|
||||||
log.Debugf("LOADING GROUP %s", handle)
|
log.Debugf("LOADING GROUP %s", handle)
|
||||||
|
@ -255,11 +273,11 @@ func (this *GrandCentralDispatcher) requestGroupSettings() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.SupplyGroupSettings(this.CurrentOpenConversation(), nick, group.GroupServer, invite, contactnames, contactaddrs)
|
this.SupplyGroupSettings(group.GroupID, nick, group.GroupServer, invite, contactnames, contactaddrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *GrandCentralDispatcher) saveGroupSettings(groupID, nick string) {
|
func (this *GrandCentralDispatcher) saveGroupSettings(groupID, nick string) {
|
||||||
group := the.Peer.GetGroup(this.CurrentOpenConversation())
|
group := the.Peer.GetGroup(groupID)
|
||||||
|
|
||||||
if group == nil {
|
if group == nil {
|
||||||
log.Errorf("couldn't find group %v", groupID)
|
log.Errorf("couldn't find group %v", groupID)
|
||||||
|
@ -342,9 +360,13 @@ func (this *GrandCentralDispatcher) importString(str string) {
|
||||||
|
|
||||||
checkc := the.Peer.GetContact(onion)
|
checkc := the.Peer.GetContact(onion)
|
||||||
if checkc != nil {
|
if checkc != nil {
|
||||||
|
deleted,_ := checkc.GetAttribute("deleted")
|
||||||
|
if deleted != "deleted" {
|
||||||
this.InvokePopup("already have this contact")
|
this.InvokePopup("already have this contact")
|
||||||
return //TODO: bring them to the duplicate
|
return //TODO: bring them to the duplicate
|
||||||
}
|
}
|
||||||
|
this.SetAttribute(onion, "deleted", "")
|
||||||
|
}
|
||||||
|
|
||||||
this.UIState.AddContact(&gobjects.Contact{
|
this.UIState.AddContact(&gobjects.Contact{
|
||||||
Handle: onion,
|
Handle: onion,
|
||||||
|
@ -398,3 +420,25 @@ func (this *GrandCentralDispatcher) inviteToGroup(onion, groupID string) {
|
||||||
log.Errorf("inviting %v to %v: %v", onion, groupID, err)
|
log.Errorf("inviting %v to %v: %v", onion, groupID, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *GrandCentralDispatcher) leaveGroup(groupID string) {
|
||||||
|
the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetGroupAttribute, map[event.Field]string{
|
||||||
|
event.GroupID: groupID,
|
||||||
|
event.Key: "deleted",
|
||||||
|
event.Data: "deleted",
|
||||||
|
}))
|
||||||
|
this.UIState.UpdateContactAttribute(groupID, "deleted", "deleted")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *GrandCentralDispatcher) setAttribute(onion, key, value string) {
|
||||||
|
pp,_ := the.Peer.GetProfile().GetContact(onion)
|
||||||
|
if pp != nil {
|
||||||
|
pp.SetAttribute(key, value)
|
||||||
|
the.CwtchApp.EventBus().Publish(event.NewEvent(event.SetPeerAttribute, map[event.Field]string{
|
||||||
|
event.RemotePeer: onion,
|
||||||
|
event.Key: key,
|
||||||
|
event.Data: value,
|
||||||
|
}))
|
||||||
|
this.UIState.UpdateContactAttribute(onion, key, value)
|
||||||
|
}
|
||||||
|
}
|
|
@ -49,6 +49,8 @@ func (this *InterfaceState) AddContact(c *gobjects.Contact) {
|
||||||
func (this *InterfaceState) GetContact(handle string) *gobjects.Contact {
|
func (this *InterfaceState) GetContact(handle string) *gobjects.Contact {
|
||||||
if _, found := this.contacts[handle]; !found {
|
if _, found := this.contacts[handle]; !found {
|
||||||
if len(handle) == 32 {
|
if len(handle) == 32 {
|
||||||
|
group := the.Peer.GetGroup(handle)
|
||||||
|
if group != nil {
|
||||||
this.AddContact(&gobjects.Contact{
|
this.AddContact(&gobjects.Contact{
|
||||||
handle,
|
handle,
|
||||||
handle,
|
handle,
|
||||||
|
@ -58,9 +60,14 @@ func (this *InterfaceState) GetContact(handle string) *gobjects.Contact {
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
})
|
})
|
||||||
group := the.Peer.GetGroup(handle)
|
|
||||||
go the.Peer.JoinServer(group.GroupServer)
|
go the.Peer.JoinServer(group.GroupServer)
|
||||||
} else {
|
} else {
|
||||||
|
log.Errorf("Attempting to add non existent group to ui %v", handle)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
contact := the.Peer.GetContact(handle)
|
||||||
|
if contact != nil && handle != contact.Onion {
|
||||||
this.AddContact(&gobjects.Contact{
|
this.AddContact(&gobjects.Contact{
|
||||||
handle,
|
handle,
|
||||||
handle,
|
handle,
|
||||||
|
@ -70,7 +77,9 @@ func (this *InterfaceState) GetContact(handle string) *gobjects.Contact {
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
})
|
})
|
||||||
go the.Peer.PeerWithOnion(handle)
|
} else if contact == nil {
|
||||||
|
log.Errorf("Attempting to add non existent contact to ui %v", handle)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,20 +87,9 @@ func (this *InterfaceState) GetContact(handle string) *gobjects.Contact {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *InterfaceState) AddMessage(m *gobjects.Message) {
|
func (this *InterfaceState) AddMessage(m *gobjects.Message) {
|
||||||
_, found := this.contacts[m.Handle]
|
this.GetContact(m.From)
|
||||||
if !found {
|
|
||||||
this.AddContact(&gobjects.Contact{
|
|
||||||
m.Handle,
|
|
||||||
m.Handle,
|
|
||||||
cwutil.RandomProfileImage(m.Handle),
|
|
||||||
"",
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
_, found = this.messages[m.Handle]
|
_, found := this.messages[m.Handle]
|
||||||
if !found {
|
if !found {
|
||||||
this.messages[m.Handle] = make([]*gobjects.Message, 0)
|
this.messages[m.Handle] = make([]*gobjects.Message, 0)
|
||||||
}
|
}
|
||||||
|
@ -110,10 +108,12 @@ func (this *InterfaceState) AddMessage(m *gobjects.Message) {
|
||||||
this.parentGcd.AppendMessage(m.Handle, m.From, m.DisplayName, m.Message, m.Image, uint(m.MessageID), m.FromMe, m.Timestamp.Format(constants.TIME_FORMAT))
|
this.parentGcd.AppendMessage(m.Handle, m.From, m.DisplayName, m.Message, m.Image, uint(m.MessageID), m.FromMe, m.Timestamp.Format(constants.TIME_FORMAT))
|
||||||
} else {
|
} else {
|
||||||
c := this.GetContact(m.Handle)
|
c := this.GetContact(m.Handle)
|
||||||
|
if c != nil {
|
||||||
c.Badge++
|
c.Badge++
|
||||||
this.UpdateContact(c.Handle)
|
this.UpdateContact(c.Handle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,3 +131,7 @@ func (this *InterfaceState) UpdateContact(handle string) {
|
||||||
this.parentGcd.UpdateContact(c.Handle, c.DisplayName, c.Image, c.Server, c.Badge, c.Status, c.Trusted)
|
this.parentGcd.UpdateContact(c.Handle, c.DisplayName, c.Image, c.Server, c.Badge, c.Status, c.Trusted)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *InterfaceState) UpdateContactAttribute(handle, key, value string) {
|
||||||
|
this.parentGcd.UpdateContactAttribute(handle, key, value)
|
||||||
|
}
|
||||||
|
|
10
main.go
10
main.go
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
libapp "cwtch.im/cwtch/app"
|
libapp "cwtch.im/cwtch/app"
|
||||||
"cwtch.im/cwtch/model"
|
|
||||||
"cwtch.im/ui/go/characters"
|
"cwtch.im/ui/go/characters"
|
||||||
"cwtch.im/ui/go/cwutil"
|
"cwtch.im/ui/go/cwutil"
|
||||||
"cwtch.im/ui/go/gobjects"
|
"cwtch.im/ui/go/gobjects"
|
||||||
|
@ -142,6 +141,8 @@ func loadCwtchData(gcd *gothings.GrandCentralDispatcher, acn connectivity.ACN) {
|
||||||
for i := range contacts {
|
for i := range contacts {
|
||||||
contact, _ := the.Peer.GetProfile().GetContact(contacts[i])
|
contact, _ := the.Peer.GetProfile().GetContact(contacts[i])
|
||||||
displayName, _ := contact.GetAttribute("nick")
|
displayName, _ := contact.GetAttribute("nick")
|
||||||
|
deleted, _ := contact.GetAttribute("deleted")
|
||||||
|
if deleted != "deleted" {
|
||||||
gcd.UIState.AddContact(&gobjects.Contact{
|
gcd.UIState.AddContact(&gobjects.Contact{
|
||||||
Handle: contacts[i],
|
Handle: contacts[i],
|
||||||
DisplayName: displayName,
|
DisplayName: displayName,
|
||||||
|
@ -149,16 +150,18 @@ func loadCwtchData(gcd *gothings.GrandCentralDispatcher, acn connectivity.ACN) {
|
||||||
Trusted: contact.Trusted,
|
Trusted: contact.Trusted,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
groups := the.Peer.GetGroups()
|
groups := the.Peer.GetGroups()
|
||||||
for i := range groups {
|
for i := range groups {
|
||||||
group := the.Peer.GetGroup(groups[i])
|
group := the.Peer.GetGroup(groups[i])
|
||||||
group.NewMessage = make(chan model.Message)
|
|
||||||
the.Peer.JoinServer(group.GroupServer)
|
|
||||||
nick, exists := group.GetAttribute("nick")
|
nick, exists := group.GetAttribute("nick")
|
||||||
if !exists {
|
if !exists {
|
||||||
nick = group.GroupID[:12]
|
nick = group.GroupID[:12]
|
||||||
}
|
}
|
||||||
|
deleted,_ := group.GetAttribute("deleted")
|
||||||
|
if deleted != "deleted" {
|
||||||
|
the.Peer.JoinServer(group.GroupServer)
|
||||||
gcd.UIState.AddContact(&gobjects.Contact{
|
gcd.UIState.AddContact(&gobjects.Contact{
|
||||||
Handle: group.GroupID,
|
Handle: group.GroupID,
|
||||||
DisplayName: nick,
|
DisplayName: nick,
|
||||||
|
@ -167,4 +170,5 @@ func loadCwtchData(gcd *gothings.GrandCentralDispatcher, acn connectivity.ACN) {
|
||||||
Trusted: group.Accepted,
|
Trusted: group.Accepted,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,9 @@ ColumnLayout {
|
||||||
"_ts": ts,
|
"_ts": ts,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// If the window is out of focus, alert the user (makes taskbar light up)
|
||||||
|
windowItem.alert(0)
|
||||||
|
|
||||||
if (sv.contentY + sv.height >= sv.contentHeight - colMessages.height && sv.contentHeight > sv.height) {
|
if (sv.contentY + sv.height >= sv.contentHeight - colMessages.height && sv.contentHeight > sv.height) {
|
||||||
sv.contentY = sv.contentHeight - sv.height
|
sv.contentY = sv.contentHeight - sv.height
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import "../styles"
|
||||||
import "../utils.js" as Utils
|
import "../utils.js" as Utils
|
||||||
|
|
||||||
ColumnLayout { // groupSettingsPane
|
ColumnLayout { // groupSettingsPane
|
||||||
|
id: gsp
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
property string groupID
|
property string groupID
|
||||||
property variant addrbook
|
property variant addrbook
|
||||||
|
@ -104,13 +105,24 @@ ColumnLayout { // groupSettingsPane
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SimpleButton {
|
||||||
|
icon: "regular/trash-alt"
|
||||||
|
text: "delete"
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
gcd.leaveGroup(groupID)
|
||||||
|
theStack.pane = theStack.emptyPane
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}//end of column with padding
|
}//end of column with padding
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: gcd
|
target: gcd
|
||||||
|
|
||||||
onSupplyGroupSettings: function(gid, name, server, invite, addrbooknames, addrbookaddrs) {
|
onSupplyGroupSettings: function(gid, name, server, invite, addrbooknames, addrbookaddrs) {
|
||||||
groupID = gid
|
console.log("Supplied " + gid + " " + name)
|
||||||
|
gsp.groupID = gid
|
||||||
toolbar.text = name
|
toolbar.text = name
|
||||||
txtGroupName.text = name
|
txtGroupName.text = name
|
||||||
txtServer.text = server
|
txtServer.text = server
|
||||||
|
|
|
@ -65,6 +65,16 @@ ColumnLayout { // peerSettingsPane
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SimpleButton {
|
||||||
|
icon: "regular/trash-alt"
|
||||||
|
text: "delete"
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
gcd.setAttribute(txtOnion.text, "deleted", "deleted")
|
||||||
|
theStack.pane = theStack.emptyPane
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}//end of column with padding
|
}//end of column with padding
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,21 @@ ColumnLayout {
|
||||||
"_badge": badge,
|
"_badge": badge,
|
||||||
"_status": status,
|
"_status": status,
|
||||||
"_trusted": trusted,
|
"_trusted": trusted,
|
||||||
|
"_deleted": false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onUpdateContactAttribute: function(handle, key, value) {
|
||||||
|
if (key == "deleted" && value == "deleted") {
|
||||||
|
for(var i = 0; i<contactsModel.count;i++){
|
||||||
|
if(contactsModel.get(i)["_handle"] == handle) {
|
||||||
|
console.log("deleting contact " + contactsModel.get(i).handle)
|
||||||
|
contactsModel.get(i)._deleted = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ListModel { // CONTACT OBJECTS ARE STORED HERE ...
|
ListModel { // CONTACT OBJECTS ARE STORED HERE ...
|
||||||
|
@ -66,6 +79,7 @@ ColumnLayout {
|
||||||
badge: _badge
|
badge: _badge
|
||||||
status: _status
|
status: _status
|
||||||
trusted: _trusted
|
trusted: _trusted
|
||||||
|
deleted: _deleted
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import CustomQmlTypes 1.0
|
||||||
RowLayout { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
RowLayout { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
visible: true
|
visible: !deleted
|
||||||
|
|
||||||
property alias displayName: cn.text
|
property alias displayName: cn.text
|
||||||
property alias image: imgProfile.source
|
property alias image: imgProfile.source
|
||||||
|
@ -17,6 +17,7 @@ RowLayout { // LOTS OF NESTING TO DEAL WITH QT WEIRDNESS, SORRY
|
||||||
property bool isActive
|
property bool isActive
|
||||||
property bool isHover
|
property bool isHover
|
||||||
property bool trusted
|
property bool trusted
|
||||||
|
property bool deleted
|
||||||
property alias status: imgProfile.status
|
property alias status: imgProfile.status
|
||||||
property string server
|
property string server
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,16 @@ RowLayout {
|
||||||
id: imgProfile
|
id: imgProfile
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
visible: !fromMe
|
visible: !fromMe
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
gcd.broadcast("ResetMessagePane")
|
||||||
|
theStack.pane = theStack.messagePane
|
||||||
|
gcd.loadMessagesPane(from)
|
||||||
|
overlayStack.overlay = overlayStack.chatOverlay
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle { // THIS IS JUST A PRETTY MESSAGE-HOLDING RECTANGLE
|
Rectangle { // THIS IS JUST A PRETTY MESSAGE-HOLDING RECTANGLE
|
||||||
|
|
Loading…
Reference in New Issue