Fix community menus on macos
3rd tries the charm?
This commit is contained in:
parent
74f5386b29
commit
56100ee8bb
4 changed files with 100 additions and 87 deletions
|
|
@ -751,6 +751,7 @@ set(QML_SOURCES
|
|||
resources/qml/components/NotificationBubble.qml
|
||||
resources/qml/components/PowerlevelIndicator.qml
|
||||
resources/qml/components/ReorderableListview.qml
|
||||
resources/qml/components/SpaceMenu.qml
|
||||
resources/qml/components/SpaceMenuLevel.qml
|
||||
resources/qml/components/TextButton.qml
|
||||
resources/qml/components/UserListRow.qml
|
||||
|
|
|
|||
|
|
@ -750,15 +750,6 @@ Page {
|
|||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: nestedSpaceMenuLevel
|
||||
|
||||
SpaceMenuLevel {
|
||||
childMenu: rootSpaceMenu.childMenu
|
||||
roomid: roomContextMenu.roomid
|
||||
}
|
||||
}
|
||||
|
||||
InputDialog {
|
||||
id: newTag
|
||||
|
||||
|
|
@ -839,13 +830,10 @@ Page {
|
|||
onTriggered: newTag.show()
|
||||
}
|
||||
}
|
||||
SpaceMenuLevel {
|
||||
SpaceMenu {
|
||||
id: rootSpaceMenu
|
||||
|
||||
childMenu: nestedSpaceMenuLevel
|
||||
position: -1
|
||||
roomid: roomContextMenu.roomid
|
||||
title: qsTr("Add or remove from community...")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
40
resources/qml/components/SpaceMenu.qml
Normal file
40
resources/qml/components/SpaceMenu.qml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import im.nheko
|
||||
|
||||
Menu {
|
||||
id: spacesMenu
|
||||
|
||||
property string roomid
|
||||
|
||||
property bool loadChildren: false
|
||||
|
||||
title: qsTr("Add or remove from community...")
|
||||
|
||||
onAboutToShow: loadChildren = true
|
||||
//onAboutToHide: loadChildren = false
|
||||
|
||||
Component {
|
||||
id: level
|
||||
|
||||
SpaceMenuLevel {
|
||||
childMenu: level
|
||||
roomid: spacesMenu.roomid
|
||||
}
|
||||
}
|
||||
|
||||
Instantiator {
|
||||
id: inst
|
||||
model: spacesMenu.loadChildren ? Communities.spaceChildrenListFromIndex(spacesMenu.roomid, -1) : undefined
|
||||
onObjectAdded: (idx, o) => {
|
||||
spacesMenu.insertMenu(idx, o)
|
||||
}
|
||||
onObjectRemoved: (index, object) => spacesMenu.removeMenu(object)
|
||||
|
||||
delegate: level
|
||||
}
|
||||
}
|
||||
|
|
@ -9,91 +9,75 @@ import im.nheko
|
|||
Menu {
|
||||
id: spacesMenu
|
||||
|
||||
property string roomid
|
||||
property Component childMenu
|
||||
required property string roomid
|
||||
required property Component childMenu
|
||||
required property var modelData
|
||||
|
||||
property var modelData: undefined
|
||||
property int position: modelData == undefined ? -2 : modelData.treeIndex
|
||||
title: modelData != undefined ? modelData.name : qsTr("Add or remove from community")
|
||||
property int position: modelData.treeIndex
|
||||
title: modelData.name
|
||||
property bool loadChildren: false
|
||||
|
||||
onAboutToShow: {
|
||||
loadChildren = true;
|
||||
menuFilter.updateTarget();
|
||||
}
|
||||
onAboutToShow: loadChildren = true
|
||||
//onAboutToHide: loadChildren = false
|
||||
|
||||
ButtonGroup {
|
||||
id: modificationGroup
|
||||
//visible: position != -1
|
||||
}
|
||||
|
||||
NhekoMenuVisibilityFilter on contentData {
|
||||
id: menuFilter
|
||||
MenuItem {
|
||||
text: qsTr("Official community for this room")
|
||||
ButtonGroup.group: modificationGroup
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && modelData.canonical)
|
||||
enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent)
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, true)
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Affiliated community for this room")
|
||||
ButtonGroup.group: modificationGroup
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && !modelData.canonical)
|
||||
enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent)
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, false)
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Listed only for community members")
|
||||
ButtonGroup.group: modificationGroup
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && !modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || modelData.childValid) && (!modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, true, false)
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Listed only for room members")
|
||||
ButtonGroup.group: modificationGroup
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (!modelData.childValid && modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild) && (modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, false, false)
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Not related")
|
||||
ButtonGroup.group: modificationGroup
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (!modelData.childValid && !modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || !modelData.childValid) && (!modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, false, false)
|
||||
}
|
||||
|
||||
Component {
|
||||
MenuItem {
|
||||
text: qsTr("Official community for this room")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && modelData.canonical)
|
||||
enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent)
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, true)
|
||||
}
|
||||
}
|
||||
Component {
|
||||
MenuItem {
|
||||
text: qsTr("Affiliated community for this room")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && !modelData.canonical)
|
||||
enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent)
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, false)
|
||||
}
|
||||
}
|
||||
Component {
|
||||
MenuItem {
|
||||
text: qsTr("Listed only for community members")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (modelData.childValid && !modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || modelData.childValid) && (!modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, true, false)
|
||||
}
|
||||
}
|
||||
Component {
|
||||
MenuItem {
|
||||
text: qsTr("Listed only for room members")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (!modelData.childValid && modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild) && (modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, false, false)
|
||||
}
|
||||
}
|
||||
Component {
|
||||
MenuItem {
|
||||
text: qsTr("Not related")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1
|
||||
checkable: true
|
||||
checked: spacesMenu.position >= 0 && (!modelData.childValid && !modelData.parentValid)
|
||||
enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || !modelData.childValid) && (!modelData.parentValid || modelData.canEditParent))
|
||||
onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, false, false)
|
||||
}
|
||||
MenuSeparator {
|
||||
//text: qsTr("Subcommunities")
|
||||
ButtonGroup.group: modificationGroup
|
||||
visible: position != -1 && inst.model != undefined
|
||||
}
|
||||
|
||||
Instantiator {
|
||||
id: inst
|
||||
model: spacesMenu.loadChildren ? Communities.spaceChildrenListFromIndex(spacesMenu.roomid, spacesMenu.position) : undefined
|
||||
onObjectAdded: (idx, o) => {
|
||||
spacesMenu.insertMenu(idx + 6, o)
|
||||
}
|
||||
Component {
|
||||
MenuSeparator {
|
||||
//text: qsTr("Subcommunities")
|
||||
visible: position != -1// && menuFilter.model != undefined
|
||||
}
|
||||
}
|
||||
|
||||
model: spacesMenu.loadChildren ? Communities.spaceChildrenListFromIndex(spacesMenu.roomid, spacesMenu.position) : []
|
||||
onObjectRemoved: (index, object) => spacesMenu.removeMenu(object)
|
||||
|
||||
delegate: childMenu
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue