Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kclock@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kclock
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear Release Team,
please unblock package kclock.
[ Reason ]
It contains the following changes:
* New upstream release (25.04.3).
- Add X-Plasma-API-Minimum-Version to applet metadata. (kde#505837)
- Use KPackageStructure instead of ServiceTypes in metadata.json.
(#505837)
- Timers: Fix preset creation and usage (25.04). (kde#505636)
- Fix alarm form overflowing on larger screens. (kde#505695)
* Backport upstream commit:
- Correctly honor configured sound theme for default alarm sound.
[8c656dc4]
The complete debdiff is huge with translation fixes so I’m attaching a
simple diff trimmed of these for your convinience :
diff -ur --exclude=po --exclude=*.desktop kclock-25.04.[03]
[ Tests ]
Tested stopwatch, timer, adding clock for another timezone.
[ Risks ]
Only contains the latest upstream point release for the 25.04 Gear
branch. Further fixes can easily be backported or the changes reverted.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
Thanks !
unblock kclock/25.04.3-1
Attachment:
kclock_25.04.0-1.dsc_kclock_25.04.3-1.dsc.debdiff.gz
Description: application/gzip
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/CMakeLists.txt kclock-25.04.3/CMakeLists.txt
--- kclock-25.04.0/CMakeLists.txt 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/CMakeLists.txt 2025-06-30 18:54:48.000000000 +0200
@@ -11,7 +11,7 @@
# KDE Applications version, managed by release script.
set(RELEASE_SERVICE_VERSION_MAJOR "25")
set(RELEASE_SERVICE_VERSION_MINOR "04")
-set(RELEASE_SERVICE_VERSION_MICRO "0")
+set(RELEASE_SERVICE_VERSION_MICRO "3")
set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
project(kclock VERSION ${RELEASE_SERVICE_VERSION})
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/debian/changelog kclock-25.04.3/debian/changelog
--- kclock-25.04.0/debian/changelog 2025-04-17 18:59:13.000000000 +0200
+++ kclock-25.04.3/debian/changelog 2025-07-23 18:01:27.000000000 +0200
@@ -1,3 +1,20 @@
+kclock (25.04.3-1) unstable; urgency=medium
+
+ * Team upload.
+
+ [ Aurélien COUDERC ]
+ * New upstream release (25.04.3).
+ - Add X-Plasma-API-Minimum-Version to applet metadata. (kde#505837)
+ - Use KPackageStructure instead of ServiceTypes in metadata.json.
+ (#505837)
+ - Timers: Fix preset creation and usage (25.04). (kde#505636)
+ - Fix alarm form overflowing on larger screens. (kde#505695)
+ * Backport upstream commit:
+ - Correctly honor configured sound theme for default alarm sound.
+ [8c656dc4]
+
+ -- Aurélien COUDERC <coucouf@debian.org> Wed, 23 Jul 2025 18:01:27 +0200
+
kclock (25.04.0-1) unstable; urgency=medium
* Team upload.
Seulement dans kclock-25.04.3/debian: patches
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/org.kde.kclock.appdata.xml kclock-25.04.3/org.kde.kclock.appdata.xml
--- kclock-25.04.0/org.kde.kclock.appdata.xml 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/org.kde.kclock.appdata.xml 2025-06-30 18:54:48.000000000 +0200
@@ -77,6 +77,7 @@
<summary xml:lang="lt">Sekti laiką ir nusistatyti žadintuvus</summary>
<summary xml:lang="lv">Sekojiet laikam un lieciet modinātājus</summary>
<summary xml:lang="nl">Tijd bijhouden en wekkers zetten</summary>
+ <summary xml:lang="nn">Vis klokka og still inn alarmar</summary>
<summary xml:lang="pl">Pilnuj czasu i ustawiaj alarmy</summary>
<summary xml:lang="pt-BR">Manter o horário e configurar os alarmes</summary>
<summary xml:lang="ru">Просмотр времени и установка напоминаний</summary>
@@ -115,6 +116,7 @@
<p xml:lang="lt">Universali laikrodžio programa, skirta kompiuteriams ir mobiliesiems įrenginiams. Laikrodis leidžia nustatyti daug žadintuvų bei laikmačių, be to, jame yra chronometras ir pasaulio laikrodžiai.</p>
<p xml:lang="lv">Universāla pulksteņa lietotne datoram un viedierīcēm. Pulkstenis satur hronometru un pasaules pulksteni, kā arī ļauj uzlikt dažādus modinātājus un taimerus.</p>
<p xml:lang="nl">Een universele kloktoepassing voor bureaublad en mobiel. Kclock omvat een stopwatch en een wereldklok en biedt u het zetten meerdere wekkers en timers.</p>
+ <p xml:lang="nn">Eit universelt klokkeprogram for skrivebord og mobil. Inneheld stoppeklokke og verdsklokke, og lèt deg stilla inn fleire alarmar og nedteljarar.</p>
<p xml:lang="pl">Wszechstronny zegar na urządzenia przenośne i biurkowe. Zegar zawiera stoper oraz zegar światowy. Umożliwia ustawienie wielu alarmów i minutników.</p>
<p xml:lang="pt-BR">Um aplicativo de relógio universal para desktop e celular. O relógio inclui um cronômetro e um relógio mundial, e permite que você defina vários alarmes e timers.</p>
<p xml:lang="ru">Универсальные часы для стационарных компьютеров и мобильных устройств. В программе есть секундомер и мировые часы, поддерживается установка напоминаний и таймеров.</p>
@@ -457,6 +459,9 @@
<url type="donation">https://www.kde.org/community/donations/?app=kclock&source=appdata</url>
<url type="vcs-browser">https://invent.kde.org/utilities/kclock</url>
<releases>
+ <release version="25.04.3" date="2025-07-03"/>
+ <release version="25.04.2" date="2025-06-05"/>
+ <release version="25.04.1" date="2025-05-08"/>
<release version="25.04.0" date="2025-04-17"/>
<release version="24.12.3" date="2025-03-06"/>
<release version="24.12.2" date="2025-02-06"/>
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/.pc/applied-patches kclock-25.04.3/.pc/applied-patches
--- kclock-25.04.0/.pc/applied-patches 2025-07-27 13:27:32.636652284 +0200
+++ kclock-25.04.3/.pc/applied-patches 2025-07-27 13:27:32.780641035 +0200
@@ -0,0 +1 @@
+upstream_8c656dc4_Honor-configured-sound-theme-for-default-alarm-sound.patch
Seulement dans kclock-25.04.3/.pc: upstream_8c656dc4_Honor-configured-sound-theme-for-default-alarm-sound.patch
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclock/qml/alarm/AlarmForm.qml kclock-25.04.3/src/kclock/qml/alarm/AlarmForm.qml
--- kclock-25.04.0/src/kclock/qml/alarm/AlarmForm.qml 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclock/qml/alarm/AlarmForm.qml 2025-06-30 18:54:48.000000000 +0200
@@ -82,6 +82,7 @@
// repeat day picker
DialogComboBox {
implicitWidth: root.width
+ Layout.maximumWidth: 540
Kirigami.FormData.label: i18n("Days to repeat:")
text: FormatUtil.getRepeatFormat(root.formDaysOfWeek)
@@ -117,6 +118,7 @@
DialogComboBox {
id: ringDurationPicker
implicitWidth: root.width
+ Layout.maximumWidth: 540
Kirigami.FormData.label: i18n("Ring Duration:")
text: {
@@ -160,6 +162,7 @@
DialogComboBox {
id: snoozeLengthPicker
implicitWidth: root.width
+ Layout.maximumWidth: 540
Kirigami.FormData.label: i18n("Snooze Length:")
title: i18n("Select Snooze Length")
@@ -194,6 +197,7 @@
id: audioPathField
implicitWidth: root.width
width: root.width
+ Layout.maximumWidth: 540
Kirigami.FormData.label: i18n("Ring Sound:")
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclock/qml/timer/TimerFormDialog.qml kclock-25.04.3/src/kclock/qml/timer/TimerFormDialog.qml
--- kclock-25.04.0/src/kclock/qml/timer/TimerFormDialog.qml 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclock/qml/timer/TimerFormDialog.qml 2025-06-30 18:54:48.000000000 +0200
@@ -16,10 +16,6 @@
Kirigami.Dialog {
id: root
- function createTimer(duration, label, commandTimeout) {
- TimerModel.addNew(duration, label, commandTimeout);
- }
-
property bool showPresets: false
property bool showDelete: false
@@ -37,20 +33,6 @@
id: timerForm
Layout.fillWidth: true
}
- Flow {
- spacing: Kirigami.Units.smallSpacing
- visible: showPresets
- Layout.fillWidth: true
-
- Repeater {
- model: TimerPresetModel
-
- Button {
- text: showDelete ? "Delete" : preset.presetName
- onClicked: showDelete ? TimerPresetModel.deletePreset(index) : root.createTimer(timerForm.getDuration(), timerForm.name) & close();
- }
- }
- }
}
customFooterActions: [
@@ -70,7 +52,7 @@
icon.name: "dialog-ok"
text: i18n("Done")
onTriggered: {
- root.createTimer(timerForm.getDuration(), timerForm.name, timerForm.commandTimeout);
+ TimerModel.addNew(timerForm.getDuration(), timerForm.name, timerForm.commandTimeout);
close();
}
}
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclock/qml/timer/TimerForm.qml kclock-25.04.3/src/kclock/qml/timer/TimerForm.qml
--- kclock-25.04.0/src/kclock/qml/timer/TimerForm.qml 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclock/qml/timer/TimerForm.qml 2025-06-30 18:54:48.000000000 +0200
@@ -19,6 +19,8 @@
property alias name: label.text
property alias commandTimeout: commandTimeoutField.text
+ signal closeFormRequested()
+
function setDuration(duration) {
hours = duration / 60 / 60;
minutes = duration % (60 * 60) / 60;
@@ -39,7 +41,7 @@
text: i18n("1 m")
hours: 0
minutes: 1
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -47,7 +49,7 @@
text: i18n("5 m")
hours: 0
minutes: 5
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -55,7 +57,7 @@
text: i18n("10 m")
hours: 0
minutes: 10
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -67,7 +69,7 @@
text: i18n("15 m")
hours: 0
minutes: 15
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -75,7 +77,7 @@
text: i18n("30 m")
hours: 0
minutes: 30
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -83,7 +85,7 @@
text: i18n("1 h")
hours: 1
minutes: 0
- hoursSpinBox: spinBoxHours
+ hoursSpinBox: spinBoxHours
minutesSpinBox: spinBoxMinutes
secondsSpinBox: spinBoxSeconds
}
@@ -151,7 +153,7 @@
showPresets = true;
}
}
-
+
Button {
id: presetButton
text: showPresets ? i18n("Hide Presets") : i18n("Show Presets")
@@ -168,7 +170,7 @@
}
Flow {
spacing: Kirigami.Units.smallSpacing
- visible: showPresets && Kirigami.Settings.isMobile && repeater.count > 0
+ visible: showPresets && repeater.count > 0
Layout.fillWidth: true
Repeater {
@@ -177,8 +179,14 @@
Button {
text: showDelete ? "Delete" : preset.presetName
- onClicked: showDelete ? TimerPresetModel.deletePreset(index) : loader.createTimer(timerForm.getDuration(), timerForm.name, timerForm.commandTimeout) & close();
-
+ onClicked: {
+ if (showDelete) {
+ TimerPresetModel.deletePreset(index);
+ } else {
+ TimerModel.addNew(preset.presetDuration, preset.presetName, timerForm.commandTimeout);
+ root.closeFormRequested();
+ }
+ }
}
}
}
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclockd/alarm.cpp kclock-25.04.3/src/kclockd/alarm.cpp
--- kclock-25.04.0/src/kclockd/alarm.cpp 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclockd/alarm.cpp 2025-07-27 13:27:32.000000000 +0200
@@ -305,7 +305,8 @@
// play sound (it will loop)
qDebug() << "Alarm sound: " << m_audioPath;
- AlarmPlayer::instance().setSource(m_audioPath);
+ // TODO clean up usage of audio path as URL.
+ AlarmPlayer::instance().setSource(m_audioPath.toLocalFile());
AlarmPlayer::instance().play();
setRinging(true);
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclockd/alarmplayer.cpp kclock-25.04.3/src/kclockd/alarmplayer.cpp
--- kclock-25.04.0/src/kclockd/alarmplayer.cpp 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclockd/alarmplayer.cpp 2025-07-27 13:27:32.000000000 +0200
@@ -9,8 +9,14 @@
#include <QDateTime>
#include <QFile>
+#include <QFileInfo>
#include <QStandardPaths>
+#include <KConfigGroup>
+#include <KSharedConfig>
+
+using namespace Qt::Literals::StringLiterals;
+
AlarmPlayer &AlarmPlayer::instance()
{
static AlarmPlayer singleton;
@@ -21,6 +27,7 @@
: QObject{parent}
, m_player(new QMediaPlayer(this))
, m_audio(new QAudioOutput)
+ , m_soundThemeWatcher(KConfigWatcher::create(KSharedConfig::openConfig(QStringLiteral("kdeglobals"))))
{
m_player->setAudioOutput(m_audio);
connect(m_player, &QMediaPlayer::playbackStateChanged, this, &AlarmPlayer::loopAudio);
@@ -60,16 +67,37 @@
Q_EMIT volumeChanged();
}
-void AlarmPlayer::setSource(const QUrl &path)
+void AlarmPlayer::setSource(const QString &path)
{
- // if user set a invalid audio path or doesn't even specified a path, resort to default
- if (!path.isValid() || !QFile::exists(path.toLocalFile())) {
- const QUrl url = QUrl::fromLocalFile(
- QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("sounds/freedesktop/stereo/alarm-clock-elapsed.oga")));
- m_player->setSource(url);
+ if (path.isEmpty() || !QFileInfo::exists(path)) {
+ m_player->setSource(QUrl::fromLocalFile(defaultAlarmSoundPath()));
} else {
- m_player->setSource(path);
+ m_player->setSource(QUrl::fromLocalFile(path));
}
}
+QString AlarmPlayer::soundThemeName() const
+{
+ const KConfigGroup soundGroup = m_soundThemeWatcher->config()->group(QStringLiteral("Sounds"));
+ const QString themeName = soundGroup.readEntry(QStringLiteral("Theme"), QStringLiteral("ocean"));
+ return themeName;
+}
+
+QString AlarmPlayer::defaultAlarmSoundPath() const
+{
+ const QString soundPath = QStringLiteral("sounds/%1/stereo/alarm-clock-elapsed.%2");
+
+ for (const QString &theme : {soundThemeName(), u"freedesktop"_s}) {
+ for (const QLatin1String extension : {"wav"_L1, "oga"_L1, "ogg"_L1}) {
+ const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, soundPath.arg(theme, extension));
+ if (!path.isEmpty()) {
+ return path;
+ }
+ }
+ }
+
+ qCritical() << "Failed to find any alarm clock sound!";
+ return QString();
+}
+
#include "moc_alarmplayer.cpp"
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclockd/alarmplayer.h kclock-25.04.3/src/kclockd/alarmplayer.h
--- kclock-25.04.0/src/kclockd/alarmplayer.h 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclockd/alarmplayer.h 2025-07-27 13:27:32.000000000 +0200
@@ -12,6 +12,8 @@
#include <QAudioOutput>
+#include <KConfigWatcher>
+
class AlarmPlayer : public QObject
{
Q_OBJECT
@@ -22,10 +24,13 @@
int volume();
Q_INVOKABLE void setVolume(int volume);
- Q_INVOKABLE void setSource(const QUrl &path);
+ Q_INVOKABLE void setSource(const QString &path);
Q_INVOKABLE void play();
Q_INVOKABLE void stop();
+ QString soundThemeName() const;
+ QString defaultAlarmSoundPath() const;
+
Q_SIGNALS:
void volumeChanged();
@@ -35,6 +40,7 @@
private:
QMediaPlayer *m_player;
QAudioOutput *m_audio;
+ KConfigWatcher::Ptr m_soundThemeWatcher;
bool m_userStop = false; // indicate if user asks to stop
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclockd/timer.cpp kclock-25.04.3/src/kclockd/timer.cpp
--- kclock-25.04.0/src/kclockd/timer.cpp 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclockd/timer.cpp 2025-07-27 13:27:32.000000000 +0200
@@ -263,7 +263,7 @@
Utilities::pauseMprisSources();
- AlarmPlayer::instance().setSource(findRingSoundLocation());
+ AlarmPlayer::instance().setSource(QString()); // use default.
AlarmPlayer::instance().play();
m_ringing = true;
@@ -290,18 +290,4 @@
}
}
-QUrl Timer::findRingSoundLocation()
-{
- const auto locations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
- const QString path = QStringLiteral("/sounds/freedesktop/stereo/alarm-clock-elapsed.oga");
- QString alarmSoundPath;
-
- for (const auto &directory : locations) {
- if (QFile(directory + path).exists()) {
- return QUrl(directory + path);
- }
- }
-
- return QUrl();
-}
#include "moc_timer.cpp"
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/kclockd/timer.h kclock-25.04.3/src/kclockd/timer.h
--- kclock-25.04.0/src/kclockd/timer.h 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/kclockd/timer.h 2025-07-27 13:27:32.000000000 +0200
@@ -81,7 +81,6 @@
void reschedule();
private:
- QUrl findRingSoundLocation();
void setRunning(bool running);
void ring();
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/plasmoid/KClock_1x2/package/metadata.json kclock-25.04.3/src/plasmoid/KClock_1x2/package/metadata.json
--- kclock-25.04.0/src/plasmoid/KClock_1x2/package/metadata.json 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/plasmoid/KClock_1x2/package/metadata.json 2025-06-30 18:54:48.000000000 +0200
@@ -1,4 +1,5 @@
{
+ "KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
@@ -26,6 +27,7 @@
"Name[lt]": "HanY",
"Name[lv]": "HanY",
"Name[nl]": "HanY",
+ "Name[nn]": "HanY",
"Name[pa]": "ਹਾਂਯੇ",
"Name[pl]": "HanY",
"Name[pt]": "HanY",
@@ -66,6 +68,7 @@
"Description[lt]": "KClock valdiklis (1x2)",
"Description[lv]": "„KClock“ logdaļa (1×2)",
"Description[nl]": "KClock-widget (1x2)",
+ "Description[nn]": "KClock-element (1 × 2)",
"Description[pa]": "ਕੇ-ਘੜੀ ਵਿਜੈਟ (1x2)",
"Description[pl]": "Element interfejsu KClock (1x2)",
"Description[pt]": "Elemento do KClock (1x2)",
@@ -112,6 +115,7 @@
"Name[lt]": "KClock_1x2",
"Name[lv]": "KClock_1x2",
"Name[nl]": "KClock_1x2",
+ "Name[nn]": "KClock_1x2",
"Name[pa]": "ਕੇ-ਘੜੀ_1x2",
"Name[pl]": "KClock_1x2",
"Name[pt]": "KClock_1x2",
@@ -126,13 +130,11 @@
"Name[x-test]": "xxKClock_1x2xx",
"Name[zh_CN]": "KClock_1x2",
"Name[zh_TW]": "KClock_1x2",
- "ServiceTypes": [
- "Plasma/Applet"
- ],
"Version": "1.0",
"Website": "https://apps.kde.org/kclock"
},
"X-Plasma-API": "declarativeappletscript",
+ "X-Plasma-API-Minimum-Version": "6.0",
"X-Plasma-DBusActivationService": "org.kde.kclock.*",
"X-Plasma-MainScript": "ui/main.qml",
"X-Plasma-NotificationArea": "true",
diff -ur '--exclude=po' '--exclude=*.desktop' kclock-25.04.0/src/plasmoid/KClock_KWeather_3x3/package/metadata.json kclock-25.04.3/src/plasmoid/KClock_KWeather_3x3/package/metadata.json
--- kclock-25.04.0/src/plasmoid/KClock_KWeather_3x3/package/metadata.json 2025-04-11 05:12:02.000000000 +0200
+++ kclock-25.04.3/src/plasmoid/KClock_KWeather_3x3/package/metadata.json 2025-06-30 18:54:48.000000000 +0200
@@ -1,4 +1,5 @@
{
+ "KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
@@ -26,6 +27,7 @@
"Name[lt]": "HanY",
"Name[lv]": "HanY",
"Name[nl]": "HanY",
+ "Name[nn]": "HanY",
"Name[pa]": "ਹਾਂਯੇ",
"Name[pl]": "HanY",
"Name[pt]": "HanY",
@@ -66,6 +68,7 @@
"Description[lt]": "KClock valdiklis (3x3 su informacija apie orus)",
"Description[lv]": "„KCloc“k logdaļa (3×3 ar laikapstākļu informāciju)",
"Description[nl]": "KClock-widget (3x3 met weerinformatie)",
+ "Description[nn]": "KClock-element (3 × 3 med vêrmelding)",
"Description[pa]": "ਕੇ-ਘੜੀ ਵਿਜੈਟ (ਮੌਸਮੀ ਜਾਣਕਾਰੀ ਸਮੇਤ 3x3)",
"Description[pl]": "Element interfejsu (3x3 z danymi pogodowymi)",
"Description[pt]": "Elemento do KClock (3x3 com Dados Meteorológicos)",
@@ -107,6 +110,7 @@
"Name[lt]": "KClock_KWeather_3x3",
"Name[lv]": "KClock_KWeather_3x3",
"Name[nl]": "KClock_KWeather_3x3",
+ "Name[nn]": "KClock_KWeather_3x3",
"Name[pa]": "ਕੇ-ਘੜੀ_ਕੇ-ਮੌਸਮ_3x3",
"Name[pl]": "KClock_KWeather_3x3",
"Name[pt]": "KClock_KWeather_3x3",
@@ -121,9 +125,6 @@
"Name[x-test]": "xxKClock_KWeather_3x3xx",
"Name[zh_CN]": "KClock_KWeather_3x3",
"Name[zh_TW]": "KClock_KWeather_3x3",
- "ServiceTypes": [
- "Plasma/Applet"
- ],
"Version": "1.0",
"Website": "https://apps.kde.org/kclock"
},