From 45b02ae34e3ee7b63c3b6fd53145f02fa03683a3 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Wed, 13 Aug 2025 17:34:08 +0200 Subject: [PATCH] Cleanup buttons Mostly removing the usage of the action property, since there's no point in using it. Also add some translation contexts and some other minor cleanup --- src/app/qml/AttachmentPane.qml | 16 +- src/app/qml/NewPollDialog.qml | 16 +- src/app/qml/UserDetailDialog.qml | 190 +++++++++++------------- src/messagecontent/ChatBarComponent.qml | 45 +++--- src/messagecontent/VideoComponent.qml | 18 ++- src/rooms/ExploreComponent.qml | 28 ++-- src/rooms/ExploreComponentMobile.qml | 41 ++--- src/rooms/UserInfo.qml | 10 +- src/settings/DeviceDelegate.qml | 56 +++---- src/settings/Permissions.qml | 19 +-- src/settings/RoomGeneralPage.qml | 17 +-- src/timeline/TimelineView.qml | 50 +++---- 12 files changed, 235 insertions(+), 271 deletions(-) diff --git a/src/app/qml/AttachmentPane.qml b/src/app/qml/AttachmentPane.qml index 52d5d4b02..3701482da 100644 --- a/src/app/qml/AttachmentPane.qml +++ b/src/app/qml/AttachmentPane.qml @@ -58,14 +58,18 @@ ColumnLayout { QQC2.ToolButton { id: cancelAttachmentButton display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - text: i18n("Cancel sending attachment") - icon.name: "dialog-close" - onTriggered: root.attachmentCancelled() - shortcut: "Escape" - } + text: i18nc("@action:button", "Cancel sending attachment") + icon.name: "dialog-close" + onClicked: root.attachmentCancelled() + QQC2.ToolTip.text: text QQC2.ToolTip.visible: hovered + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + + Kirigami.Action { + shortcut: "Escape" + onTriggered: cancelAttachmentButton.clicked() + } } } diff --git a/src/app/qml/NewPollDialog.qml b/src/app/qml/NewPollDialog.qml index 116cc602d..2d0dfadea 100644 --- a/src/app/qml/NewPollDialog.qml +++ b/src/app/qml/NewPollDialog.qml @@ -120,16 +120,12 @@ Kirigami.Dialog { } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - id: removeOptionAction - text: i18nc("@action:button", "Remove option") - icon.name: "edit-delete-remove" - onTriggered: optionModel.remove(optionDelegate.index) - } - QQC2.ToolTip { - text: removeOptionAction.text - delay: Kirigami.Units.toolTipDelay - } + text: i18nc("@action:button", "Remove option") + icon.name: "edit-delete-remove" + onClicked: optionModel.remove(optionDelegate.index) + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } } } diff --git a/src/app/qml/UserDetailDialog.qml b/src/app/qml/UserDetailDialog.qml index 7f91a2200..aa2840395 100644 --- a/src/app/qml/UserDetailDialog.qml +++ b/src/app/qml/UserDetailDialog.qml @@ -142,107 +142,95 @@ Kirigami.Dialog { FormCard.FormButtonDelegate { visible: root.user.id !== root.connection.localUserId && !!root.user - action: Kirigami.Action { - text: !!root.user && root.connection.isIgnored(root.user.id) ? i18n("Unignore this user") : i18n("Ignore this user") - icon.name: "im-invisible-user" - onTriggered: { - root.close(); - root.connection.isIgnored(root.user.id) ? root.connection.removeFromIgnoredUsers(root.user.id) : root.connection.addToIgnoredUsers(root.user.id); - } + text: !!root.user && root.connection.isIgnored(root.user.id) ? i18n("Unignore this user") : i18n("Ignore this user") + icon.name: "im-invisible-user" + onClicked: { + root.close(); + root.connection.isIgnored(root.user.id) ? root.connection.removeFromIgnoredUsers(root.user.id) : root.connection.addToIgnoredUsers(root.user.id); } } FormCard.FormButtonDelegate { visible: root.room && root.user.id !== root.connection.localUserId && room.canSendState("kick") && room.containsUser(root.user.id) && room.memberEffectivePowerLevel(root.user.id) < room.memberEffectivePowerLevel(root.connection.localUserId) - action: Kirigami.Action { - text: i18n("Kick this user") - icon.name: "im-kick-user" - onTriggered: { - let dialog = (root.QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { - title: i18nc("@title:dialog", "Kick User"), - placeholder: i18nc("@info:placeholder", "Reason for kicking this user"), - actionText: i18nc("@action:button 'Kick' as in 'Kick this user from the room'", "Kick"), - icon: "im-kick-user" - }, { - title: i18nc("@title:dialog", "Kick User"), - width: Kirigami.Units.gridUnit * 25 - }); - dialog.accepted.connect(reason => { - root.room.kickMember(root.user.id, reason); - }); - root.close(); - } + text: i18nc("@action:button", "Kick this user") + icon.name: "im-kick-user" + onClicked: { + let dialog = (root.QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { + title: i18nc("@title:dialog", "Kick User"), + placeholder: i18nc("@info:placeholder", "Reason for kicking this user"), + actionText: i18nc("@action:button 'Kick' as in 'Kick this user from the room'", "Kick"), + icon: "im-kick-user" + }, { + title: i18nc("@title:dialog", "Kick User"), + width: Kirigami.Units.gridUnit * 25 + }); + dialog.accepted.connect(reason => { + root.room.kickMember(root.user.id, reason); + }); + root.close(); } } FormCard.FormButtonDelegate { visible: root.room && root.user.id !== root.connection.localUserId && room.canSendState("invite") && !room.containsUser(root.user.id) - action: Kirigami.Action { - enabled: root.room && !root.room.isUserBanned(root.user.id) - text: i18n("Invite this user") - icon.name: "list-add-user" - onTriggered: { - root.room.inviteToRoom(root.user.id); - root.close(); - } + enabled: root.room && !root.room.isUserBanned(root.user.id) + text: i18nc("@action:button", "Invite this user") + icon.name: "list-add-user" + onClicked: { + root.room.inviteToRoom(root.user.id); + root.close(); } } FormCard.FormButtonDelegate { visible: root.room && root.user.id !== root.connection.localUserId && room.canSendState("ban") && !room.isUserBanned(root.user.id) && room.memberEffectivePowerLevel(root.user.id) < room.memberEffectivePowerLevel(root.connection.localUserId) - action: Kirigami.Action { - text: i18n("Ban this user") - icon.name: "im-ban-user" - icon.color: Kirigami.Theme.negativeTextColor - onTriggered: { - let dialog = (root.QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { - title: i18nc("@title:dialog", "Ban User"), - placeholder: i18nc("@info:placeholder", "Reason for banning this user"), - actionText: i18nc("@action:button 'Ban' as in 'Ban this user'", "Ban"), - icon: "im-ban-user" - }, { - title: i18nc("@title:dialog", "Ban User"), - width: Kirigami.Units.gridUnit * 25 - }); - dialog.accepted.connect(reason => { - root.room.ban(root.user.id, reason); - }); - root.close(); - } + text: i18nc("@action:button", "Ban this user") + icon.name: "im-ban-user" + icon.color: Kirigami.Theme.negativeTextColor + onClicked: { + let dialog = (root.QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { + title: i18nc("@title:dialog", "Ban User"), + placeholder: i18nc("@info:placeholder", "Reason for banning this user"), + actionText: i18nc("@action:button 'Ban' as in 'Ban this user'", "Ban"), + icon: "im-ban-user" + }, { + title: i18nc("@title:dialog", "Ban User"), + width: Kirigami.Units.gridUnit * 25 + }); + dialog.accepted.connect(reason => { + root.room.ban(root.user.id, reason); + }); + root.close(); } } FormCard.FormButtonDelegate { visible: root.room && root.user.id !== root.connection.localUserId && room.canSendState("ban") && room.isUserBanned(root.user.id) - action: Kirigami.Action { - text: i18n("Unban this user") - icon.name: "im-irc" - icon.color: Kirigami.Theme.negativeTextColor - onTriggered: { - root.room.unban(root.user.id); - root.close(); - } + text: i18nc("@action:button", "Unban this user") + icon.name: "im-irc" + icon.color: Kirigami.Theme.negativeTextColor + onClicked: { + root.room.unban(root.user.id); + root.close(); } } FormCard.FormButtonDelegate { visible: root.room && root.room.canSendState("m.room.power_levels") - action: Kirigami.Action { - text: i18n("Set user power level") - icon.name: "visibility" - onTriggered: { - let dialog = powerLevelDialog.createObject(this, { - room: root.room, - userId: root.user.id, - powerLevel: root.room.memberEffectivePowerLevel(root.user.id) - }); - dialog.open(); - root.close(); - } + text: i18nc("@action:button", "Set user power level") + icon.name: "visibility" + onClicked: { + let dialog = powerLevelDialog.createObject(this, { + room: root.room, + userId: root.user.id, + powerLevel: root.room.memberEffectivePowerLevel(root.user.id) + }); + dialog.open(); + root.close(); } Component { @@ -256,48 +244,40 @@ Kirigami.Dialog { FormCard.FormButtonDelegate { visible: root.room && (root.user.id === root.connection.localUserId || room.canSendState("redact")) - action: Kirigami.Action { - text: i18nc("@action:button", "Remove recent messages by this user") - icon.name: "delete" - icon.color: Kirigami.Theme.negativeTextColor - onTriggered: { - let dialog = pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { - title: i18nc("@title:dialog", "Remove Messages"), - placeholder: i18nc("@info:placeholder", "Reason for removing this user's recent messages"), - actionText: i18nc("@action:button 'Remove' as in 'Remove these messages'", "Remove"), - icon: "delete" - }, { - title: i18nc("@title", "Remove Messages"), - width: Kirigami.Units.gridUnit * 25 - }); - dialog.accepted.connect(reason => { - root.room.deleteMessagesByUser(root.user.id, reason); - }); - root.close(); - } + text: i18nc("@action:button", "Remove recent messages by this user") + icon.name: "delete" + icon.color: Kirigami.Theme.negativeTextColor + onClicked: { + let dialog = pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'ReasonDialog'), { + title: i18nc("@title:dialog", "Remove Messages"), + placeholder: i18nc("@info:placeholder", "Reason for removing this user's recent messages"), + actionText: i18nc("@action:button 'Remove' as in 'Remove these messages'", "Remove"), + icon: "delete" + }, { + title: i18nc("@title", "Remove Messages"), + width: Kirigami.Units.gridUnit * 25 + }); + dialog.accepted.connect(reason => { + root.room.deleteMessagesByUser(root.user.id, reason); + }); + root.close(); } } FormCard.FormButtonDelegate { visible: root.user.id !== root.connection.localUserId - action: Kirigami.Action { - text: root.connection.directChatExists(root.user) ? i18nc("%1 is the name of the user.", "Chat with %1", root.room ? root.room.member(root.user.id).htmlSafeDisplayName : QmlUtils.escapeString(root.user.displayName)) : i18n("Invite to private chat") - icon.name: "document-send" - onTriggered: { - root.connection.requestDirectChat(root.user.id); - root.close(); - } + text: root.connection.directChatExists(root.user) ? i18nc("%1 is the name of the user.", "Chat with %1", root.room ? root.room.member(root.user.id).htmlSafeDisplayName : QmlUtils.escapeString(root.user.displayName)) : i18n("Invite to private chat") + icon.name: "document-send" + onClicked: { + root.connection.requestDirectChat(root.user.id); + root.close(); } } FormCard.FormButtonDelegate { - action: Kirigami.Action { - text: i18n("Copy link") - icon.name: "username-copy" - onTriggered: { - Clipboard.saveText("https://matrix.to/#/" + root.user.id); - } - } + text: i18n("Copy link") + icon.name: "username-copy" + onClicked: Clipboard.saveText("https://matrix.to/#/" + root.user.id) } } } diff --git a/src/messagecontent/ChatBarComponent.qml b/src/messagecontent/ChatBarComponent.qml index df12fe9f4..a681f6c5d 100644 --- a/src/messagecontent/ChatBarComponent.qml +++ b/src/messagecontent/ChatBarComponent.qml @@ -161,42 +161,45 @@ QQC2.Control { QQC2.ToolButton { visible: !root.isBusy display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - text: i18nc("@action:button", "Attach an image or file") - icon.name: "mail-attachment" - onTriggered: { - let dialog = (Clipboard.hasImage ? attachDialog : openFileDialog).createObject(QQC2.Overlay.overlay); - dialog.chosen.connect(path => root.chatBarCache.attachmentPath = path); - dialog.open(); - } + text: i18nc("@action:button", "Attach an image or file") + icon.name: "mail-attachment" + onClicked: { + let dialog = (Clipboard.hasImage ? attachDialog : openFileDialog).createObject(QQC2.Overlay.overlay); + dialog.chosen.connect(path => root.chatBarCache.attachmentPath = path); + dialog.open(); } + QQC2.ToolTip.text: text QQC2.ToolTip.visible: hovered + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - text: root.chatBarCache.isEditing ? i18nc("@action:button", "Confirm edit") : i18nc("@action:button", "Post message in thread") - icon.name: "document-send" - onTriggered: { - _private.post(); - } - } + text: root.chatBarCache.isEditing ? i18nc("@action:button", "Confirm edit") : i18nc("@action:button", "Post message in thread") + icon.name: "document-send" + onClicked: _private.post() + QQC2.ToolTip.text: text QQC2.ToolTip.visible: hovered + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay } QQC2.ToolButton { + id: cancelButton display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - text: i18nc("@action:button", "Cancel") - icon.name: "dialog-close" - onTriggered: { - root.chatBarCache.clearRelations(); - } + text: i18nc("@action:button", "Cancel") + icon.name: "dialog-close" + onClicked: { + root.chatBarCache.clearRelations(); + } + + Kirigami.Action { shortcut: "Escape" + onTriggered: cancelButton.clicked() } + QQC2.ToolTip.text: text QQC2.ToolTip.visible: hovered + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay } } } diff --git a/src/messagecontent/VideoComponent.qml b/src/messagecontent/VideoComponent.qml index 7d6f39a58..0144a755f 100644 --- a/src/messagecontent/VideoComponent.qml +++ b/src/messagecontent/VideoComponent.qml @@ -370,15 +370,17 @@ Video { id: maximizeButton display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - text: i18n("Maximize") - icon.name: "view-fullscreen" - onTriggered: { - root.Message.timeline.interactive = false; - root.pause(); - RoomManager.maximizeMedia(root.eventId); - } + text: i18nc("@action:button", "Maximize") + icon.name: "view-fullscreen" + onClicked: { + root.Message.timeline.interactive = false; + root.pause(); + RoomManager.maximizeMedia(root.eventId); } + + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } } background: Kirigami.ShadowedRectangle { diff --git a/src/rooms/ExploreComponent.qml b/src/rooms/ExploreComponent.qml index ec4fae437..ad4509b47 100644 --- a/src/rooms/ExploreComponent.qml +++ b/src/rooms/ExploreComponent.qml @@ -56,14 +56,12 @@ RowLayout { Accessible.onPressAction: menuButton.action.trigger() display: QQC2.AbstractButton.IconOnly checkable: true - action: QQC2.Action { - text: i18nc("@action:button", "Show Menu") - icon.name: "application-menu-symbolic" - onTriggered: { - const item = menu.createObject(menuButton); - item.closed.connect(menuButton.toggle); - item.open(); - } + text: i18nc("@action:button", "Show Menu") + icon.name: "application-menu-symbolic" + onClicked: { + const item = menu.createObject(menuButton); + item.closed.connect(menuButton.toggle); + item.open(); } QQC2.ToolTip.visible: hovered @@ -87,13 +85,15 @@ RowLayout { QQC2.MenuItem { text: i18n("Create a Room") icon.name: "system-users-symbolic" - action: QQC2.Action { + onTriggered: { + Qt.createComponent('org.kde.neochat', 'CreateRoomDialog').createObject(root, { + connection: root.connection + }).open(); + } + + Kirigami.Action { shortcut: StandardKey.New - onTriggered: { - Qt.createComponent('org.kde.neochat', 'CreateRoomDialog').createObject(root, { - connection: root.connection - }).open(); - } + onTriggered: parent.trigger() } } diff --git a/src/rooms/ExploreComponentMobile.qml b/src/rooms/ExploreComponentMobile.qml index b4e4de0f0..f99e5ed15 100644 --- a/src/rooms/ExploreComponentMobile.qml +++ b/src/rooms/ExploreComponentMobile.qml @@ -138,32 +138,33 @@ Kirigami.NavigationTabBar { ColumnLayout { spacing: 0 Delegates.RoundedItemDelegate { + id: createRoomButton Layout.fillWidth: true - action: Kirigami.Action { - text: i18n("Create a Room") - icon.name: "system-users-symbolic" - onTriggered: { - pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'CreateRoomPage'), { - connection: root.connection - }, { - title: i18nc("@title", "Create a Room") - }); - explorePopup.close(); - } + text: i18nc("@action:button", "Create a Room") + icon.name: "system-users-symbolic" + onClicked: { + pageStack.pushDialogLayer(Qt.createComponent('org.kde.neochat', 'CreateRoomPage'), { + connection: root.connection + }, { + title: i18nc("@title", "Create a Room") + }); + explorePopup.close(); + } + + Kirigami.Action { shortcut: StandardKey.New + onTriggered: createRoomButton.clicked() } } Delegates.RoundedItemDelegate { Layout.fillWidth: true - action: Kirigami.Action { - text: i18n("Create a Space") - icon.name: "list-add" - onTriggered: { - Qt.createComponent('org.kde.neochat', 'CreateSpaceDialog').createObject(root, { - connection: root.connection - }).open(); - explorePopup.close(); - } + text: i18nc("@action:button", "Create a Space") + icon.name: "list-add" + onClicked: { + Qt.createComponent('org.kde.neochat', 'CreateSpaceDialog').createObject(root, { + connection: root.connection + }).open(); + explorePopup.close(); } } } diff --git a/src/rooms/UserInfo.qml b/src/rooms/UserInfo.qml index c8c5001c0..c15756091 100644 --- a/src/rooms/UserInfo.qml +++ b/src/rooms/UserInfo.qml @@ -91,13 +91,9 @@ RowLayout { } QQC2.ToolButton { display: QQC2.Button.IconOnly - action: Kirigami.Action { - text: i18nc("@action:button", "Open Settings") - icon.name: "settings-configure-symbolic" - onTriggered: { - NeoChatSettingsView.open(); - } - } + text: i18nc("@action:button", "Open Settings") + icon.name: "settings-configure-symbolic" + onClicked: NeoChatSettingsView.open() QQC2.ToolTip.text: text QQC2.ToolTip.visible: hovered diff --git a/src/settings/DeviceDelegate.qml b/src/settings/DeviceDelegate.qml index bd9d80966..02f6896e6 100644 --- a/src/settings/DeviceDelegate.qml +++ b/src/settings/DeviceDelegate.qml @@ -86,32 +86,23 @@ FormCard.AbstractFormDelegate { } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - id: editDeviceAction - text: i18n("Edit device name") - icon.name: "document-edit" - onTriggered: root.editDeviceName = true - } - QQC2.ToolTip { - text: editDeviceAction.text - delay: Kirigami.Units.toolTipDelay - } + text: i18nc("@action:button", "Edit device name") + icon.name: "document-edit" + onClicked: root.editDeviceName = true + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly visible: root.showVerifyButton && (root.type !== DevicesModel.Verified || NeoChatConfig.alwaysVerifyDevice) - action: Kirigami.Action { - id: verifyDeviceAction - text: i18n("Verify device") - icon.name: "security-low-symbolic" - onTriggered: { - devicesModel.connection.startKeyVerificationSession(devicesModel.connection.localUserId, root.id); - } - } - QQC2.ToolTip { - text: verifyDeviceAction.text - delay: Kirigami.Units.toolTipDelay - } + text: i18nc("@action:button", "Verify device") + icon.name: "security-low-symbolic" + onClicked: devicesModel.connection.startKeyVerificationSession(devicesModel.connection.localUserId, root.id) + + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } Kirigami.Icon { visible: root.showVerifyButton && root.type === DevicesModel.Verified @@ -130,19 +121,16 @@ FormCard.AbstractFormDelegate { } QQC2.ToolButton { display: QQC2.AbstractButton.IconOnly - action: Kirigami.Action { - id: logoutDeviceAction - text: i18n("Logout device") - icon.name: "edit-delete-remove" - onTriggered: { - passwordSheet.deviceId = root.id; - passwordSheet.open(); - } - } - QQC2.ToolTip { - text: logoutDeviceAction.text - delay: Kirigami.Units.toolTipDelay + text: i18nc("@action:button", "Logout device") + icon.name: "edit-delete-remove" + onClicked: { + passwordSheet.deviceId = root.id; + passwordSheet.open(); } + + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } } } diff --git a/src/settings/Permissions.qml b/src/settings/Permissions.qml index a2e5378ba..6bb09476f 100644 --- a/src/settings/Permissions.qml +++ b/src/settings/Permissions.qml @@ -205,17 +205,14 @@ FormCard.FormCardPage { } } - action: Kirigami.Action { - id: editPowerLevelAction - onTriggered: { - userListSearchPopup.close(); - let dialog = powerLevelDialog.createObject(root.QQC2.Overlay.overlay, { - room: root.room, - userId: userListItem.userId, - powerLevel: userListItem.powerLevel - }); - dialog.open(); - } + onClicked: { + userListSearchPopup.close(); + let dialog = powerLevelDialog.createObject(root.QQC2.Overlay.overlay, { + room: root.room, + userId: userListItem.userId, + powerLevel: userListItem.powerLevel + }); + dialog.open(); } Component { diff --git a/src/settings/RoomGeneralPage.qml b/src/settings/RoomGeneralPage.qml index 849fb9f00..c0adfd4dd 100644 --- a/src/settings/RoomGeneralPage.qml +++ b/src/settings/RoomGeneralPage.qml @@ -271,16 +271,13 @@ FormCard.FormCardPage { 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 - } + text: i18nc("@action:button", "Make canonical parent") + icon.name: "checkmark" + onClicked: root.room.canonicalParent = officalParentDelegate.modelData + + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered } QQC2.ToolButton { visible: officalParentDelegate?.space.canSendState("m.space.child") && root.room.canSendState("m.space.parent") diff --git a/src/timeline/TimelineView.qml b/src/timeline/TimelineView.qml index 5fe3c9883..32e8d2cbf 100644 --- a/src/timeline/TimelineView.qml +++ b/src/timeline/TimelineView.qml @@ -214,23 +214,22 @@ QQC2.ScrollView { padding: Kirigami.Units.largeSpacing z: 2 - visible: (!_private.room?.partiallyReadStats.empty()) + visible: !_private.room?.partiallyReadStats.empty() - text: _private.room.readMarkerLoaded ? i18n("Jump to first unread message") : i18n("Jump to oldest loaded message") - action: Kirigami.Action { - onTriggered: { - goReadMarkerFab.textChanged() - root.goToEvent(_private.room.lastFullyReadEventId); - } - icon.name: "go-up" + text: _private.room.readMarkerLoaded ? i18nc("@action:button", "Jump to first unread message") : i18nc("@action:button", "Jump to oldest loaded message") + icon.name: "go-up" + onClicked: { + goReadMarkerFab.textChanged() + root.goToEvent(_private.room.lastFullyReadEventId); + } + Kirigami.Action { shortcut: "Shift+PgUp" + onTriggered: goReadMarkerFab.clicked() } - QQC2.ToolTip { - text: goReadMarkerFab.text - delay: Kirigami.Units.toolTipDelay - visible: goReadMarkerFab.hovered - } + QQC2.ToolTip.text: goReadMarkerFab.text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: goReadMarkerFab.hovered } KirigamiComponents.FloatingButton { id: goMarkAsReadFab @@ -248,21 +247,22 @@ QQC2.ScrollView { z: 2 visible: !messageListView.atYEnd - text: i18n("Jump to latest message") - action: Kirigami.Action { - onTriggered: { - messageListView.positionViewAtBeginning(); - _private.room.markAllMessagesAsRead(); - } - icon.name: "go-down" - shortcut: "Shift+PgDown" + text: i18nc("@action:button", "Jump to latest message") + + onClicked: { + messageListView.positionViewAtBeginning(); + _private.room.markAllMessagesAsRead(); } - QQC2.ToolTip { - text: goMarkAsReadFab.text - delay: Kirigami.Units.toolTipDelay - visible: goMarkAsReadFab.hovered + icon.name: "go-down" + Kirigami.Action { + shortcut: "Shift+PgDown" + onTriggered: goMarkAsReadFab.clicked() } + + QQC2.ToolTip.text: goMarkAsReadFab.text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: goMarkAsReadFab.hovered } DropArea {