diff --git a/ui/StatusQ/src/StatusQ/Components/StatusTimeStampLabel.qml b/ui/StatusQ/src/StatusQ/Components/StatusTimeStampLabel.qml index 9b7ad9cc4b..8881570eef 100644 --- a/ui/StatusQ/src/StatusQ/Components/StatusTimeStampLabel.qml +++ b/ui/StatusQ/src/StatusQ/Components/StatusTimeStampLabel.qml @@ -1,4 +1,5 @@ -import QtQuick 2.14 +import QtQuick 2.15 +import QtQml 2.15 import StatusQ.Controls 0.1 import StatusQ.Core 0.1 @@ -12,7 +13,24 @@ StatusBaseText { color: Theme.palette.baseColor1 font.pixelSize: 10 visible: !!text - text: showFullTimestamp ? LocaleUtils.formatDateTime(timestamp) : LocaleUtils.formatRelativeTimestamp(timestamp) + text: d.formattedLabel + + QtObject { + id: d + // initial value + property string formattedLabel: root.showFullTimestamp ? LocaleUtils.formatDateTime(root.timestamp) : LocaleUtils.formatRelativeTimestamp(root.timestamp) + + // updates + Binding on formattedLabel { + when: !root.showFullTimestamp && root.timestamp && root.visible + value: { + StatusSharedUpdateTimer.secondsActive + return LocaleUtils.formatRelativeTimestamp(root.timestamp) + } + restoreMode: Binding.RestoreBinding + } + } + StatusToolTip { id: tooltip visible: hhandler.hovered && !!text @@ -22,8 +40,8 @@ StatusBaseText { id: hhandler enabled: !root.showFullTimestamp onHoveredChanged: { - if(hhandler.hovered && timestamp) { - tooltip.text = LocaleUtils.formatDateTime(timestamp) + if(hhandler.hovered && root.timestamp) { + tooltip.text = LocaleUtils.formatDateTime(root.timestamp) } } } diff --git a/ui/StatusQ/src/StatusQ/Core/StatusSharedUpdateTimer.qml b/ui/StatusQ/src/StatusQ/Core/StatusSharedUpdateTimer.qml new file mode 100644 index 0000000000..f1177b1482 --- /dev/null +++ b/ui/StatusQ/src/StatusQ/Core/StatusSharedUpdateTimer.qml @@ -0,0 +1,29 @@ +pragma Singleton + +import QtQml 2.15 + +QtObject { + id: root + + readonly property alias secondsActive: d.secondsActive + + signal triggered() + + readonly property Timer d: Timer { + id: d + property int secondsActive: 0 + interval: 1000 + running: Qt.application.state === Qt.ApplicationActive + repeat: true + onTriggered: { + d.secondsActive++ + root.triggered() + } + onRunningChanged: { + if (running) { + d.secondsActive++ + root.triggered() + } + } + } +} diff --git a/ui/StatusQ/src/StatusQ/Core/qmldir b/ui/StatusQ/src/StatusQ/Core/qmldir index 6e91506c3e..af754c9716 100644 --- a/ui/StatusQ/src/StatusQ/Core/qmldir +++ b/ui/StatusQ/src/StatusQ/Core/qmldir @@ -13,5 +13,6 @@ StatusModalHeaderSettings 0.1 StatusModalHeaderSettings.qml StatusProfileImageSettings 0.1 StatusProfileImageSettings.qml StatusRollArea 0.1 StatusRollArea.qml StatusScrollView 0.1 StatusScrollView.qml +singleton StatusSharedUpdateTimer 0.1 StatusSharedUpdateTimer.qml StatusTooltipSettings 0.1 StatusTooltipSettings.qml singleton LocaleUtils 0.1 LocaleUtils.qml diff --git a/ui/StatusQ/src/statusq.qrc b/ui/StatusQ/src/statusq.qrc index 86ec46c6b4..04a7af60e8 100644 --- a/ui/StatusQ/src/statusq.qrc +++ b/ui/StatusQ/src/statusq.qrc @@ -170,6 +170,7 @@ StatusQ/Core/StatusModalHeaderSettings.qml StatusQ/Core/StatusProfileImageSettings.qml StatusQ/Core/StatusRollArea.qml + StatusQ/Core/StatusSharedUpdateTimer.qml StatusQ/Core/StatusScrollView.qml StatusQ/Core/StatusTooltipSettings.qml StatusQ/Core/Theme/StatusColors.qml