Canonical Parent
So the original space parent and child stuff was technically a bit naughty in that it allowed multiple rooms to be set as the canonical parent. Because while a room can have multiple parents only one should be canonical. This adds the following: - When adding a child or parent there is an extra check to select if the new parent should be canonical - Any parent can be selected as the canonical one from the room settings - All functions ensure that there is only ever one canonical parent by ensuring all others are false when a new one is set.
This commit is contained in:
@@ -24,7 +24,7 @@ FormCard.FormCardPage {
|
||||
|
||||
required property NeoChatConnection connection
|
||||
|
||||
signal addChild(string childId, bool setChildParent)
|
||||
signal addChild(string childId, bool setChildParent, bool canonical)
|
||||
signal newChild(string childName)
|
||||
|
||||
title: isSpace ? i18nc("@title", "Create a Space") : i18nc("@title", "Create a Room")
|
||||
@@ -214,11 +214,18 @@ FormCard.FormCardPage {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
FormCard.FormCheckDelegate {
|
||||
id: makeCanonicalCheck
|
||||
text: i18n("Make this space the canonical parent")
|
||||
checked: enabled
|
||||
|
||||
enabled: existingOfficialCheck.enabled
|
||||
}
|
||||
FormCard.FormButtonDelegate {
|
||||
text: i18nc("@action:button", "Ok")
|
||||
enabled: chosenRoomDelegate.visible
|
||||
onClicked: {
|
||||
root.addChild(chosenRoomDelegate.roomId, existingOfficialCheck.checked);
|
||||
root.addChild(chosenRoomDelegate.roomId, existingOfficialCheck.checked, makeCanonicalCheck.checked);
|
||||
root.closeDialog();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,18 +309,38 @@ FormCard.FormCardPage {
|
||||
}
|
||||
}
|
||||
|
||||
contentItem.children: QQC2.ToolButton {
|
||||
visible: officalParentDelegate?.space.canSendState("m.space.child") && root.room.canSendState("m.space.parent")
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
action: Kirigami.Action {
|
||||
id: removeParentAction
|
||||
text: i18n("Remove parent")
|
||||
icon.name: "edit-delete-remove"
|
||||
onTriggered: root.room.removeParent(officalParentDelegate.modelData)
|
||||
contentItem.children: RowLayout {
|
||||
QQC2.Label {
|
||||
visible: root.room.canonicalParent === officalParentDelegate.modelData
|
||||
text: i18n("Canonical")
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: removeParentAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
QQC2.ToolButton {
|
||||
visible: root.room.canSendState("m.space.parent") && root.room.canonicalParent !== officalParentDelegate.modelData
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
action: Kirigami.Action {
|
||||
id: canonicalParentAction
|
||||
text: i18n("Make canonical parent")
|
||||
icon.name: "checkmark"
|
||||
onTriggered: root.room.canonicalParent = officalParentDelegate.modelData
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: canonicalParentAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
}
|
||||
}
|
||||
QQC2.ToolButton {
|
||||
visible: officalParentDelegate?.space.canSendState("m.space.child") && root.room.canSendState("m.space.parent")
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
action: Kirigami.Action {
|
||||
id: removeParentAction
|
||||
text: i18n("Remove parent")
|
||||
icon.name: "edit-delete-remove"
|
||||
onTriggered: root.room.removeParent(officalParentDelegate.modelData)
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: removeParentAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -445,11 +465,18 @@ FormCard.FormCardPage {
|
||||
text: existingOfficialCheck.space ? (existingOfficialCheck.space.isSpace ? i18n("You do not have a high enough privilege level in the parent to set this state") : i18n("The selected room is not a space")) : i18n("You do not have the privileges to complete this action")
|
||||
textItem.color: Kirigami.Theme.negativeTextColor
|
||||
}
|
||||
FormCard.FormCheckDelegate {
|
||||
id: makeCanonicalCheck
|
||||
text: i18n("Make this space the canonical parent")
|
||||
checked: enabled
|
||||
|
||||
enabled: chosenRoomDelegate.visible
|
||||
}
|
||||
FormCard.FormButtonDelegate {
|
||||
text: i18nc("@action:button", "Ok")
|
||||
enabled: chosenRoomDelegate.visible && root.room.canModifyParent(chosenRoomDelegate.roomId)
|
||||
onClicked: {
|
||||
root.room.addParent(chosenRoomDelegate.roomId)
|
||||
root.room.addParent(chosenRoomDelegate.roomId, makeCanonicalCheck.checked, existingOfficialCheck.checked)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,12 +157,12 @@ Kirigami.Page {
|
||||
}, {
|
||||
title: i18nc("@title", "Create a Child")
|
||||
})
|
||||
dialog.addChild.connect((childId, setChildParent) => {
|
||||
dialog.addChild.connect((childId, setChildParent, canonical) => {
|
||||
// We have to get a room object from the connection as we may not
|
||||
// be adding to the top level parent.
|
||||
let parent = root.currentRoom.connection.room(parentId)
|
||||
if (parent) {
|
||||
parent.addChild(childId, setChildParent)
|
||||
parent.addChild(childId, setChildParent, canonical)
|
||||
}
|
||||
})
|
||||
dialog.newChild.connect(childName => {spaceChildrenModel.addPendingChild(childName)})
|
||||
|
||||
Reference in New Issue
Block a user