Fix focus and simplify popup-opener menu items

Introduce a HmenuItemPopupSpawner component that takes care of reacting
to onTriggered signals and calling the utils.makePopup() function.

The combination of this new component used in HMenu to open a HPopup
now correctly takes and restore focus to the right element when closed.
This commit is contained in:
miruka
2019-12-20 10:29:45 -04:00
parent d9b7118f45
commit 9bd739a0db
9 changed files with 85 additions and 58 deletions

View File

@@ -91,22 +91,19 @@ HTileDelegate {
}
contextMenu: HMenu {
HMenuItem {
HMenuItemPopupSpawner {
visible: joined
enabled: model.data.can_invite
icon.name: "room-send-invite"
text: qsTr("Invite members")
onTriggered: utils.makePopup(
"Popups/InviteToRoomPopup.qml",
window,
{
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
invitingAllowed: Qt.binding(() => model.data.can_invite)
}
)
popup: "Popups/InviteToRoomPopup.qml"
properties: ({
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
invitingAllowed: Qt.binding(() => model.data.can_invite)
})
}
HMenuItem {
@@ -129,39 +126,32 @@ HTileDelegate {
)
}
HMenuItem {
HMenuItemPopupSpawner {
visible: invited || joined
icon.name: invited ? "invite-decline" : "room-leave"
icon.color: theme.colors.negativeBackground
text: invited ? qsTr("Decline invite") : qsTr("Leave")
onTriggered: utils.makePopup(
"Popups/LeaveRoomPopup.qml",
window,
{
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
}
)
popup: "Popups/LeaveRoomPopup.qml"
properties: ({
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
})
}
HMenuItem {
HMenuItemPopupSpawner {
icon.name: "room-forget"
icon.color: theme.colors.negativeBackground
text: qsTr("Forget")
onTriggered: utils.makePopup(
"Popups/ForgetRoomPopup.qml",
window,
{
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
},
null,
false,
)
popup: "Popups/ForgetRoomPopup.qml"
autoDestruct: false
properties: ({
userId: model.user_id,
roomId: model.data.room_id,
roomName: model.data.display_name,
})
}
}
}