Changeset View
Changeset View
Standalone View
Standalone View
applets/taskmanager/package/contents/ui/ContextMenu.qml
Show First 20 Lines • Show All 112 Lines • ▼ Show 20 Line(s) | 95 | function loadDynamicLaunchActions(launcherUrl) { | |||
---|---|---|---|---|---|
113 | 113 | | |||
114 | // Add Media Player control actions | 114 | // Add Media Player control actions | ||
115 | var sourceName = mpris2Source.sourceNameForLauncherUrl(launcherUrl, get(atm.AppPid)); | 115 | var sourceName = mpris2Source.sourceNameForLauncherUrl(launcherUrl, get(atm.AppPid)); | ||
116 | 116 | | |||
117 | if (sourceName && !(get(atm.LegacyWinIdList) != undefined && get(atm.LegacyWinIdList).length > 1)) { | 117 | if (sourceName && !(get(atm.LegacyWinIdList) != undefined && get(atm.LegacyWinIdList).length > 1)) { | ||
118 | var playerData = mpris2Source.data[sourceName] | 118 | var playerData = mpris2Source.data[sourceName] | ||
119 | 119 | | |||
120 | if (playerData.CanControl) { | 120 | if (playerData.CanControl) { | ||
121 | var playing = (playerData.PlaybackStatus === "Playing"); | ||||
121 | var menuItem = menu.newMenuItem(menu); | 122 | var menuItem = menu.newMenuItem(menu); | ||
122 | menuItem.text = i18nc("Play previous track", "Previous Track"); | 123 | menuItem.text = i18nc("Play previous track", "Previous Track"); | ||
broulik: Do two separate vars
```
var playing = ...;
var menuItem = ...;
``` | |||||
123 | menuItem.icon = "media-skip-backward"; | 124 | menuItem.icon = "media-skip-backward"; | ||
124 | menuItem.enabled = Qt.binding(function() { | 125 | menuItem.enabled = Qt.binding(function() { | ||
125 | return playerData.CanGoPrevious; | 126 | return playerData.CanGoPrevious; | ||
126 | }); | 127 | }); | ||
127 | menuItem.clicked.connect(function() { | 128 | menuItem.clicked.connect(function() { | ||
128 | mpris2Source.goPrevious(sourceName); | 129 | mpris2Source.goPrevious(sourceName); | ||
129 | }); | 130 | }); | ||
130 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | 131 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | ||
131 | 132 | | |||
132 | menuItem = menu.newMenuItem(menu); | 133 | menuItem = menu.newMenuItem(menu); | ||
133 | // PlasmaCore Menu doesn't actually handle icons or labels changing at runtime... | 134 | // PlasmaCore Menu doesn't actually handle icons or labels changing at runtime... | ||
134 | menuItem.text = Qt.binding(function() { | 135 | menuItem.text = Qt.binding(function() { | ||
135 | return playerData.PlaybackStatus === "Playing" ? i18nc("Pause playback", "Pause") : i18nc("Start playback", "Play"); | 136 | // if CanPause, toggle the menu entry between Play & Pause, otherwise always use Play | ||
137 | return playing && playerData.CanPause ? i18nc("Pause playback", "Pause") : i18nc("Start playback", "Play"); | ||||
136 | }); | 138 | }); | ||
137 | menuItem.icon = Qt.binding(function() { | 139 | menuItem.icon = Qt.binding(function() { | ||
138 | return playerData.PlaybackStatus === "Playing" ? "media-playback-pause" : "media-playback-start"; | 140 | return playing && playerData.CanPause ? "media-playback-pause" : "media-playback-start"; | ||
139 | }); | 141 | }); | ||
140 | menuItem.enabled = Qt.binding(function() { | 142 | menuItem.enabled = Qt.binding(function() { | ||
141 | return playerData.PlaybackStatus === "Playing" ? playerData.CanPause : playerData.CanPlay; | 143 | return playing ? playerData.CanPause : playerData.CanPlay; | ||
142 | }); | 144 | }); | ||
143 | menuItem.clicked.connect(function() { | 145 | menuItem.clicked.connect(function() { | ||
144 | mpris2Source.playPause(sourceName); | 146 | if (playing) { | ||
147 | mpris2Source.pause(sourceName); | ||||
148 | } else { | ||||
149 | mpris2Source.play(sourceName); | ||||
150 | } | ||||
145 | }); | 151 | }); | ||
146 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | 152 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | ||
147 | 153 | | |||
148 | menuItem = menu.newMenuItem(menu); | 154 | menuItem = menu.newMenuItem(menu); | ||
149 | menuItem.text = i18nc("Play next track", "Next Track"); | 155 | menuItem.text = i18nc("Play next track", "Next Track"); | ||
150 | menuItem.icon = "media-skip-forward"; | 156 | menuItem.icon = "media-skip-forward"; | ||
151 | menuItem.enabled = Qt.binding(function() { | 157 | menuItem.enabled = Qt.binding(function() { | ||
152 | return playerData.CanGoNext; | 158 | return playerData.CanGoNext; | ||
153 | }); | 159 | }); | ||
154 | menuItem.clicked.connect(function() { | 160 | menuItem.clicked.connect(function() { | ||
155 | mpris2Source.goNext(sourceName); | 161 | mpris2Source.goNext(sourceName); | ||
156 | }); | 162 | }); | ||
157 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | 163 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | ||
158 | 164 | | |||
159 | menuItem = menu.newMenuItem(menu); | 165 | menuItem = menu.newMenuItem(menu); | ||
160 | menuItem.text = i18nc("Stop playback", "Stop"); | 166 | menuItem.text = i18nc("Stop playback", "Stop"); | ||
161 | menuItem.icon = "media-playback-stop"; | 167 | menuItem.icon = "media-playback-stop"; | ||
162 | menuItem.clicked.connect(function() { | 168 | menuItem.clicked.connect(function() { | ||
163 | mpris2Source.stop(sourceName); | 169 | mpris2Source.stop(sourceName); | ||
In the media controller you do status == "playing" || status == "paused" whereas here you do status == "stopped"? broulik: In the media controller you do status == "playing" || status == "paused" whereas here you do… | |||||
Yes, in the media controller the status is going for the applet qml state strings, given those are also used around. So there it is for consistency with rest of media controller code. Here there is no QML state, so I used the mpris property state directly with shortest logic. Torn by two consistency attractors. Make a call, please :) kossebau: Yes, in the media controller the status is going for the applet qml state strings, given those… | |||||
164 | }); | 170 | }); | ||
165 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | 171 | menu.addMenuItem(menuItem, virtualDesktopsMenuItem); | ||
166 | 172 | | |||
167 | // Technically media controls and audio streams are separate but for the user they're | 173 | // Technically media controls and audio streams are separate but for the user they're | ||
168 | // semantically related, don't add a separator inbetween. | 174 | // semantically related, don't add a separator inbetween. | ||
169 | if (!menu.visualParent.hasAudioStream) { | 175 | if (!menu.visualParent.hasAudioStream) { | ||
170 | menu.addMenuItem(newSeparator(menu), virtualDesktopsMenuItem); | 176 | menu.addMenuItem(newSeparator(menu), virtualDesktopsMenuItem); | ||
171 | } | 177 | } | ||
▲ Show 20 Lines • Show All 497 Lines • Show Last 20 Lines |
Do two separate vars