File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11import QtQuick
2- import QtQuick.Layouts
32import QtMultimedia
4- import org.kde.kirigami as Kirigami
53import "code/utils.js" as Utils
64import "code/enum.js" as Enum
75
@@ -75,23 +73,21 @@ Item {
7573 }
7674 signal setNextSource
7775
78- Timer {
76+ PausableTimer {
7977 id: changeTimer
8078 running: root .changeWallpaperMode === Enum .ChangeWallpaperMode .OnATimer && root .player .playing
81- interval: ! running ? 0 : root .changeWallpaperTimerMs - (root .crossfadeEnabled ? root .crossfadeMinDurationCurrent : 0 )
79+ interval: root .changeWallpaperTimerMs - (root .crossfadeEnabled ? root .crossfadeMinDurationCurrent : 0 )
8280 repeat: true
81+ useNewIntervalImmediately: true
8382 onTriggered: {
8483 if (root .debugEnabled ) {
8584 console .log (" Timer triggered, changing wallpaper" );
8685 }
8786 root .next (true );
8887 }
8988 onIntervalChanged: {
90- if (running) {
91- if (root .debugEnabled ) {
92- console .log (" Timer started. Interval:" , interval);
93- }
94- changeTimer .restart ();
89+ if (root .debugEnabled ) {
90+ console .log (" Timer changed:" , interval);
9591 }
9692 }
9793 }
Original file line number Diff line number Diff line change 1+ // based on https://github.com/grassator/qml-utils/blob/master/qml/PausableTimer.qml
2+ import QtQuick
3+
4+ Item {
5+ id: root
6+ property alias repeat: timer .repeat
7+ property alias running: timer .running
8+ property alias interval: timer .pausableInterval
9+ property alias triggeredOnStart: timer .triggeredOnStart
10+ property alias previousTimestamp: timer .previousTimestamp
11+ property bool useNewIntervalImmediately: false
12+
13+ signal triggered
14+
15+ Timer {
16+ id: timer
17+ property int pausableInterval: 1000
18+ property real previousTimestamp: 0
19+ interval: pausableInterval
20+
21+ onPausableIntervalChanged: {
22+ if (! root .useNewIntervalImmediately ) {
23+ return ;
24+ }
25+ interval = pausableInterval;
26+ if (running) {
27+ previousTimestamp = new Date ().getTime ();
28+ } else {
29+ previousTimestamp = 0 ;
30+ }
31+ }
32+
33+ onRunningChanged: {
34+ if (running) {
35+ previousTimestamp = new Date ().getTime ();
36+ return ;
37+ }
38+ var timeDifference = new Date ().getTime () - previousTimestamp;
39+ if (timeDifference < interval) {
40+ interval = interval - timeDifference;
41+ }
42+ }
43+
44+ onTriggered: {
45+ previousTimestamp = new Date ().getTime ();
46+ interval = pausableInterval;
47+ root .triggered ();
48+ }
49+ }
50+ }
You can’t perform that action at this time.
0 commit comments