[plasma/plasma-desktop] /: kcms: remove the KCMS moved in plasma-workspace

Bhushan Shah null at kde.org
Wed May 5 09:08:18 BST 2021


Git commit 38c55b4c264af6ad2bbb660fa8b4311cd7383a70 by Bhushan Shah.
Committed on 05/05/2021 at 08:04.
Pushed by bshah into branch 'master'.

kcms: remove the KCMS moved in plasma-workspace

They are moved to plasma-workspace with bc113eb43805439202369d72fcb6d690768135e2

M  +0    -2    doc/kcontrol/CMakeLists.txt
D  +0    -2    doc/kcontrol/formats/CMakeLists.txt
D  +0    -63   doc/kcontrol/formats/index.docbook
D  +0    -2    doc/kcontrol/notifications/CMakeLists.txt
D  +0    -209  doc/kcontrol/notifications/index.docbook
M  +0    -3    kcms/CMakeLists.txt
D  +0    -21   kcms/formats/CMakeLists.txt
D  +0    -5    kcms/formats/Messages.sh
D  +0    -174  kcms/formats/formats.desktop
D  +0    -370  kcms/formats/kcmformats.cpp
D  +0    -65   kcms/formats/kcmformats.h
D  +0    -385  kcms/formats/kcmformatswidget.ui
D  +0    -24   kcms/nightcolor/CMakeLists.txt
D  +0    -2    kcms/nightcolor/Messages.sh
D  +0    -54   kcms/nightcolor/kcm.cpp
D  +0    -46   kcms/nightcolor/kcm.h
D  +0    -147  kcms/nightcolor/kcm_nightcolor.desktop
D  +0    -77   kcms/nightcolor/package/contents/ui/LocationsFixedView.qml
D  +0    -48   kcms/nightcolor/package/contents/ui/NumberField.qml
D  +0    -72   kcms/nightcolor/package/contents/ui/TimeField.qml
D  +0    -64   kcms/nightcolor/package/contents/ui/TimingsView.qml
D  +0    -345  kcms/nightcolor/package/contents/ui/main.qml
D  +0    -106  kcms/nightcolor/package/metadata.desktop
D  +0    -31   kcms/notifications/CMakeLists.txt
D  +0    -2    kcms/notifications/Messages.sh
D  +0    -61   kcms/notifications/filterproxymodel.cpp
D  +0    -45   kcms/notifications/filterproxymodel.h
D  +0    -373  kcms/notifications/kcm.cpp
D  +0    -129  kcms/notifications/kcm.h
D  +0    -121  kcms/notifications/kcm_notifications.desktop
D  +0    -122  kcms/notifications/notificationsdata.cpp
D  +0    -69   kcms/notifications/notificationsdata.h
D  +0    -153  kcms/notifications/package/contents/ui/ApplicationConfiguration.qml
D  +0    -36   kcms/notifications/package/contents/ui/PopupPositionPage.qml
D  +0    -239  kcms/notifications/package/contents/ui/ScreenPositionSelector.qml
D  +0    -169  kcms/notifications/package/contents/ui/SourcesPage.qml
D  +0    -352  kcms/notifications/package/contents/ui/main.qml
D  +0    -119  kcms/notifications/package/metadata.desktop
D  +0    -387  kcms/notifications/sourcesmodel.cpp
D  +0    -99   kcms/notifications/sourcesmodel.h

https://invent.kde.org/plasma/plasma-desktop/commit/38c55b4c264af6ad2bbb660fa8b4311cd7383a70

diff --git a/doc/kcontrol/CMakeLists.txt b/doc/kcontrol/CMakeLists.txt
index 7362540d5..34b596a3c 100644
--- a/doc/kcontrol/CMakeLists.txt
+++ b/doc/kcontrol/CMakeLists.txt
@@ -18,8 +18,6 @@ ecm_optional_add_subdirectory(mouse)
 ecm_optional_add_subdirectory(paths)
 ecm_optional_add_subdirectory(kcmsmserver)
 ecm_optional_add_subdirectory(kcmlaunchfeedback)
-ecm_optional_add_subdirectory(notifications)
-ecm_optional_add_subdirectory(formats)
 ecm_optional_add_subdirectory(spellchecking)
 ecm_optional_add_subdirectory(componentchooser)
 ecm_optional_add_subdirectory(kded)
diff --git a/doc/kcontrol/formats/CMakeLists.txt b/doc/kcontrol/formats/CMakeLists.txt
deleted file mode 100644
index 36db2cbdd..000000000
--- a/doc/kcontrol/formats/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-########### install files ###############
-kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kcontrol/formats)
diff --git a/doc/kcontrol/formats/index.docbook b/doc/kcontrol/formats/index.docbook
deleted file mode 100644
index 194462743..000000000
--- a/doc/kcontrol/formats/index.docbook
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN"
-"dtd/kdedbx45.dtd" [
-<!ENTITY % addindex "IGNORE">
-<!ENTITY % English "INCLUDE" > <!-- change language only here -->
-]>
-
-<article id="formats" lang="&language;">
-<articleinfo>
-<title>Formats</title>
-<authorgroup>
-<author>&Mike.McBride; &Mike.McBride.mail;</author>
-<author>&Krishna.Tateneni; &Krishna.Tateneni.mail;</author>
-<!-- TRANS:ROLES_OF_TRANSLATORS -->
- </authorgroup>
-
-	  <date>2015-05-18</date>
-	  <releaseinfo>Plasma 5.3</releaseinfo>
-
-	  <keywordset>
-		<keyword>KDE</keyword>
-		<keyword>Systemsettings</keyword>
-		<keyword>locale</keyword>
-		<keyword>country</keyword>
-		<keyword>language</keyword>
-		<keyword>number</keyword>
-		<keyword>currency</keyword>
-	  </keywordset>
-</articleinfo>
-
-<para>
-This module of the &kde; &systemsettings; allows you to select customization
-options that depend on the region of the world that you happen to live in.
-</para>
-
-<para>
-In most cases, you can simply select the region, and all
-options will be set in an appropriate manner.
-</para>
-
-<para>
-On the bottom of this module you can see examples how the settings look
-like and which measurement units are used. In addition to numbers, you can see 
-how currency values, dates, and times in long and short format are displayed.
-When you change any of the settings, the preview shows the effects of the
-changes before you apply them.
-</para>
-
-<para>
-The <guilabel>Region</guilabel> drop down box contains the list of available
-countries and will initially show your currently selected country. If the
-selection shows <quote>Default</quote> then you have not set a country
-and are defaulting to the Country set by the system, which will also be shown.
-</para>
-
-<para>
-In case you need different individual settings enable <guilabel>Detailed Settings</guilabel> 
-and select the country format for <guilabel>Numbers</guilabel>, <guilabel>Time</guilabel>, 
-<guilabel>Currency</guilabel>, <guilabel>Measurement Units</guilabel> or 
-<guilabel>Collation and Sorting</guilabel> rules from the drop down boxes.
-</para>
-
-</article>
diff --git a/doc/kcontrol/notifications/CMakeLists.txt b/doc/kcontrol/notifications/CMakeLists.txt
deleted file mode 100644
index b34797269..000000000
--- a/doc/kcontrol/notifications/CMakeLists.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-########### install files ###############
-kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR kcontrol/notifications)
diff --git a/doc/kcontrol/notifications/index.docbook b/doc/kcontrol/notifications/index.docbook
deleted file mode 100644
index b533dd932..000000000
--- a/doc/kcontrol/notifications/index.docbook
+++ /dev/null
@@ -1,209 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE article PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant V1.1//EN"
-"dtd/kdedbx45.dtd" [
-<!ENTITY % addindex "IGNORE">
-<!ENTITY % English "INCLUDE" > <!-- change language only here -->
-]>
-
-<article id="kcmnotify" lang="&language;">
-<title>System Notification Settings</title>
-<articleinfo>
-
-<authorgroup>
-<author>&Mike.McBride; &Mike.McBride.mail;</author>
-<author><personname><firstname>Kai Uwe</firstname> <surname>Broulik</surname></personname> <email>kde at broulik.de</email></author>
-<!-- TRANS:ROLES_OF_TRANSLATORS -->
-</authorgroup>
-
-<date>2021-04-16</date>
-<releaseinfo>Plasma 5.21</releaseinfo>
-
-<keywordset>
-<keyword>KDE</keyword>
-<keyword>Systemsettings</keyword>
-<keyword>system notification</keyword>
-<keyword>notification</keyword>
-</keywordset>
-</articleinfo>
-
-<sect1 id="sys-notify">
-<title>System Notification Settings</title>
-
-<para>&plasma;, like all applications, needs to inform the user when a
-problem occurs, a task is completed, or something has happened.  &plasma;
-uses a set of <quote>System Notifications</quote> to keep the user
-informed on what is happening.</para>
-
-<para>Using this module, you can determine what &plasma; does to communicate
-each event.</para>
-
-<sect2 id="notification-settings">
-<title>Notification Settings</title>
-
-<sect3 id="do-not-disturb">
-<title>Do Not Disturb mode</title>
-
-    <para>This mode disables all visual and most audible notifications to let you focus on your current task. Settings in this section let you configure under which circumstances &plasma; automatically enables do not disturb mode.</para>
-
-    <variablelist>
-
-    <varlistentry>
-    <term><guiicon>Enable when screens are mirrored</guiicon></term>
-    <listitem><para>Automatically enable do not disturb mode when you mirror your screens, for example during a presentation.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Enable while screen sharing</guiicon></term>
-    <listitem><para>Automatically enable do not disturb mode when you share your screens, for example during an online lecture.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Show critical notifications</guiicon></term>
-    <listitem><para>Whether to show critical notifications, such as your battery is almost empty, to show even when in do not disturb mode.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Toggle with:</guiicon></term>
-    <listitem><para>A global shortcut you can press to enable and disable do not disturb mode anytime.</para></listitem>
-    </varlistentry>
-
-    </variablelist>
-
-</sect3>
-
-<sect3 id="notification-filters">
-    <title>Filters</title>
-
-    <variablelist>
-
-    <varlistentry>
-    <term>Critical notifications: <guiicon>Always keep on top</guiicon></term>
-    <listitem><para>Keep critical notifications, such as your battery is almost empty, always on top. This ensures they will also be visible while watching a fullscreen video or giving a presentation.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term>Normal notifications: <guiicon>Always keep on top</guiicon></term>
-    <listitem><para>Keep normal notifications, such as messages, always on top. This ensures they will also be visible while watching a fullscreen video or giving a presentation.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term>Low priority notifications: <guiicon>Show popup</guiicon> and <guiicon>Show in history</guiicon></term>
-    <listitem><para>Whether low priority notifications, such as track changes in your media player, will be shown as popups or in the history, respectively.</para></listitem>
-    </varlistentry>
-
-    </variablelist>
-</sect3>
-
-<sect3 id="notification-behavior">
-    <title>Behavior</title>
-
-    <variablelist>
-
-    <varlistentry>
-    <term>Popup: <guiicon>Show near notification icon</guiicon></term>
-    <listitem><para>Show notification popups close to where your notification icon is located in your panel.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Choose Custom Position...</guiicon></term>
-    <listitem><para>Lets you choose a fixed screen corner where notification popups will be positioned.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-        <term><guiicon>Hide after:</guiicon></term>
-    <listitem><para>After how many seconds the notification popup will automatically disappear. You can choose anywhere between 1 and 120 seconds.</para></listitem>
-    </varlistentry>
-
-    </variablelist>
-</sect3>
-
-<sect3 id="progress-and-badges">
-    <title>Application Progress and Badges</title>
-
-    <sect4 id="application-progress">
-        <title>Application progress</title>
-
-        <para>Options in this section control how application progress, such as copying or downloading a file, is presented.</para>
-
-        <variablelist>
-
-        <varlistentry>
-        <term><guiicon>Show in task manager</guiicon></term>
-        <listitem><para>Colorize the window in the panel based on the progress.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-        <term><guiicon>Show in notifications</guiicon></term>
-        <listitem><para>Show a notification popup during the progress.</para></listitem>
-        </varlistentry>
-
-        <varlistentry>
-        <term><guiicon>Keep popup open during progress</guiicon></term>
-        <listitem><para>Whether the popup should remain visible for the entire duration of the progress or automatically hide. It will always be shown again when the task finishes or fails.</para></listitem>
-        </varlistentry>
-
-        </variablelist>
-    </sect4>
-
-    <sect4 id="badges">
-        <title>Notification badges</title>
-
-        <variablelist>
-
-        <varlistentry>
-        <term><guiicon>Show in task manager</guiicon></term>
-        <listitem><para>Let applications show badges, such as an unread message count, in the panel.</para></listitem>
-        </varlistentry>
-
-        </variablelist>
-    </sect4>
-
-</sect3>
-
-</sect2>
-
-<sect2 id="application-settings">
-<title>Application Settings</title>
-
-<para>Clicking the <guilabel>Configure...</guilabel> button at the end of the list opens the application settings page which lets you configure notification behavior on a per-application and per-service basis.</para>
-
-<para>Use the sidebar on the left to choose an entry from the <guilabel>Applications</guilabel> or <guilabel>System Services</guilabel> category.</para>
-
-<para>General warning popups as well as startup and shutdown sounds are located under the <guilabel>Plasma Workspace</guilabel> service.</para>
-
-<para>Applications that do not provide proper identification, such as shell scripts, can be configured using the <guilabel>Other Applications</guilabel> entry.</para>
-
-<variablelist>
-
-    <varlistentry>
-    <term><guiicon>Show popups</guiicon></term>
-    <listitem><para>Whether this application may show popup notifications.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Show in do not disturb mode</guiicon></term>
-    <listitem><para>Whether this application may show popup notifications even when in do not disturb mode.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Show in history</guiicon></term>
-    <listitem><para>Whether this application's notifications will be kept in the notification history.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Show notification badges</guiicon></term>
-    <listitem><para>Whether this application may show badges, such as an unread message count, in the panel.</para></listitem>
-    </varlistentry>
-
-    <varlistentry>
-    <term><guiicon>Configure Events...</guiicon></term>
-    <listitem><para>For &kde; applications you can also configure each notification individually.</para></listitem>
-    </varlistentry>
-
-</variablelist>
-
-</sect2>
-
-</sect1>
-
-</article>
diff --git a/kcms/CMakeLists.txt b/kcms/CMakeLists.txt
index 5079c2e16..65e5e4aec 100644
--- a/kcms/CMakeLists.txt
+++ b/kcms/CMakeLists.txt
@@ -16,7 +16,6 @@ add_subdirectory( launch )
 add_subdirectory( landingpage )
 add_subdirectory( keys )
 add_subdirectory( ksmserver )
-add_subdirectory( nightcolor )
 add_subdirectory( users )
 
 if (CMAKE_SYSTEM_NAME MATCHES Linux)
@@ -29,8 +28,6 @@ add_subdirectory( desktoppaths )
 add_subdirectory(activities)
 add_subdirectory(componentchooser)
 add_subdirectory(kded)
-add_subdirectory(formats)
-add_subdirectory(notifications)
 add_subdirectory(runners)
 add_subdirectory(spellchecking)
 add_subdirectory(qtquicksettings)
diff --git a/kcms/formats/CMakeLists.txt b/kcms/formats/CMakeLists.txt
deleted file mode 100644
index b731c065d..000000000
--- a/kcms/formats/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# KI18N Translation Domain for this library
-add_definitions(-DTRANSLATION_DOMAIN=\"kcmformats\")
-
-set(kcm_formats_PART_SRCS
-    kcmformats.cpp
-)
-
-ki18n_wrap_ui(kcm_formats_PART_SRCS kcmformatswidget.ui )
-
-add_library(kcm_formats MODULE ${kcm_formats_PART_SRCS})
-
-kcoreaddons_desktop_to_json(kcm_formats formats.desktop SERVICE_TYPES kcmodule.desktop)
-
-target_link_libraries(kcm_formats Qt::Core Qt::DBus Qt::Widgets KF5::I18n KF5::ConfigCore KF5::KCMUtils)
-
-install(TARGETS kcm_formats  DESTINATION ${KDE_INSTALL_PLUGINDIR} )
-
-
-########### install files ###############
-
-install( FILES formats.desktop  DESTINATION  ${KDE_INSTALL_KSERVICES5DIR} )
diff --git a/kcms/formats/Messages.sh b/kcms/formats/Messages.sh
deleted file mode 100644
index 0d4787b30..000000000
--- a/kcms/formats/Messages.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /usr/bin/env bash
-$EXTRACTRC *.ui >> rc.cpp
-$XGETTEXT *.cpp -o $podir/kcmformats.pot
-rm -f rc.cpp
-
diff --git a/kcms/formats/formats.desktop b/kcms/formats/formats.desktop
deleted file mode 100644
index 701d45224..000000000
--- a/kcms/formats/formats.desktop
+++ /dev/null
@@ -1,174 +0,0 @@
-[Desktop Entry]
-Icon=preferences-desktop-locale
-Type=Service
-X-KDE-ServiceTypes=KCModule
-X-DocPath=kcontrol/formats/index.html
-
-X-KDE-Library=kcm_formats
-X-KDE-ParentApp=kcontrol
-
-X-KDE-System-Settings-Parent-Category=regionalsettings
-X-KDE-Weight=50
-
-Name=Formats
-Name[ar]=التّنسيقات
-Name[ast]=Formatos
-Name[az]=Formatlar
-Name[bs]=Formati
-Name[ca]=Formats
-Name[ca at valencia]=Formats
-Name[cs]=Formáty
-Name[da]=Formater
-Name[de]=Formate
-Name[el]=Μορφές
-Name[en_GB]=Formats
-Name[es]=Formatos
-Name[et]=Vormingud
-Name[eu]=Formatuak
-Name[fi]=Muotoilu
-Name[fr]=Formats
-Name[gl]=Formatos
-Name[he]=תבניות
-Name[hu]=Formátumok
-Name[ia]=Formatos
-Name[id]=Format
-Name[is]=Snið
-Name[it]=Formati
-Name[ja]=フォーマット
-Name[ko]=형식
-Name[lt]=Formatai
-Name[nb]=Formater
-Name[nds]=Formaten
-Name[nl]=Formaten
-Name[nn]=Format
-Name[pa]=ਫਾਰਮੈਟ
-Name[pl]=Formaty
-Name[pt]=Formatos
-Name[pt_BR]=Formatos
-Name[ro]=Formate
-Name[ru]=Форматы
-Name[sk]=Formáty
-Name[sl]=Oblike
-Name[sr]=Формати
-Name[sr at ijekavian]=Формати
-Name[sr at ijekavianlatin]=Formati
-Name[sr at latin]=Formati
-Name[sv]=Format
-Name[tg]=Форматҳо
-Name[tr]=Biçimler
-Name[uk]=Формати
-Name[vi]=Định dạng
-Name[x-test]=xxFormatsxx
-Name[zh_CN]=格式
-Name[zh_TW]=格式
-Comment=Numeric, Currency and Time Formats
-Comment[ar]=التّنسيقات الرّقميّة، والعملة والوقت
-Comment[ast]=Formatos numbéricos, horarios y de divises
-Comment[az]=Numeric, Currency and Time Formats Say, Valyuta və Vaxt formatları
-Comment[bs]=Brojčani,valutni i vremenski formati
-Comment[ca]=Format numèric, monetari i horari
-Comment[ca at valencia]=Format numèric, monetari i horari
-Comment[cs]=Formáty čísel, měny a času
-Comment[da]=Formater for tal, valuta og tid
-Comment[de]=Formate für Zahlen, Währung und Zeitangaben
-Comment[el]=Αριθμητικές, νομισματικές και ωρολογιακές μορφές 
-Comment[en_GB]=Numeric, Currency and Time Formats
-Comment[es]=Formatos numéricos, de moneda y de hora
-Comment[et]=Arvude, vääringu ja aja vormingud
-Comment[eu]=Zenbaki, moneta eta ordu formatuak
-Comment[fi]=Lukujen, rahasummien ja ajanilmausten muotoilu
-Comment[fr]=Format numérique, de monnaie et d'heure
-Comment[gl]=Formatos de números, moeda e hora
-Comment[he]=תבניות של מספרים, מטבעות וזמנים
-Comment[hu]=Szám-, pénznem- és időformátumok
-Comment[ia]=Formatos numeric, de numerario e de tempore
-Comment[id]=Numerik, Mata Uang dan Format Waktu
-Comment[is]=Tölu-, gjaldmiðla- og tímasnið
-Comment[it]=Formati numerici, delle valute e dell'orario
-Comment[ja]=数字と通貨、時刻のフォーマット
-Comment[ko]=숫자, 통화, 시간 형식
-Comment[lt]=Skaitmenų, valiutos ir laiko formatai
-Comment[nb]=Formater for tall, valuta og tid
-Comment[nds]=Tallen-, Geld- un Tietformaten
-Comment[nl]=Indeling voor numerieke getallen, valuta en tijd
-Comment[nn]=Format for tal, valuta og tid
-Comment[pa]=ਅੰਕੀ, ਕਰੰਸੀ ਅਤੇ ਸਮੇਂ ਦੇ ਫਾਰਮੈਟ
-Comment[pl]=Formaty liczb, waluty i czasu
-Comment[pt]=Formatos Numéricos, Monetários e de Datas
-Comment[pt_BR]=Formatos de data/hora, numérico e monetário
-Comment[ro]=Formate numerice, valutare și orare
-Comment[ru]=Форматы записи чисел, времени и денежных сумм
-Comment[sk]=Číselné, menové a časové formáty
-Comment[sl]=Oblike števil, valut in časa
-Comment[sr]=Формати бројева, времена и валуте
-Comment[sr at ijekavian]=Формати бројева, времена и валуте
-Comment[sr at ijekavianlatin]=Formati brojeva, vremena i valute
-Comment[sr at latin]=Formati brojeva, vremena i valute
-Comment[sv]=Numeriska format, valutaformat och tidsformat
-Comment[tr]=Sayısal, Para Birimi ve Zaman Biçimleri
-Comment[uk]=Формати запису чисел, грошових сум та часу
-Comment[vi]=Định dạng số, tiền tệ và thời gian
-Comment[x-test]=xxNumeric, Currency and Time Formatsxx
-Comment[zh_CN]=数字,货币和时间格式
-Comment[zh_TW]=數值、貨幣與時間格式
-
-X-KDE-Keywords=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[az]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,dil,tərcümə,say formatı,yerli, Ölkə,tablolar,simvol dəstləri,Onluqlar simvolu,Minlik ayırıcı,simvol,ayırıcı,işarə,müsbət,mənfi,valyuta,pul,kəsirrəqəmləri,təqvim,vaxt,tarix,formatlar,həftə, həftənin başlanğıcı,ilk,kağız,ölçü,məktub,A4,ölçü,metrik,İngilis,İmperator
-X-KDE-Keywords[bg]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,език,превод,числа,формат,страна, държава,кодова таблица,кодировка,десетичен знак,разделител,валута,пари,календар,време,дата, седмица,работен ден,мерна единица,печат,размер
-X-KDE-Keywords[bn]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[bs]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,jezik,prevođenje,format brojeva,lokalizacija,skup znakova,decimalni simboli,separator hiljada,predznak,valuta,razlomak,kalendat,vrijem,datum,papir.,mjere
-X-KDE-Keywords[ca]=idioma,traducció,format numèric,configuració regional,país,jocs de caràcters,joc de caràcters,símbol decimal,separador de milers,símbol,separador,signe,positiu,negatiu,moneda,diners,dígits fraccionaris,calendari,hora,data,formats,setmana,inici de setmana,primer,paper,mida,carta,A4,mesura,mètric,Anglès,Imperial
-X-KDE-Keywords[ca at valencia]=idioma,traducció,format numèric,configuració regional,país,jocs de caràcters,joc de caràcters,símbol decimal,separador de milers,símbol,separador,signe,positiu,negatiu,moneda,diners,dígits fraccionaris,calendari,hora,data,formats,setmana,inici de setmana,primer,paper,mida,carta,A4,mesura,mètric,Anglés,Imperial
-X-KDE-Keywords[cs]=jazyk,překlad,formát čísel,locale,Země,znakové sady,sady znaků,Decimální symbol,Oddělovač tisíců,symbol,oddělovač,znaménko,kladné,záporné,měna,peníze,zlomky, kalendář,čas,datum,formáty,týden,začátek týdne,první,papír,velikost,dopis,A4,míry,metrické,Anglické,Imperiální
-X-KDE-Keywords[da]=sprog,oversættelse,talformat,locale,lokalitet,land,tegnsæt,decimalsymbol,tusindtalsseparator,symbol,separator,positive,negative,valuta,penge,brøktal,kalender,tid,klokkeslæt,dato,formater,uge,ugestart,første,papir,størrelse,letter,A4,måleenhed,metrisk,Engelsk,Imperial
-X-KDE-Keywords[de]=Sprachen,Übersetzung,Zahlenformat,Währung,Zeit,Datum,Formate,Regionales,Land,Zeichensätze,Dezimalzeichen,Tausendertrennzeichen,Symbole,Zeichen,Vorzeichen,Positiv,Negativ,Bruchzahlen,Wochenanfang,Papierformat,A4,Letter,Metrisch,Imperial,Maßeinheiten
-X-KDE-Keywords[el]=γλώσσα,μετάφραση,μορφή αριθμού,εντοπιότητα,χώρα,charsets,σύνολα χαρακτήρων,δεκαδικό σύμβολο,διαχωριστικό χιλιάδων,σύμβολο,διαχωριστικό,πρόσημο,θετικό,αρνητικό,νόμισμα,χρήμα,δεκαδικά ψηφία,ημερολόγιο,ώρα,ημερομηνία,μορφές,εβδομάδα,αρχή εβδομάδας,πρώτη,χαρτί,μέγεθος,letter,A4,μέτρηση,μετρικό,Αγγλικό,Αγγλοσαξονικό
-X-KDE-Keywords[en_GB]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[es]=idioma,traducción,formato de número,local,País,codificación,separador de decimales,separador de miles,símbolo,separador,signo,positivo,negativo,moneda,divisa,dígitos decimales,calendario,hora,fecha,formatos,semana,primer día de la semana,primero,papel,tamaño,carta,A4,medida,métrico,Inglés,Imperial
-X-KDE-Keywords[et]=keel,tõlkimine,arvuvorming,lokaat,riik,kodeering,kooditabel,kümnendkoht,tuhandete eraldaja,sümbol,eraldaja,märk,positiivne,negatiivne,raha,valuuta,murdarvud,kalender,kellaaeg,aeg,kuupäev,vormingud,nädal,nadala algus,paber,suurus,letter,A4,mõõtühikud,meetersüsteem,inglise süsteem
-X-KDE-Keywords[eu]=hizkuntza,itzulpena,zenbaki-formatua,eskualde-ezarpenak,Herrialdea,karaktere-jokoak,karaktere-jokoak,Ikur dezimala,Milakoen bereizlea,ikurra,bereizlea,zeinua,positiboa,negatiboa,moneta,dirua,zatikizko zifrak,egutegia,ordua,data,formatuak,astea,aste-hasiera,lehena,papera,tamaina,gutuna,A4,neurria,metrikoa,Ingelesa,Inperiala
-X-KDE-Keywords[fa]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[fi]=kieli,käännös,kääntäminen,lukujen muotoilu,numeroiden muotoilu,locale,alue,alueasetukset,maa,merkistöt,desimaalierotin,tuhaterotin,symboli,erotin,merkki,positiivinen,negatiivinen,valuutta,raha,desimaalipaikkoja,desimaalipaikat,kalenteri,aika,kellonaika,päiväys,päivämäärä,muodot,viikko,viikon alku,viikon ensimmäinen päivä,ensimmäinen,paperi,koko,letter,A4,mittajärjestelmä,mittaaminen,metrinen,Anglosaksinen
-X-KDE-Keywords[fr]=langue, traduction, format numérique, paramètres régionaux, pays, jeu de caractères, jeux de caractères, symbole décimal, séparateur des milliers, symbole, séparateur, signe, positif, négatif, devise, monnaie, chiffres après la virgule, calendrier, heure, date, formats, semaine, début de semaine, premier, papier, taille, lettre, A4, mesure, métrique, Français, Impérial
-X-KDE-Keywords[ga]=teanga,aistriúchán,formáid uimhreacha,logchaighdeán,Tír,tacair carachtar,siombail dheachúlach,deighilteoir mílte,siombail,deighilteoir,comhartha,deimhneach,diúltach,airgeadra,airgead,digití,féilire,am,dáta,formáidí,seachtain,tús na seachtaine,tús,páipéar,méid,litir,A4,tomhas,méadrach,Béarla,Impiriúil
-X-KDE-Keywords[gl]=idioma,lingua,linguaxe, tradución, formato numérico, local, País, caracteres, carácter, símbolo decimal, separador de milleiros, separador, signo, positivo, negativo, divisa, cartos, moeda, díxitos fraccionarios, calendario, almanaque, hora, data, formato, semana, primeiro día, papel, tamaño, A4, medida, métrico, inglés, imperial
-X-KDE-Keywords[gu]=ભાષા,ભાષાંતર,આંકડાનું બંધારણ,લિપિ,દેશ,અક્ષરસમૂહ,અક્ષર સમૂહો,દશાંશ ચિહ્ન,હજારને જુદું પાડનાર,ચિહ્ન,જુદું પાડનાર,નિશાની,ધન,ઋણ,ચલણ,પૈસા,અપૂર્ણાંક સંખ્યાઓ,તારિખીયું,સમય,તારીખ,બંધારણો,અઠવાડિયું,અઠવાડિયાંની શરુઆત,પહેલું,કાગળ,માપ,પત્ર,A4,માપ,મેટ્રિક,અંગ્રેજી,ઇમ્પિરીઅલ
-X-KDE-Keywords[hi]=भाषा, अनुवाद, संख्या स्वरूप, स्थान, देश, charsets, वर्ण सेट्स,दशमलव प्रतीक, हजारों विभाजक, प्रतीक, विभाजक, हस्ताक्षर, सकारात्मक, नकारात्मक,मुद्रा, पैसा, भिन्नात्मक अंक, पंचांग, समय, तिथि, स्वरूप, सप्ताह, सप्ताह प्रारंभ,पहले, कागज, आकार, पत्र, A4, उपाय, मैट्रिक, अंग्रेजी, इम्पीरियल
-X-KDE-Keywords[hu]=nyelv,fordítás,számformátum,területi beállítás,Ország,karakterkészletek,karakterkészletek,tizedesjel,ezres elválasztó,szimbólum,elválasztó,jel,pozitív,negatív,pénznem,pénz,tört számjegyek,naptár,idő,dátum,formátumok,hét,hét kezdete,első,papír,méret,letter,A4,measure,metrikus,Angol,Birodalmi
-X-KDE-Keywords[ia]=linguage,traduction,formato de numero,locale,Pais,charsets,insimul de characteres, Symbolo decimal,separator de milles,symbolo,separator,signo,positive,negative,numerario,moneta,cifras fractional,calendario,tempore,data,formatos,septimana,initio de septimana, prime,papiro,grandor,littera,A4,me 
-X-KDE-Keywords[id]=bahasa,terjemahan,format angka,locale,Negara,set karakter,set karakter,Simbol desimal,Pemisah ribuan,simbol,pemisah,tanda,positif,negatif,mata uang,uang,digit fraksi,kalender,waktu,tanggal,format,minggu,awal minggu,pertama,kertas,ukuran,surat,A4,satuan,metrik,Inggris,Imperial
-X-KDE-Keywords[is]=tungumál,þýðing,talnasnið,staðfærsla,Land,stafasett,stafatafla,tugatákn,þúsund,tákn,aðgreinir,merki,jákvætt,neikvætt,gjaldmiðill,peningar,tugabrot,dagatal,tími,dagsetning,snið,vika,upphafsdagur,fyrst,pappír,size,bréf,A4,mál,metra,Enskt,Imperial
-X-KDE-Keywords[it]=lingua,traduzione,formato dei numeri,localizzazione,nazione,codifica,insieme dei caratteri,simbolo decimale,separatore delle migliaia,simbolo,separatore,segno,positivo,negativo,moneta,cifre decimali,calendario,ora,data,formati,settimana,inizio settimana,primo,carta,dimensione,lettera,A4,misura,metrico,inglese,imperiale
-X-KDE-Keywords[kk]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[km]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[ko]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,언어,번역,숫자,로캘,로케일,국가,나라,지역,문자셋,문자 인코딩,인코딩,소숫점,기호,구분자,양수,음수,통화,화폐,돈,달력,시간,시각,날짜,주,시작 요일,요일,종이,크기,미터법
-X-KDE-Keywords[lt]=kalba,vertimas,skaičių formatas,skaiciu formatas,lokalė,lokale,šalis,salis,simbolių rinkinys,simboliu rinkinys,dešimtainis simbolis,desimtainis simbolis,tūkstančių skirtukas,tukstanciu skirtukas,simbolis,simbolių,simboliu,skirtukas,skyriklis,ženklas,zenklas,teigiamas,neigiamas,valiuta,pinigai,trupmeniniai skaitmenys,trupmenų skaitmenys,trupmenu skaitmenys,kalendorius,laikas,data,formatai,savaitė,savaite,savaitės pradžia,savaites pradzia,pirmas,pirma,popierius,popieriaus,dydis,letter,A4,matavimai,matavimo vienetai,metrinė,metrine,metriniai,anglų,anglu,imperiniai,imperinė,imperine
-X-KDE-Keywords[lv]=valoda,tulkojums,skaitļu formāts,lokāle,valsts,rakstzīmju kopas,decimālais simbols,tūkstošu atdalītājs,simbols,atdalītājs,zīme,pozitīvs,negatīvs,valūta, nauda,daļskaitļi,kalendārs,laiks,datums,formāti,nedēļa,nedēļas sākums, pirmais,papīrs,izmērs,vēstule,A4,mērvienības,metriskā,angļu,imperiālā
-X-KDE-Keywords[mr]=भाषा, भाषांतर, संख्या पद्धत, स्थानिक, देश, अक्षर संच, दशमान चिन्ह, सहस्त्र विभाजक, चिन्ह, विभाजक, निशाणी, पैसा, अपूर्णांक संख्या, दिनदर्शिका, वेळ, दिनांक, पद्धत, आठवडा, प्रथम, पान, आकार, A4, दशमान, इंग्रजी, शाही
-X-KDE-Keywords[nb]=språk,oversettelse,tallformat,lokale,Land,tegnsett,desimalsymbol,tusenseparator,symbol,separator,fortegn,positivt,negativt,valuta.penger,brøktall, tid,dato,formater,uke,ukestart,først,papir,letter,A4,mål.metrisk,engelsk,imperial
-X-KDE-Keywords[nds]=Spraak,Översetten,Tallenformaat,Spraakkoderen,Regiooninstellen,Land,Tekensett,Tekensetten,Dezimaalteken,Trennteken för Dusend,Trenner,Vörteken,positiv,negativ,positiev,negatiev,Geldsort,Geld,Brooktallen,Nakommasteden,Kalenner,Tiet,Datum,Formaten,Week,Wekenanfang,eerst,Papeer,Papeergrött,A4,Meten,Maat,metersch,Eenheit,engelsch
-X-KDE-Keywords[nl]=taal,vertaling,getalformaat,locale,land,tekensets,decimaalsymbool,duizendscheidingsteken,symbool,scheidingsteken,teken,positief,negatief,valuta,geld,decimale cijfers,agenda,tijd,datum,formaten,week,weekbegin,eerst,papier,grootte,letter,A4,afmeting,metrisch,Engels,Imperiaal
-X-KDE-Keywords[nn]=språk,omsetjing,talformat,lokale,locale,land,teiknkodingar,teiknsett,desimalskiljeteikn,tusenskiljeteikn,symbol,skiljeteikn,tein,positiv,negativ,valuta,pengar,siffer,kalender,tid,dato,klokkeslett,format,veke,vekestart,første,papir,storleik,letter,A4,mål,metrisk,engelsk
-X-KDE-Keywords[pa]=ਭਾਸ਼ਾ,ਅਨੁਵਾਦ,ਨੰਬਰ ਫਾਰਮੈਟ,ਅੰਕ,ਲੋਕੇਲ,ਦੇਸ਼,ਅੱਖਰਸੈੱਟ,ਅੱਖਰ-ਸੈੱਟ,ਦਸ਼ਮਵਲ ਨਿਸ਼ਾਨ,ਹਜ਼ਾਰ,ਨਿਸ਼ਾਨ,ਵੱਖਰੇਵਾਂ,ਸਾਈਨ,ਧਨਾਤਮਕ,ਰਿਣਾਤਮਕ,ਮੁਦਰਾ,ਪੈਸਾ,ਧਨ,ਭਿੰਨ ਅੰਕ,ਕੈਲੰਡਰ,ਸਮਾਂ,ਮਿਤੀ,ਤਿਥੀ,ਤਾਰੀਖ,ਹਫ਼ਤਾ,ਹਫ਼ਤਾ ਸ਼ੁਰੂ,ਪਹਿਲਾਂ,ਪੇਪਰ,ਸਫ਼ਾ,ਆਕਾਰ,ਸਾਈਜ਼,ਪੱਤਰ,ਲੈਟਰ,A4,ਏ4,ਮਾਪ,ਮਾਪਕ,ਅੰਗਰੇਜ਼ੀ,ਮੀਟਰ
-X-KDE-Keywords[pl]=język,tłumaczenie,format liczb,regionalność,kraj,zestaw znaków,symbol dziesiętny,separator tysięcy,symbol,separator,znak,dodatni,ujemny,waluta,pieniądze,ułamkowe cyfry,kalendarz,czas,data,formaty,tydzień,początek tygodnia,pierwszy,papier,rozmiar,list,A4,miara,metryczna,Angielski,Cesarskie
-X-KDE-Keywords[pt]=língua,tradução,formato de números,localização,país,codificações,codificações de caracteres,símbolo decimal,separador de milhares,símbolo,separador,sinal,positivo,negativo,moeda,monetário,casas decimais,hora,data,formatos,semana,início da semana,primeiro,papel,tamanho,carta,A4,medida,medir,Inglês,Imperial
-X-KDE-Keywords[pt_BR]=idioma,tradução,formato de números,localização,país,codificações,codificações de caracteres,símbolo decimal,separador de milhares,símbolo,separador,sinal,positivo,negativo,moeda,monetário,casas decimais,calendário,hora,data,formatos,semana,início da semana,primeiro,papel,tamanho,carta,A4,medida,medir,Inglês,Imperial
-X-KDE-Keywords[ro]=limbă,traducere,format număr,localizare,țară,set de caractere,seturi de caractere,simbol decimal, separator de mii,simbol,separator,semn,pozitiv,negativ,monedă,bani,zecimale,calendar,timp,dată,formate, început,săptămână,prima,hârtie,dimensiune,A4,măsură,metric,unități,Imperial
-X-KDE-Keywords[ru]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,язык,перевод,формат чисел,локаль,страна,кодировка,наборы символов,десятичный разделитель,тысячный разделитель,символ,разделитель,подпись,положительный, отрицательный,валюта, деньги, дробные цифры, календарь, время, дата,формат, неделя,начало недели,бумага,размер, буквы,измерение,система мера,метрика
-X-KDE-Keywords[sk]=jazyk,preklad,number format,locale,Krajina,charsets,character sets,Decimal symbol,Thousands separator,symbol,oddeľovač,znamienko,kladný,záporný,mena,peniaze,fractional digits,kalendár,čas,dátum,formáty,týždeň,week start,prvý,papier,veľkosť,letter,A4,measure,metric,English,Imperial
-X-KDE-Keywords[sl]=jezik,jeziki,prevod,prevodi,oblika števil,krajevne nastavitve,država,znaki,nabori znakov,decimalno ločilo,ločilo skupin,simbol,ločilo,ločilnik,negativno,pozitivno,oznaka,valuta,denar,decimalke,decimalna mesta,koledar,datum,oblike,teden,začetek tedna,prvi,papir,velikost,letter,a4,mere,mera,metrika,merski sistem,enote,enota
-X-KDE-Keywords[sr]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,језик,превод,формат бројева,локалитет,држава,кодирање,децимални симбол,раздвајач хиљада,раздвајач,симбол,знак,позитивно,негативно,валута,новац,разломак,календар,време,датум,формати,седмица,почетак седмице,недеља,папир,величина,А4,летер,метрички,империјални
-X-KDE-Keywords[sr at ijekavian]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,језик,превод,формат бројева,локалитет,држава,кодирање,децимални симбол,раздвајач хиљада,раздвајач,симбол,знак,позитивно,негативно,валута,новац,разломак,календар,време,датум,формати,седмица,почетак седмице,недеља,папир,величина,А4,летер,метрички,империјални
-X-KDE-Keywords[sr at ijekavianlatin]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,jezik,prevod,format brojeva,lokalitet,država,kodiranje,decimalni simbol,razdvajač hiljada,razdvajač,simbol,znak,pozitivno,negativno,valuta,novac,razlomak,kalendar,vreme,datum,formati,sedmica,početak sedmice,nedelja,papir,veličina,A4,leter,metrički,imperijalni
-X-KDE-Keywords[sr at latin]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,jezik,prevod,format brojeva,lokalitet,država,kodiranje,decimalni simbol,razdvajač hiljada,razdvajač,simbol,znak,pozitivno,negativno,valuta,novac,razlomak,kalendar,vreme,datum,formati,sedmica,početak sedmice,nedelja,papir,veličina,A4,leter,metrički,imperijalni
-X-KDE-Keywords[sv]=språk,översättning,nummerformat,plats,Land,teckenuppsättningar,decimalsymbol,tusentalsavgränsare,symbol,avgränsare,tecken,positivt,negativt,valuta,pengar,bråkdelssiffror,kalender,tid,datum,format,vecka, veckostart,först,papper,storlek,letter,A4,mått,meter,engelska
-X-KDE-Keywords[tr]=dil,çeviri,sayısal biçim,yerel,Ülke,karakter seti,karakter setleri,Ondalık sembolü,binler basamağı ayırıcı,sembol,ayırıcı,işaret,pozitif,negatif,para birimi,para,kesir,takvim,saat,tarih,biçimler,hafta,hafta başı,ilk,kağıt,boyut,A4,mektup,ölçü,metrik,İngiliz
-X-KDE-Keywords[ug]=تىل،تەرجىمە،سانلارنىڭ يېزىلىشى،يەرلەشمە،دۆلەت،ھەرپ توپى، ھەرپ توپى،ئونلۇق بەلگىلەر،مىڭلار خانە ئايرىغۇچ، بەلگە،ئايرىغۇچ،ئالامەت،مۇسبەت،مەنپىي،پۇل،كەسىرسان،يىلنامە،ۋاقىت،چېسلا،پىچىملار،ھەپتە،ھەپتە بېشى،تۇنجى،قەغەز،چوڭلۇق،خەت،A4،ئۆلچەش،ئۇزۇنلۇق بىرلىكى،English، خانلىق
-X-KDE-Keywords[uk]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,мова,мови,переклад,переклади,числа,формат,число,локаль,країна,набір,символ,кодування,розряд,тисяч,дробовий,дробова частина,роздільник,символ,знак,додатне,додатний,додатній,від’ємний,від’ємне,валюта,гроші,грошова одиниця,календар,час,дата,формати,тиждень,робочий тиждень,початок тижня,перший,папір,аркуш,вимір,виміри,вимірювання,одиниці вимірювання,метричний,метричні,метр,англійські,імперські
-X-KDE-Keywords[vi]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,ngôn ngữ,biên dịch,định dạng số,vùng,quốc gia,bộ mã tự,bộ chữ,dấu thập phân,dấu phân cách hàng nghìn,kí hiệu,phần phân cách,dấu,dương,âm,tiền tệ,tiền,chữ số thập phân,lịch,thời gian,ngày,định dạng,tuần,bắt đầu tuần,đầu tiên,giấy,cỡ,thư,đo,theo hệ mét,theo hệ Anh
-X-KDE-Keywords[wa]=lingaedje,ratournaedje,cogne des nombes,locåle,Payi,payis,djeus d' caracteres,djeus di caracteres,simbole des decimåles,separateu des meyes,simbole,separateu,sene,pôzitif,negatif,manoye,cwårs,çanses,liårds,liyårds,caracteres di fraccions,calindrî,eure,date,cognes,samwinne,cominçmint del samwinne,prumî djoû del samwinne,kimince del samwinne,prumî,papî,grandeu,grandeur,lete,A4,mezeure,muzeure,metrike,Inglès,Imperiå
-X-KDE-Keywords[x-test]=xxlanguagexx,xxtranslationxx,xxnumber formatxx,xxlocalexx,xxCountryxx,xxcharsetsxx,xxcharacter setsxx,xxDecimal symbolxx,xxThousands separatorxx,xxsymbolxx,xxseparatorxx,xxsignxx,xxpositivexx,xxnegativexx,xxcurrencyxx,xxmoneyxx,xxfractional digitsxx,xxcalendarxx,xxtimexx,xxdatexx,xxformatsxx,xxweekxx,xxweek startxx,xxfirstxx,xxpaperxx,xxsizexx,xxletterxx,xxA4xx,xxmeasurexx,xxmetricxx,xxEnglishxx,xxImperialxx
-X-KDE-Keywords[zh_CN]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial,语言,翻译,数字格式,语系,国家,字符集,千分符,十进制符号,符号,分隔符,正数,负数,现金,钱,日历,分号,时间,日期,星期,周,第一,纸张,大小,信件,度量,度量衡,英制,公制
-X-KDE-Keywords[zh_TW]=language,translation,number format,locale,Country,charsets,character sets,Decimal symbol,Thousands separator,symbol,separator,sign,positive,negative,currency,money,fractional digits,calendar,time,date,formats,week,week start,first,paper,size,letter,A4,measure,metric,English,Imperial
-
-Categories=Qt;KDE;X-KDE-settings-translations;
diff --git a/kcms/formats/kcmformats.cpp b/kcms/formats/kcmformats.cpp
deleted file mode 100644
index 1fc452417..000000000
--- a/kcms/formats/kcmformats.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- *  kcmformats.cpp
- *  Copyright 2014 Sebastian Kügler <sebas at kde.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- */
-
-// own
-#include "kcmformats.h"
-#include "ui_kcmformatswidget.h"
-
-// Qt
-#include <QApplication>
-#include <QComboBox>
-#include <QDebug>
-#include <QFile>
-#include <QLocale>
-#include <QStandardPaths>
-#include <QTextCodec>
-
-// Frameworks
-#include <KLocalizedString>
-#include <KMessageBox>
-#include <KPluginFactory>
-#include <KSharedConfig>
-
-K_PLUGIN_CLASS_WITH_JSON(KCMFormats, "formats.json")
-
-KCMFormats::KCMFormats(QWidget *parent, const QVariantList &args)
-    : KCModule(parent, args)
-{
-    setQuickHelp(
-        i18n("<h1>Formats</h1>"
-             "You can configure the formats used for time, dates, money and other numbers here."));
-
-    m_ui = new Ui::KCMFormatsWidget;
-    m_ui->setupUi(this);
-    m_combos << m_ui->comboGlobal << m_ui->comboNumbers << m_ui->comboTime << m_ui->comboCurrency << m_ui->comboMeasurement << m_ui->comboCollate;
-}
-
-KCMFormats::~KCMFormats()
-{
-    delete m_ui;
-}
-
-bool countryLessThan(const QLocale &c1, const QLocale &c2)
-{
-    // Ensure that the "Default (C)" locale always appears at the top
-    if (c1.name() == QLatin1Char('C') && c2.name() != QLatin1String("C"))
-        return true;
-    if (c2.name() == QLatin1Char('C'))
-        return false;
-
-    const QString ncn1 = !c1.nativeCountryName().isEmpty() ? c1.nativeCountryName() : QLocale::countryToString(c1.country());
-    const QString ncn2 = !c2.nativeCountryName().isEmpty() ? c2.nativeCountryName() : QLocale::countryToString(c2.country());
-    return QString::localeAwareCompare(ncn1, ncn2) < 0;
-}
-
-void KCMFormats::load()
-{
-    QList<QLocale> allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry);
-    std::sort(allLocales.begin(), allLocales.end(), countryLessThan);
-    for (QComboBox *combo : qAsConst(m_combos)) {
-        initCombo(combo, allLocales);
-    }
-
-    readConfig();
-
-    for (QComboBox *combo : qAsConst(m_combos)) {
-        connectCombo(combo);
-    }
-
-    connect(m_ui->checkDetailed, &QAbstractButton::toggled, [=]() {
-        updateExample();
-        updateEnabled();
-        emit changed(true);
-    });
-
-    updateEnabled();
-    updateExample();
-    emit changed(false);
-}
-
-void KCMFormats::initCombo(QComboBox *combo, const QList<QLocale> &allLocales)
-{
-    combo->clear();
-    const QString clabel = i18n("No change");
-    combo->addItem(clabel, QString());
-    for (const auto &locale : allLocales) {
-        addLocaleToCombo(combo, locale);
-    }
-}
-
-void KCMFormats::connectCombo(QComboBox *combo)
-{
-    connect(combo, &QComboBox::currentTextChanged, [=]() {
-        emit changed(true);
-        updateExample();
-    });
-}
-
-void KCMFormats::addLocaleToCombo(QComboBox *combo, const QLocale &locale)
-{
-    const QString clabel = !locale.nativeCountryName().isEmpty() ? locale.nativeCountryName() : QLocale::countryToString(locale.country());
-    // This needs to use name() rather than bcp47name() or later on the export will generate a non-sense locale (e.g. "it" instead of
-    // "it_IT")
-    // TODO: Properly handle scripts (@foo)
-    QString cvalue = locale.name();
-    if (!cvalue.contains(QLatin1Char('.')) && cvalue != QLatin1Char('C')) {
-        // explicitly add the encoding,
-        // otherwise Qt doesn't accept dead keys and garbles the output as well
-        cvalue.append(QLatin1Char('.') + QTextCodec::codecForLocale()->name());
-    }
-
-    QString flagcode;
-    const QStringList split = locale.name().split(QLatin1Char('_'));
-    if (split.count() > 1) {
-        flagcode = split[1].toLower();
-    }
-    QIcon flagIcon = loadFlagIcon(flagcode);
-
-    const QString nativeLangName = locale.nativeLanguageName();
-    if (!nativeLangName.isEmpty()) {
-        combo->addItem(flagIcon, i18n("%1 - %2 (%3)", clabel, nativeLangName, locale.name()), cvalue);
-    } else {
-        combo->addItem(flagIcon, i18n("%1 (%2)", clabel, locale.name()), cvalue);
-    }
-}
-
-void setCombo(QComboBox *combo, const QString &key)
-{
-    const int ix = combo->findData(key);
-    if (ix > -1) {
-        combo->setCurrentIndex(ix);
-    }
-}
-
-QIcon KCMFormats::loadFlagIcon(const QString &flagCode)
-{
-    QIcon icon = m_cachedFlags.value(flagCode);
-    if (!icon.isNull()) {
-        return icon;
-    }
-
-    QString flag(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kf5/locale/countries/%1/flag.png").arg(flagCode)));
-    if (!flag.isEmpty()) {
-        icon = QIcon(flag);
-    } else {
-        if (m_cachedUnknown.isNull()) {
-            m_cachedUnknown = QIcon::fromTheme("unknown");
-        }
-        icon = m_cachedUnknown;
-    }
-    m_cachedFlags.insert(flagCode, icon);
-
-    return icon;
-}
-
-const static QString configFile = QStringLiteral("plasma-localerc");
-const static QString exportFile = QStringLiteral("plasma-locale-settings.sh");
-
-const static QString lcLang = QStringLiteral("LANG");
-const static QString lcNumeric = QStringLiteral("LC_NUMERIC");
-const static QString lcTime = QStringLiteral("LC_TIME");
-const static QString lcMonetary = QStringLiteral("LC_MONETARY");
-const static QString lcMeasurement = QStringLiteral("LC_MEASUREMENT");
-const static QString lcCollate = QStringLiteral("LC_COLLATE");
-const static QString lcCtype = QStringLiteral("LC_CTYPE");
-
-const static QString lcLanguage = QStringLiteral("LANGUAGE");
-
-void KCMFormats::readConfig()
-{
-    m_config = KConfigGroup(KSharedConfig::openConfig(configFile), "Formats");
-
-    bool useDetailed = m_config.readEntry("useDetailed", false);
-    m_ui->checkDetailed->setChecked(useDetailed);
-
-    setCombo(m_ui->comboGlobal, m_config.readEntry(lcLang, qgetenv(lcLang.toLatin1())));
-
-    setCombo(m_ui->comboNumbers, m_config.readEntry(lcNumeric, qgetenv(lcNumeric.toLatin1())));
-    setCombo(m_ui->comboTime, m_config.readEntry(lcTime, qgetenv(lcTime.toLatin1())));
-    setCombo(m_ui->comboCollate, m_config.readEntry(lcCollate, qgetenv(lcCollate.toLatin1())));
-    setCombo(m_ui->comboCurrency, m_config.readEntry(lcMonetary, qgetenv(lcMonetary.toLatin1())));
-    setCombo(m_ui->comboMeasurement, m_config.readEntry(lcMeasurement, qgetenv(lcMeasurement.toLatin1())));
-
-    updateEnabled();
-}
-
-void KCMFormats::writeConfig()
-{
-    m_config = KConfigGroup(KSharedConfig::openConfig(configFile), "Formats");
-
-    // global ends up empty here when OK button is clicked from kcmshell5,
-    // apparently the data in the combo is gone by the time save() is called.
-    // This might be a problem in KCModule, but does not directly affect us
-    // since within systemsettings, it works fine.
-    // See https://bugs.kde.org/show_bug.cgi?id=334624
-    if (m_ui->comboGlobal->count() == 0) {
-        qWarning() << "Couldn't read data from UI, writing configuration failed.";
-        return;
-    }
-    const QString global = m_ui->comboGlobal->currentData().toString();
-
-    if (!m_ui->checkDetailed->isChecked()) {
-        // Global setting, clean up config
-        m_config.deleteEntry("useDetailed");
-        if (global.isEmpty()) {
-            m_config.deleteEntry(lcLang);
-        } else {
-            m_config.writeEntry(lcLang, global);
-        }
-        m_config.deleteEntry(lcNumeric);
-        m_config.deleteEntry(lcTime);
-        m_config.deleteEntry(lcMonetary);
-        m_config.deleteEntry(lcMeasurement);
-        m_config.deleteEntry(lcCollate);
-        m_config.deleteEntry(lcCtype);
-    } else {
-        // Save detailed settings
-        m_config.writeEntry("useDetailed", true);
-
-        if (global.isEmpty()) {
-            m_config.deleteEntry(lcLang);
-        } else {
-            m_config.writeEntry(lcLang, global);
-        }
-
-        const QString numeric = m_ui->comboNumbers->currentData().toString();
-        if (numeric.isEmpty()) {
-            m_config.deleteEntry(lcNumeric);
-        } else {
-            m_config.writeEntry(lcNumeric, numeric);
-        }
-
-        const QString time = m_ui->comboTime->currentData().toString();
-        if (time.isEmpty()) {
-            m_config.deleteEntry(lcTime);
-        } else {
-            m_config.writeEntry(lcTime, time);
-        }
-
-        const QString monetary = m_ui->comboCurrency->currentData().toString();
-        if (monetary.isEmpty()) {
-            m_config.deleteEntry(lcMonetary);
-        } else {
-            m_config.writeEntry(lcMonetary, monetary);
-        }
-
-        const QString measurement = m_ui->comboMeasurement->currentData().toString();
-        if (measurement.isEmpty()) {
-            m_config.deleteEntry(lcMeasurement);
-        } else {
-            m_config.writeEntry(lcMeasurement, measurement);
-        }
-
-        const QString collate = m_ui->comboCollate->currentData().toString();
-        if (collate.isEmpty()) {
-            m_config.deleteEntry(lcCollate);
-        } else {
-            m_config.writeEntry(lcCollate, collate);
-        }
-    }
-
-    m_config.sync();
-}
-
-void KCMFormats::save()
-{
-    writeConfig();
-    KMessageBox::information(this,
-                             i18n("Your changes will take effect the next time you log in."),
-                             i18n("Format Settings Changed"),
-                             QStringLiteral("FormatSettingsChanged"));
-}
-
-void KCMFormats::defaults()
-{
-    m_ui->checkDetailed->setChecked(false);
-
-    // restore user defaults from env vars
-    setCombo(m_ui->comboGlobal, qgetenv(lcLang.toLatin1()));
-    setCombo(m_ui->comboNumbers, qgetenv(lcNumeric.toLatin1()));
-    setCombo(m_ui->comboTime, qgetenv(lcTime.toLatin1()));
-    setCombo(m_ui->comboCollate, qgetenv(lcCollate.toLatin1()));
-    setCombo(m_ui->comboCurrency, qgetenv(lcMonetary.toLatin1()));
-    setCombo(m_ui->comboMeasurement, qgetenv(lcMeasurement.toLatin1()));
-
-    updateEnabled();
-}
-
-void KCMFormats::updateEnabled()
-{
-    const bool enabled = m_ui->checkDetailed->isChecked();
-
-    m_ui->labelNumbers->setEnabled(enabled);
-    m_ui->labelTime->setEnabled(enabled);
-    m_ui->labelCurrency->setEnabled(enabled);
-    m_ui->labelMeasurement->setEnabled(enabled);
-    m_ui->labelCollate->setEnabled(enabled);
-    m_ui->comboNumbers->setEnabled(enabled);
-    m_ui->comboTime->setEnabled(enabled);
-    m_ui->comboCurrency->setEnabled(enabled);
-    m_ui->comboMeasurement->setEnabled(enabled);
-    m_ui->comboCollate->setEnabled(enabled);
-}
-
-void KCMFormats::updateExample()
-{
-    const bool useDetailed = m_ui->checkDetailed->isChecked();
-
-    QLocale nloc;
-    QLocale tloc;
-    QLocale cloc;
-    QLocale mloc;
-
-    QString str;
-    QString glob = m_ui->comboGlobal->currentData().toString();
-
-    if (useDetailed) {
-        str = m_ui->comboNumbers->currentData().toString();
-        nloc = str.isEmpty() ? QLocale(glob) : QLocale(str);
-
-        str = m_ui->comboTime->currentData().toString();
-        tloc = str.isEmpty() ? QLocale(glob) : QLocale(str);
-
-        str = m_ui->comboCurrency->currentData().toString();
-        cloc = str.isEmpty() ? QLocale(glob) : QLocale(str);
-
-        str = m_ui->comboMeasurement->currentData().toString();
-        mloc = str.isEmpty() ? QLocale(glob) : QLocale(str);
-    } else {
-        nloc = QLocale(glob);
-        tloc = QLocale(glob);
-        cloc = QLocale(glob);
-        mloc = QLocale(glob);
-    }
-
-    const QString numberExample = nloc.toString(1000.01);
-    const QString timeExample = i18n("%1 (long format)", tloc.toString(QDateTime::currentDateTime())) + QLatin1Char('\n')
-        + i18n("%1 (short format)", tloc.toString(QDateTime::currentDateTime(), QLocale::ShortFormat));
-    const QString currencyExample = cloc.toCurrencyString(24.00);
-
-    QString measurementSetting;
-    if (mloc.measurementSystem() == QLocale::ImperialUKSystem) {
-        measurementSetting = i18nc("Measurement combobox", "Imperial UK");
-    } else if (mloc.measurementSystem() == QLocale::ImperialUSSystem || mloc.measurementSystem() == QLocale::ImperialSystem) {
-        measurementSetting = i18nc("Measurement combobox", "Imperial US");
-    } else {
-        measurementSetting = i18nc("Measurement combobox", "Metric");
-    }
-
-    m_ui->exampleNumbers->setText(numberExample);
-    m_ui->exampleTime->setText(timeExample);
-    m_ui->exampleCurrency->setText(currencyExample);
-    m_ui->exampleMeasurement->setText(measurementSetting);
-}
-
-#include "kcmformats.moc"
diff --git a/kcms/formats/kcmformats.h b/kcms/formats/kcmformats.h
deleted file mode 100644
index 1aa76024d..000000000
--- a/kcms/formats/kcmformats.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  kcmformats.h
- *  Copyright 2014 Sebastian Kügler <sebas at kde.org>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- */
-#ifndef __kcmformats_h__
-#define __kcmformats_h__
-
-#include <KCModule>
-#include <KConfigGroup>
-
-#include <QHash>
-#include <QIcon>
-
-namespace Ui
-{
-class KCMFormatsWidget;
-}
-class QComboBox;
-
-class KCMFormats : public KCModule
-{
-    Q_OBJECT
-
-public:
-    explicit KCMFormats(QWidget *parent = nullptr, const QVariantList &list = QVariantList());
-    ~KCMFormats() override;
-
-    void load() override;
-    void save() override;
-    void defaults() override;
-
-private:
-    void addLocaleToCombo(QComboBox *combo, const QLocale &locale);
-    void initCombo(QComboBox *combo, const QList<QLocale> &allLocales);
-    void connectCombo(QComboBox *combo);
-    QList<QComboBox *> m_combos;
-
-    QIcon loadFlagIcon(const QString &flagCode);
-    QHash<QString, QIcon> m_cachedFlags;
-    QIcon m_cachedUnknown;
-
-    void readConfig();
-    void writeConfig();
-
-    void updateExample();
-    void updateEnabled();
-
-    Ui::KCMFormatsWidget *m_ui;
-    KConfigGroup m_config;
-};
-
-#endif
diff --git a/kcms/formats/kcmformatswidget.ui b/kcms/formats/kcmformatswidget.ui
deleted file mode 100644
index 938b58568..000000000
--- a/kcms/formats/kcmformatswidget.ui
+++ /dev/null
@@ -1,385 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <author>Sebastian Kuegler</author>
- <class>KCMFormatsWidget</class>
- <widget class="QWidget" name="KCMFormatsWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>755</width>
-    <height>585</height>
-   </rect>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <spacer name="verticalSpacer_2">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType">
-      <enum>QSizePolicy::Fixed</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>16</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="1">
-      <layout class="QFormLayout" name="formLayout">
-       <property name="fieldGrowthPolicy">
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
-       </property>
-       <property name="horizontalSpacing">
-        <number>6</number>
-       </property>
-       <property name="verticalSpacing">
-        <number>6</number>
-       </property>
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_10">
-         <property name="text">
-          <string>Re&gion:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboGlobal</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="comboGlobal">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QCheckBox" name="checkDetailed">
-         <property name="text">
-          <string>De&tailed Settings</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="0">
-        <widget class="QLabel" name="labelNumbers">
-         <property name="text">
-          <string>&Numbers:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboNumbers</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1">
-        <widget class="QComboBox" name="comboNumbers">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="0">
-        <widget class="QLabel" name="labelTime">
-         <property name="text">
-          <string>&Time:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboTime</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="1">
-        <widget class="QComboBox" name="comboTime">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="labelCurrency">
-         <property name="text">
-          <string>Currenc&y:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboCurrency</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="1">
-        <widget class="QComboBox" name="comboCurrency">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="labelMeasurement">
-         <property name="text">
-          <string>Measurement &Units:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboMeasurement</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="1">
-        <widget class="QComboBox" name="comboMeasurement">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="0">
-        <widget class="QLabel" name="labelCollate">
-         <property name="text">
-          <string>Co&llation and Sorting:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy">
-          <cstring>comboCollate</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="1">
-        <widget class="QComboBox" name="comboCollate">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>300</width>
-           <height>0</height>
-          </size>
-         </property>
-        </widget>
-       </item>
-       <item row="7" column="0">
-        <widget class="QLabel" name="label_6">
-         <property name="text">
-          <string/>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="8" column="0">
-        <widget class="QLabel" name="labelMeasurement_2">
-         <property name="text">
-          <string><b>Description</b></string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="0">
-        <widget class="QLabel" name="lexNumbers">
-         <property name="text">
-          <string>Numbers:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="9" column="1">
-        <widget class="QLabel" name="exampleNumbers">
-         <property name="text">
-          <string/>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="10" column="0">
-        <widget class="QLabel" name="lexTime">
-         <property name="text">
-          <string>Time:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="10" column="1">
-        <widget class="QLabel" name="exampleTime">
-         <property name="text">
-          <string/>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="11" column="0">
-        <widget class="QLabel" name="lexCurrency">
-         <property name="text">
-          <string>Currency:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="11" column="1">
-        <widget class="QLabel" name="exampleCurrency">
-         <property name="text">
-          <string/>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="12" column="0">
-        <widget class="QLabel" name="lexMeasurement_2">
-         <property name="text">
-          <string>Measurement Units:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-       <item row="12" column="1">
-        <widget class="QLabel" name="exampleMeasurement">
-         <property name="text">
-          <string/>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="2">
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeType">
-        <enum>QSizePolicy::Fixed</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>16</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="0" column="0">
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeType">
-        <enum>QSizePolicy::Fixed</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>16</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer_3">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>32</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QLabel" name="label_5">
-     <property name="text">
-      <string/>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/kcms/nightcolor/CMakeLists.txt b/kcms/nightcolor/CMakeLists.txt
deleted file mode 100644
index c10e388b2..000000000
--- a/kcms/nightcolor/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-# KI18N Translation Domain for this library
-add_definitions(-DTRANSLATION_DOMAIN=\"kcm_nightcolor\")
-
-set(kcm_nightcolor_SRCS
-    kcm.cpp
-)
-
-add_library(kcm_nightcolor MODULE ${kcm_nightcolor_SRCS})
-
-target_link_libraries(kcm_nightcolor
-    KF5::QuickAddons
-    KF5::I18n
-
-    PW::LibColorCorrect
-)
-
-kcoreaddons_desktop_to_json(kcm_nightcolor "kcm_nightcolor.desktop" SERVICE_TYPES kcmodule.desktop)
-
-#this desktop file is installed only for retrocompatibility with sycoca
-install(FILES kcm_nightcolor.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
-
-install(TARGETS kcm_nightcolor DESTINATION ${KDE_INSTALL_PLUGINDIR}/kcms)
-
-kpackage_install_package(package kcm_nightcolor kcms)
diff --git a/kcms/nightcolor/Messages.sh b/kcms/nightcolor/Messages.sh
deleted file mode 100644
index 0a8bafc78..000000000
--- a/kcms/nightcolor/Messages.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /usr/bin/env bash
-$XGETTEXT `find . -name "*.cpp" -o -name "*.qml"` -o $podir/kcm_nightcolor.pot
diff --git a/kcms/nightcolor/kcm.cpp b/kcms/nightcolor/kcm.cpp
deleted file mode 100644
index 8b518bc54..000000000
--- a/kcms/nightcolor/kcm.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-#include "kcm.h"
-
-#include <KAboutData>
-#include <KLocalizedString>
-#include <KPluginFactory>
-
-namespace ColorCorrect
-{
-K_PLUGIN_CLASS_WITH_JSON(KCMNightColor, "kcm_nightcolor.json")
-
-KCMNightColor::KCMNightColor(QObject *parent, const QVariantList &args)
-    : KQuickAddons::ConfigModule(parent, args)
-{
-    KAboutData *about = new KAboutData(QStringLiteral("kcm_nightcolor"), i18n("Night Color"), QStringLiteral("0.1"), QString(), KAboutLicense::LGPL);
-    about->addAuthor(i18n("Roman Gilg"), QString(), QStringLiteral("subdiff at gmail.com"));
-    setAboutData(about);
-    setButtons(Apply | Default);
-}
-
-void KCMNightColor::load()
-{
-    emit loadRelay();
-    setNeedsSave(false);
-}
-
-void KCMNightColor::defaults()
-{
-    emit defaultsRelay();
-}
-
-void KCMNightColor::save()
-{
-    emit saveRelay();
-}
-
-}
-
-#include "kcm.moc"
diff --git a/kcms/nightcolor/kcm.h b/kcms/nightcolor/kcm.h
deleted file mode 100644
index 81abfacbc..000000000
--- a/kcms/nightcolor/kcm.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-#ifndef _KCM_NIGHTCOLOR_H
-#define _KCM_NIGHTCOLOR_H
-
-#include <KQuickAddons/ConfigModule>
-
-namespace ColorCorrect
-{
-class KCMNightColor : public KQuickAddons::ConfigModule
-{
-    Q_OBJECT
-public:
-    KCMNightColor(QObject *parent, const QVariantList &args);
-    ~KCMNightColor() override
-    {
-    }
-
-public Q_SLOTS:
-    void load() override;
-    void save() override;
-    void defaults() override;
-
-Q_SIGNALS:
-    void loadRelay();
-    void saveRelay();
-    void defaultsRelay();
-};
-
-}
-
-#endif // _KCM_NIGHTCOLOR_H
diff --git a/kcms/nightcolor/kcm_nightcolor.desktop b/kcms/nightcolor/kcm_nightcolor.desktop
deleted file mode 100644
index 647c75a03..000000000
--- a/kcms/nightcolor/kcm_nightcolor.desktop
+++ /dev/null
@@ -1,147 +0,0 @@
-[Desktop Entry]
-Icon=preferences-desktop-display-nightcolor
-
-Type=Service
-X-KDE-ServiceTypes=KCModule
-
-X-DocPath=https://userbase.kde.org/TODOX
-
-X-KDE-Library=kcm_nightcolor
-X-KDE-ParentApp=kcontrol
-
-X-KDE-System-Settings-Parent-Category=display
-X-KDE-Weight=120
-
-Name=Night Color
-Name[ast]=Color nocherniegu
-Name[az]=Gecə Rəngi
-Name[ca]=Color de nit
-Name[ca at valencia]=Color de nit
-Name[cs]=Noční barva
-Name[da]=Natfarver
-Name[de]=Nachtfarben
-Name[el]=Χρώμα Νυκτός
-Name[en_GB]=Night Colour
-Name[es]=Color nocturno
-Name[et]=Öörežiim
-Name[eu]=Gaueko kolorea
-Name[fi]=Yöväri
-Name[fr]=Couleur de nuit
-Name[gl]=Cor de noite
-Name[hu]=Éjszakai színek
-Name[ia]=Color de Nocte
-Name[id]=Warna Malam
-Name[it]=Colore notturno
-Name[ja]=Night Color
-Name[ko]=야간 색상
-Name[lt]=Naktinė spalva
-Name[nl]=Nachtkleur
-Name[nn]=Nattfargar
-Name[pa]=ਰਾਤ ਦਾ ਰੰਗ
-Name[pl]=Barwy nocne
-Name[pt]=Cor Nocturna
-Name[pt_BR]=Cor noturna
-Name[ro]=Culoare nocturnă
-Name[ru]=Ночная цветовая схема
-Name[sk]=Nočná Farba
-Name[sl]=Nočne barve
-Name[sr]=Ноћна боја
-Name[sr at ijekavian]=Ноћна боја
-Name[sr at ijekavianlatin]=Noćna boja
-Name[sr at latin]=Noćna boja
-Name[sv]=Nattfärg
-Name[ta]=இரவு நிறமாற்றம்
-Name[tr]=Gece Rengi
-Name[uk]=Нічні кольори
-Name[vi]=Màu buổi tối
-Name[x-test]=xxNight Colorxx
-Name[zh_CN]=夜晚颜色
-Name[zh_TW]=夜色模式
-Comment=Adjust color temperature at night to reduce eye strain
-Comment[ast]=Axusta la temperatura del color pela nueche p'amenorgar el cansanciu de güeyos
-Comment[az]=Gözə mənfi təsirini azaltmaq üçün gecə rəng temperaturunu tənzimləmək
-Comment[ca]=Ajusta la temperatura del color per a la nit per reduir la tensió ocular
-Comment[ca at valencia]=Ajusta la temperatura del color per a la nit per reduir la tensió ocular
-Comment[cs]=Upravit barevnou teplotu v noci pro snížení námahy očí
-Comment[da]=Justér farvetemperatur om natten for at reducere belastning af øjnene
-Comment[de]=Farbtemperatur nachts anpassen, um die Belastung für die Augen zu reduzieen
-Comment[el]=Ρυθμίστε τη θερμοκρασία χρώματος τη νύχτα για να μειώσετε την πίεση των ματιών
-Comment[en_GB]=Adjust colour temperature at night to reduce eye strain
-Comment[es]=Ajustar la temperatura del color durante la noche para reducir la fatiga visual
-Comment[et]=Värvitemperatuuri kohandamine öösel silmade väsimuse vältimiseks
-Comment[eu]=Egokitu kolore tenperatura gauean begien nekea gutxitzeko
-Comment[fi]=Säädä värilämpötilaa yöllä silmien rasituksen vähentämiseksi
-Comment[fr]=Ajuster la température des couleurs durant la nuit pour réduire la fatigue des yeux
-Comment[gl]=Axustar a temperatura da cor pola noite para reducir o esgotamento dos ollos.
-Comment[hu]=A színhőmérséklet igazítása éjszaka a szem fáradásának csökkentésére
-Comment[ia]=Adapta temperatura de color a nocte per reducer stresse de oculo
-Comment[id]=Sesuaikan suhu warna saat malam hari untuk mengurangi ketegangan mata
-Comment[it]=Regola la temperatura dei colori nelle ore notturne per ridurre l'affaticamento degli occhi
-Comment[ja]=夜間に色温度を調整することで目の負担を軽減します
-Comment[ko]=눈의 피로를 줄이려고 야간에 색 온도 조절
-Comment[lt]=Reguliuoti naktį spalvos temperatūrą, kad būtų sumažinta akių įtampa
-Comment[nl]=Kleurtemperatuur bij nacht aanpassen on vermoeidheid van de ogen te vermijden
-Comment[nn]=Juster fargetemperaturen ved kveldstid for å gjera det mindre anstrengjande for auga
-Comment[pa]=ਰਾਤ ਦੇ ਸਮੇਂ ਅੱਖਾਂ ਉੱਤੇ ਦਬਾਅ ਘਟਾਉਣ ਲਈ ਰੰਗ ਦੇ ਤਾਪਮਾਨ ਨੂੰ ਤਰਤੀਬ ਦਿਓ
-Comment[pl]=Dostosuj temperaturę barwy w nocy, aby zmniejszyć wytężenie oka
-Comment[pt]=Ajustar a temperatura da cor à noite para reduzir o cansaço dos olhos
-Comment[pt_BR]=Ajustar a temperatura de cor a noite para reduzir a tensão visual
-Comment[ro]=Ajustează temperatura culorilor noaptea pentru a reduce încordarea ochilor
-Comment[ru]=Изменение цветовой температуры в ночное время для снижения нагрузки на глаза
-Comment[sk]=Prispôsobí teplotu farieb v noci na zníženie zaťaženia očí
-Comment[sl]=Prilagodite barvno temperaturo, da ponoči zmanjšate naprezanje oči
-Comment[sr]=Подесите температуру боје током ноћи ради мањег напрезања очију
-Comment[sr at ijekavian]=Подесите температуру боје током ноћи ради мањег напрезања очију
-Comment[sr at ijekavianlatin]=Podesite temperaturu boje tokom noći radi manjeg naprezanja očiju
-Comment[sr at latin]=Podesite temperaturu boje tokom noći radi manjeg naprezanja očiju
-Comment[sv]=Justera färgtemperatur på natten för att reducera ögonbelastning
-Comment[ta]=கண் சிரமத்தை குறைக்க இரவில் நிறங்களை மாற்று
-Comment[tr]=Geceleri gözünüzü yormaması için renk sıcaklığını ayarlayın
-Comment[uk]=Коригування температури кольорів для зменшення навантаження на очі вночі
-Comment[vi]=Điều chỉnh nhiệt độ màu vào buổi tối để giảm căng thẳng cho mắt
-Comment[x-test]=xxAdjust color temperature at night to reduce eye strainxx
-Comment[zh_CN]=在夜间调整色温以减少视觉疲劳
-Comment[zh_TW]=在夜間調整色溫以減輕眼睛的疲勞
-
-X-KDE-Keywords=kwin,window,manager,night,colors,redshift,eyes
-X-KDE-Keywords[az]=kwin,window,manager,night,colors,redshift,eyes,pəncərə,menecer,gecə,rənglər,göz,gözlər
-X-KDE-Keywords[ca]=kwin,finestra,gestor,nit,colors,desplaçament cap al roig,ulls
-X-KDE-Keywords[ca at valencia]=kwin,finestra,gestor,nit,colors,desplaçament cap al roig,ulls
-X-KDE-Keywords[cs]=kwin,okno,správce,noc,barvy,redshift,oči,modré světlo
-X-KDE-Keywords[da]=kwin,vindue,håndtering,nat,farver,redshift,øjne
-X-KDE-Keywords[de]=kwin,fenster,window,nacht,farben,redshift,augen
-X-KDE-Keywords[en_GB]=kwin,window,manager,night,colours,redshift,eyes
-X-KDE-Keywords[es]=kwin,ventana,gestor,noche,colores,corrimiento al rojo,ojos
-X-KDE-Keywords[et]=kwin,aken,haldur,öö,värvid,punanihe,silmad
-X-KDE-Keywords[eu]=kwin,leiho,kudeatzaile,gau,kolore,gorrirantz aldatu,begiak
-X-KDE-Keywords[fi]=kwin,ikkuna,hallinta,yö,värit,punasiirtymä,silmät
-X-KDE-Keywords[fr]=kwin, gestionnaire, fenêtres, couleurs, nuit, colors, redshift, yeux
-X-KDE-Keywords[gl]=kwin,window,xanela,manager,xestor,night,noite,colors,cores,redshift,eyes,ollos
-X-KDE-Keywords[hu]=kwin,ablak,kezelő,éjszaka,színek,redshift,szem
-X-KDE-Keywords[ia]=kwin,window,manager,night,colors,redshift,eyes
-X-KDE-Keywords[id]=kwin,window,pengelola,malam,warna,redshift,mata
-X-KDE-Keywords[it]=kwin,finestra,gestore,notte,colori,spostamento verso il rosso,occhi
-X-KDE-Keywords[ko]=kwin,window,manager,night,colors,redshift,eyes,창,관리자,밤,야간,색,눈,안구,블루라이트
-X-KDE-Keywords[lt]=kwin,langas,langų,langu,tvarkytuvė,tvarkytuve,naktinė,naktine,naktis,nakties,spalva,spalvos,redshift,akys,akių,akiu
-X-KDE-Keywords[nl]=kwin,venster,manager,nacht,kleuren,roodverschuiving,ogen
-X-KDE-Keywords[nn]=kwin,vindauge,handsamar,natt,fargar,redshift,raudskift,blåfargar,auge,auga,augo
-X-KDE-Keywords[pa]=ਕੇਵਿਨ,ਵਿੰਡੋ,ਮੈਨੇਜਰ,ਰਾਤ,ਰੰਗ,ਲਾਲ-ਸਿਫਟ,ਅੱਖਾਂ
-X-KDE-Keywords[pl]=kwin,okno,zarządzanie,noc,kolory,barwa,redshift,oczy
-X-KDE-Keywords[pt]=kwin,janela,gestor,noite,cores,desvio do vermelho,olhos
-X-KDE-Keywords[pt_BR]=kwin,janela,gerenciador,noite,noturno,cores,deslocamento de vermelho,olhos
-X-KDE-Keywords[ro]=kwin,fereastră,gestionar,manager,noapte,culori,ochi
-X-KDE-Keywords[ru]=kwin,window,manager,night,colors,redshift,eyes,ночь,цвет,глаза
-X-KDE-Keywords[sk]=kwin,okno,správca,noc,farby,červený posun,oči
-X-KDE-Keywords[sl]=kwin,upravljalnik oken,okno,noč,barve,rdeči premik,rdeči pomik,oči
-X-KDE-Keywords[sr]=kwin,window,manager,night,colors,redshift,eyes,К‑вин,прозор,менаџер,ноћ,ноћни,боја,црвени помак,очи
-X-KDE-Keywords[sr at ijekavian]=kwin,window,manager,night,colors,redshift,eyes,К‑вин,прозор,менаџер,ноћ,ноћни,боја,црвени помак,очи
-X-KDE-Keywords[sr at ijekavianlatin]=kwin,window,manager,night,colors,redshift,eyes,KWin,prozor,menadžer,noć,noćni,boja,crveni pomak,oči
-X-KDE-Keywords[sr at latin]=kwin,window,manager,night,colors,redshift,eyes,KWin,prozor,menadžer,noć,noćni,boja,crveni pomak,oči
-X-KDE-Keywords[sv]=kwin,fönster,hanterare,natt,färger,rödskift,ögon
-X-KDE-Keywords[tr]=kwin, pencere,yönetici,gece,renkler,redshift,gözler
-X-KDE-Keywords[uk]=kwin,window,manager,night,colors,redshift,eyes,вікно,керування,ніч,кольори,очі
-X-KDE-Keywords[vi]=kwin,window,manager,night,colors,redshift,eyes,cửa sổ,trình quản lí,buổi tối,màu,mắt
-X-KDE-Keywords[x-test]=xxkwinxx,xxwindowxx,xxmanagerxx,xxnightxx,xxcolorsxx,xxredshiftxx,xxeyesxx
-X-KDE-Keywords[zh_CN]=kwin,window,manager,night,colors,redshift,eyes,窗口,管理器,夜晚,夜间,黑夜,晚上,晚间,颜色,色彩,眼睛,视力
-X-KDE-Keywords[zh_TW]=kwin,window,manager,night,colors,redshift,eyes
-Categories=Qt;KDE;X-KDE-settings-nightcolor
diff --git a/kcms/nightcolor/package/contents/ui/LocationsFixedView.qml b/kcms/nightcolor/package/contents/ui/LocationsFixedView.qml
deleted file mode 100644
index 23046740c..000000000
--- a/kcms/nightcolor/package/contents/ui/LocationsFixedView.qml
+++ /dev/null
@@ -1,77 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-import QtQuick 2.1
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.5 as QQC2
-import org.kde.kirigami 2.5 as Kirigami
-
-Kirigami.FormLayout {
-    twinFormLayouts: parentLayout
-
-    Connections {
-        target: root
-        function onReset() {
-            reset()
-        }
-        function onDefaults() {
-            latitudeFixedField.backend = cA.latitudeFixedDefault;
-            longitudeFixedField.backend = cA.longitudeFixedDefault;
-        }
-    }
-
-    function reset() {
-        latitudeFixedField.backend = cA.latitudeFixed;
-        longitudeFixedField.backend = cA.longitudeFixed;
-    }
-
-    QQC2.Button {
-        text: i18n("Detect Location")
-        // Match combobox width
-        Layout.minimumWidth: modeSwitcher.width
-        icon.name: "find-location"
-        onClicked: {
-            latitudeFixedField.backend = locator.latitude;
-            longitudeFixedField.backend = locator.longitude;
-        }
-    }
-
-    NumberField {
-        id: latitudeFixedField
-        // Match combobox width
-        Layout.minimumWidth: modeSwitcher.width
-        Kirigami.FormData.label: i18n("Latitude:")
-        backend: cA.latitudeFixedStaged
-        validator: DoubleValidator {bottom: -90; top: 90; decimals: 10}
-        onBackendChanged: {
-            cA.latitudeFixedStaged = backend;
-            calcNeedsSave();
-        }
-    }
-
-    NumberField {
-        id: longitudeFixedField
-        // Match combobox width
-        Layout.minimumWidth: modeSwitcher.width
-        Kirigami.FormData.label: i18n("Longitude:")
-        backend: cA.longitudeFixedStaged
-        validator: DoubleValidator {bottom: -180; top: 180; decimals: 10}
-        onBackendChanged: {
-            cA.longitudeFixedStaged = backend;
-            calcNeedsSave();
-        }
-    }
-}
diff --git a/kcms/nightcolor/package/contents/ui/NumberField.qml b/kcms/nightcolor/package/contents/ui/NumberField.qml
deleted file mode 100644
index 220255546..000000000
--- a/kcms/nightcolor/package/contents/ui/NumberField.qml
+++ /dev/null
@@ -1,48 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-import QtQuick 2.1
-import QtQuick.Controls 2.5 as QQC2
-
-QQC2.TextField {
-    property double backend
-
-    maximumLength: 10
-    horizontalAlignment: TextInput.AlignHCenter
-
-    inputMethodHints: Qt.ImhFormattedNumbersOnly
-
-    text: backend
-
-    onBackendChanged: {
-        text = backend;
-    }
-
-    onTextChanged: {
-        var textFloat = parseFloat(text);
-        if (textFloat === undefined || isNaN(textFloat)) {
-            return;
-        }
-        backend = textFloat;
-    }
-
-    onFocusChanged: {
-        var textFloat = parseFloat(text);
-        if (!focus && (textFloat === undefined || isNaN(textFloat))) {
-            text = backend;
-        }
-    }
-}
diff --git a/kcms/nightcolor/package/contents/ui/TimeField.qml b/kcms/nightcolor/package/contents/ui/TimeField.qml
deleted file mode 100644
index 8c49325bf..000000000
--- a/kcms/nightcolor/package/contents/ui/TimeField.qml
+++ /dev/null
@@ -1,72 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-import QtQuick 2.1
-import QtQuick.Controls 2.5 as QQC2
-
-QQC2.TextField {
-    id: field
-
-    property date backend
-    horizontalAlignment: TextInput.AlignHCenter
-
-    onBackendChanged: readIn()
-
-    function getNormedDate() {
-        var nD = new Date();
-        nD.setHours(backend.getHours());
-        nD.setMinutes(backend.getMinutes());
-        return nD;
-    }
-
-    function readIn() {
-        if (!backend) {
-            return;
-        }
-
-        var hours = backend.getHours();
-        var minutes = backend.getMinutes();
-        if (hours < 10) {
-            hours = "0" + hours;
-        }
-        if (minutes < 10) {
-            minutes = "0" + minutes;
-        }
-
-        text = hours + ":" + minutes;
-    }
-
-    function submit() {
-        if (text.length != 5) {
-            return;
-        }
-        var hours = text.slice(0, 2);
-        var minutes = text.slice(3, 5);
-
-        var date = new Date();
-        date.setHours(hours, minutes, 0, 0);
-
-        backend = date;
-    }
-
-    onTextChanged: submit()
-    inputMask: "00:00"
-    selectByMouse: false
-    inputMethodHints: Qt.ImhPreferNumbers
-    validator: RegExpValidator { regExp: /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$/ }
-
-    onEditingFinished: submit()
-}
diff --git a/kcms/nightcolor/package/contents/ui/TimingsView.qml b/kcms/nightcolor/package/contents/ui/TimingsView.qml
deleted file mode 100644
index d2afa5a17..000000000
--- a/kcms/nightcolor/package/contents/ui/TimingsView.qml
+++ /dev/null
@@ -1,64 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-import QtQuick 2.1
-import org.kde.kirigami 2.5 as Kirigami
-import QtQuick.Controls 2.5 as QQC2
-
-Kirigami.FormLayout {
-    twinFormLayouts: parentLayout
-
-    property double latitude
-    property double longitude
-
-    property var morningTimings: sunCalc.getMorningTimings(latitude, longitude)
-    property var eveningTimings: sunCalc.getEveningTimings(latitude, longitude)
-
-    function reset() {
-        morningTimings = sunCalc.getMorningTimings(latitude, longitude);
-        eveningTimings = sunCalc.getEveningTimings(latitude, longitude);
-    }
-
-    function prettyTime(date) {
-        return date.toLocaleString(Qt.locale(), "h:mm");
-    }
-
-    Kirigami.Separator {
-        Kirigami.FormData.isSection: true
-    }
-
-    QQC2.Label {
-        wrapMode: Text.Wrap
-        text: i18n("Night Color begins at %1", prettyTime(eveningTimings.begin))
-    }
-    QQC2.Label {
-        wrapMode: Text.Wrap
-        text: i18n("Color fully changed at %1", prettyTime(eveningTimings.end))
-    }
-
-    Item {
-        Kirigami.FormData.isSection: true
-    }
-
-    QQC2.Label {
-        wrapMode: Text.Wrap
-        text: i18n("Night Color begins changing back at %1", prettyTime(morningTimings.begin))
-    }
-    QQC2.Label {
-        wrapMode: Text.Wrap
-        text: i18n("Normal coloration restored by %1", prettyTime(morningTimings.end))
-    }
-}
diff --git a/kcms/nightcolor/package/contents/ui/main.qml b/kcms/nightcolor/package/contents/ui/main.qml
deleted file mode 100644
index d7930168f..000000000
--- a/kcms/nightcolor/package/contents/ui/main.qml
+++ /dev/null
@@ -1,345 +0,0 @@
-/********************************************************************
-Copyright 2017 Roman Gilg <subdiff at gmail.com>
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*********************************************************************/
-import QtQuick 2.12
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.5 as QQC2
-
-import org.kde.kirigami 2.5 as Kirigami
-import org.kde.kcm 1.2 as KCM
-
-import org.kde.colorcorrect 0.1 as CC
-
-KCM.SimpleKCM {
-    id: root
-    property int error: cA.error
-    property bool defaultRequested: false
-    implicitHeight: Kirigami.Units.gridUnit * 29
-    implicitWidth: Kirigami.Units.gridUnit * 35
-
-    CC.CompositorAdaptor {
-        id: cA
-    }
-
-    CC.Geolocator {
-        id: locator
-    }
-
-    CC.SunCalc {
-        id: sunCalc
-    }
-
-    function calcNeedsSave() {
-        kcm.needsSave = cA.checkStaged();
-        // If the user changes something manually again after
-        // Default was triggered, only allow a normal
-        // configuration change again:
-        defaultRequested = false;
-
-        calcRepresentsDefault();
-    }
-    function calcRepresentsDefault() {
-        if (cA.nightColorAvailable) {
-            kcm.representsDefaults = activator.checked === cA.activeDefault &&
-                tempSlider.value === cA.nightTemperatureDefault &&
-                modeSwitcher.currentIndex === cA.modeDefault &&
-                cA.latitudeFixedStaged === cA.latitudeFixedDefault &&
-                cA.longitudeFixedStaged === cA.longitudeFixedDefault &&
-                cA.morningBeginFixedStaged.toString() === cA.morningBeginFixedDefault.toString() &&
-                cA.eveningBeginFixedStaged.toString() === cA.eveningBeginFixedDefault.toString() &&
-                cA.transitionTimeStaged === cA.transitionTimeDefault;
-        } else {
-            kcm.representsDefaults = true;
-        }
-    }
-
-    Connections {
-        target: kcm
-        function onLoadRelay() {
-            cA.reloadData()
-        }
-        function onSaveRelay() {
-            if (defaultRequested) {
-                cA.sendConfigurationAll()
-            } else {
-                cA.sendConfiguration();
-            }
-        }
-        function onDefaultsRelay() {
-            if (!cA.nightColorAvailable) {
-                return;
-            }
-            activator.checked = cA.activeDefault;
-            tempSlider.value = cA.nightTemperatureDefault;
-            modeSwitcher.currentIndex = cA.modeDefault;
-
-            // set everything else to default as well
-            defaults()
-
-            mornBeginManField.backend = cA.morningBeginFixedDefault;
-            evenBeginManField.backend = cA.eveningBeginFixedDefault;
-            transTimeField.value = cA.transitionTimeDefault;
-            cA.transitionTimeStaged = transTimeField.value;
-
-            kcm.needsSave = cA.checkStagedAll();
-            defaultRequested = true;
-
-            calcRepresentsDefault();
-        }
-    }
-    signal defaults()
-
-    Connections {
-        target: cA
-        function onDataUpdated() {
-            calcNeedsSave()
-        }
-        function onStagedDataReset() {
-            activator.checked = cA.active;
-            tempSlider.value = cA.nightTemperature;
-            modeSwitcher.currentIndex = cA.mode;
-            reset();
-            calcNeedsSave();
-        }
-    }
-    signal reset()
-
-    header: ColumnLayout{
-        Kirigami.InlineMessage {
-            id: errorMessage
-            Layout.fillWidth: true
-            visible: error != CC.CompositorAdaptor.ErrorCodeSuccess
-            type: Kirigami.MessageType.Error
-            text: cA.errorText
-        }
-    }
-
-    ColumnLayout {
-        spacing: 0
-
-        QQC2.Label {
-            Layout.topMargin: Kirigami.Units.largeSpacing * 2
-            Layout.bottomMargin: Kirigami.Units.largeSpacing * 4
-            Layout.leftMargin: Kirigami.Units.smallSpacing
-            Layout.rightMargin: Kirigami.Units.smallSpacing
-            Layout.alignment: Qt.AlignHCenter
-            Layout.maximumWidth: Math.round(root.width * 0.5)
-
-            text: i18n("Night Color makes the colors on the screen warmer to reduce eye strain at the time of your choosing.")
-            wrapMode: Text.WordWrap
-        }
-
-        Kirigami.FormLayout {
-            id: parentLayout
-
-            Connections {
-                target: root
-                function onReset() {
-                    mornBeginManField.backend = cA.morningBeginFixed;
-                    evenBeginManField.backend = cA.eveningBeginFixed;
-                    transTimeField.value = cA.transitionTime;
-                }
-            }
-
-            QQC2.CheckBox {
-                id: activator
-                text: i18n("Activate Night Color")
-                enabled: cA.nightColorAvailable
-                checked: cA.active
-
-                onToggled: {
-                    cA.activeStaged = checked;
-                    calcNeedsSave();
-                }
-            }
-
-            Item {
-                Kirigami.FormData.isSection: true
-            }
-
-            GridLayout {
-                Kirigami.FormData.label: i18n("Night Color Temperature:")
-                Kirigami.FormData.buddyFor: tempSlider
-                enabled: activator.checked
-
-                columns: 4
-
-                QQC2.Slider {
-                    id: tempSlider
-                    // Match combobox width
-                    Layout.minimumWidth: modeSwitcher.width
-                    enabled: activator.checked
-                    from: cA.minimalTemperature
-                    to: cA.neutralTemperature
-                    value: cA.nightTemperature
-                    stepSize: 100
-
-                    Layout.columnSpan: 3
-
-                    onValueChanged: {
-                        cA.nightTemperatureStaged = value;
-                        calcNeedsSave();
-                    }
-                }
-                QQC2.Label {
-                        text: tempSlider.value + i18n(" K")
-                }
-                //row 2
-                QQC2.Label {
-                    text: i18nc("Night colour red-ish", "Warm")
-                }
-                Item {
-                    Layout.fillWidth: true
-                }
-                QQC2.Label {
-                    text: i18nc("Night colour blue-ish", "Cool")
-                }
-                Item {}
-            }
-
-            Item {
-                Kirigami.FormData.isSection: true
-            }
-
-            QQC2.ComboBox {
-                id: modeSwitcher
-                // Work around https://bugs.kde.org/show_bug.cgi?id=403153
-                Layout.minimumWidth: Kirigami.Units.gridUnit * 17
-                Kirigami.FormData.label: i18n("Activation time:")
-                enabled: activator.checked
-                model: [
-                    i18n("Sunset to sunrise at current location"),
-                    i18n("Sunset to sunrise at manual location"),
-                    i18n("Custom time"),
-                    i18n("Always on")
-                ]
-                currentIndex: cA.mode
-                onCurrentIndexChanged: {
-                    cA.modeStaged = currentIndex;
-                    calcNeedsSave();
-                }
-            }
-
-            // Show current location in auto mode
-            QQC2.Label {
-                visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeAutomatic
-                enabled: activator.checked
-                wrapMode: Text.Wrap
-                text: i18n("Latitude: %1   Longitude: %2", Math.round(locator.latitude * 100)/100, Math.round(locator.longitude * 100)/100)
-            }
-
-            // Show time entry fields in manual timings mode
-            TimeField {
-                id: evenBeginManField
-                // Match combobox width
-                Layout.minimumWidth: modeSwitcher.width
-                visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeTimings
-                Kirigami.FormData.label: i18n("Turn on at:")
-                backend: cA.eveningBeginFixedStaged
-                onBackendChanged: {
-                    cA.eveningBeginFixedStaged = backend;
-                    calcNeedsSave();
-                }
-
-                QQC2.ToolTip {
-                    text: i18n("Input format: HH:MM")
-                }
-            }
-
-            TimeField {
-                id: mornBeginManField
-                // Match combobox width
-                Layout.minimumWidth: modeSwitcher.width
-                visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeTimings
-                Kirigami.FormData.label: i18n("Turn off at:")
-                backend: cA.morningBeginFixedStaged
-                onBackendChanged: {
-                    cA.morningBeginFixedStaged = backend;
-                    calcNeedsSave();
-                }
-
-                QQC2.ToolTip {
-                    text: i18n("Input format: HH:MM")
-                }
-            }
-
-            QQC2.SpinBox {
-                id: transTimeField
-                visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeTimings
-                // Match width of combobox and input fields
-                Layout.minimumWidth: modeSwitcher.width
-                Kirigami.FormData.label: i18n("Transition duration:")
-                from: 1
-                to: 600 // less than 12 hours (in minutes: 720)
-                value: cA.transitionTimeStaged
-                editable: true
-                onValueModified: {
-                    cA.transitionTimeStaged = value;
-                    calcNeedsSave();
-                }
-                textFromValue: function(value, locale) {
-                    return i18np("%1 minute", "%1 minutes", value)
-                }
-                valueFromText: function(text, locale) {
-                    return parseInt(text);
-                }
-
-                QQC2.ToolTip {
-                    text: i18n("Input minutes - min. 1, max. 600")
-                }
-            }
-
-            QQC2.Label {
-                id: manualTimingsError1
-                visible: evenBeginManField.getNormedDate() - mornBeginManField.getNormedDate() <= 0
-                font.italic: true
-                text: i18n("Error: Morning is before evening.")
-            }
-
-            QQC2.Label {
-                id: manualTimingsError2
-                visible: {
-                    if (manualTimingsError1.visible) {
-                        return false;
-                    }
-                    var trTime = transTimeField.backend * 60 * 1000;
-                    var mor = mornBeginManField.getNormedDate();
-                    var eve = evenBeginManField.getNormedDate();
-
-                    return eve - mor <= trTime || eve - mor >= 86400000 - trTime;
-                }
-                font.italic: true
-                text: i18n("Error: Transition time overlaps.")
-            }
-        }
-
-        // Show location chooser in manual location mode
-        LocationsFixedView {
-            visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeLocation
-            enabled: activator.checked
-        }
-
-        // Show start/end times in automatic and manual location modes
-        TimingsView {
-            id: timings
-            visible: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeAutomatic ||
-                     modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeLocation
-            enabled: activator.checked
-            latitude: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeAutomatic ? locator.latitude : cA.latitudeFixedStaged
-            longitude: modeSwitcher.currentIndex === CC.CompositorAdaptor.ModeAutomatic ? locator.longitude : cA.longitudeFixedStaged
-        }
-    }
-}
diff --git a/kcms/nightcolor/package/metadata.desktop b/kcms/nightcolor/package/metadata.desktop
deleted file mode 100644
index 063c99ae4..000000000
--- a/kcms/nightcolor/package/metadata.desktop
+++ /dev/null
@@ -1,106 +0,0 @@
-[Desktop Entry]
-Name=Night Color
-Name[ast]=Color nocherniegu
-Name[az]=Gecə Rəngi
-Name[ca]=Color de nit
-Name[ca at valencia]=Color de nit
-Name[cs]=Noční barva
-Name[da]=Natfarver
-Name[de]=Nachtfarben
-Name[el]=Χρώμα Νυκτός
-Name[en_GB]=Night Colour
-Name[es]=Color nocturno
-Name[et]=Öörežiim
-Name[eu]=Gaueko kolorea
-Name[fi]=Yöväri
-Name[fr]=Couleur de nuit
-Name[gl]=Cor de noite
-Name[hu]=Éjszakai színek
-Name[ia]=Color de Nocte
-Name[id]=Warna Malam
-Name[it]=Colore notturno
-Name[ja]=Night Color
-Name[ko]=야간 색상
-Name[lt]=Naktinė spalva
-Name[nl]=Nachtkleur
-Name[nn]=Nattfargar
-Name[pa]=ਰਾਤ ਦਾ ਰੰਗ
-Name[pl]=Barwy nocne
-Name[pt]=Cor Nocturna
-Name[pt_BR]=Cor noturna
-Name[ro]=Culoare nocturnă
-Name[ru]=Ночная цветовая схема
-Name[sk]=Nočná Farba
-Name[sl]=Nočne barve
-Name[sr]=Ноћна боја
-Name[sr at ijekavian]=Ноћна боја
-Name[sr at ijekavianlatin]=Noćna boja
-Name[sr at latin]=Noćna boja
-Name[sv]=Nattfärg
-Name[ta]=இரவு நிறமாற்றம்
-Name[tr]=Gece Rengi
-Name[uk]=Нічні кольори
-Name[vi]=Màu buổi tối
-Name[x-test]=xxNight Colorxx
-Name[zh_CN]=夜晚颜色
-Name[zh_TW]=夜色模式
-Comment=Adjust color temperature at night to reduce eye strain
-Comment[ast]=Axusta la temperatura del color pela nueche p'amenorgar el cansanciu de güeyos
-Comment[az]=Gözə mənfi təsirini azaltmaq üçün gecə rəng temperaturunu tənzimləmək
-Comment[ca]=Ajusta la temperatura del color per a la nit per reduir la tensió ocular
-Comment[ca at valencia]=Ajusta la temperatura del color per a la nit per reduir la tensió ocular
-Comment[cs]=Upravit barevnou teplotu v noci pro snížení námahy očí
-Comment[da]=Justér farvetemperatur om natten for at reducere belastning af øjnene
-Comment[de]=Farbtemperatur nachts anpassen, um die Belastung für die Augen zu reduzieen
-Comment[el]=Ρυθμίστε τη θερμοκρασία χρώματος τη νύχτα για να μειώσετε την πίεση των ματιών
-Comment[en_GB]=Adjust colour temperature at night to reduce eye strain
-Comment[es]=Ajustar la temperatura del color durante la noche para reducir la fatiga visual
-Comment[et]=Värvitemperatuuri kohandamine öösel silmade väsimuse vältimiseks
-Comment[eu]=Egokitu kolore tenperatura gauean begien nekea gutxitzeko
-Comment[fi]=Säädä värilämpötilaa yöllä silmien rasituksen vähentämiseksi
-Comment[fr]=Ajuster la température des couleurs durant la nuit pour réduire la fatigue des yeux
-Comment[gl]=Axustar a temperatura da cor pola noite para reducir o esgotamento dos ollos.
-Comment[hu]=A színhőmérséklet igazítása éjszaka a szem fáradásának csökkentésére
-Comment[ia]=Adapta temperatura de color a nocte per reducer stresse de oculo
-Comment[id]=Sesuaikan suhu warna saat malam hari untuk mengurangi ketegangan mata
-Comment[it]=Regola la temperatura dei colori nelle ore notturne per ridurre l'affaticamento degli occhi
-Comment[ja]=夜間に色温度を調整することで目の負担を軽減します
-Comment[ko]=눈의 피로를 줄이려고 야간에 색 온도 조절
-Comment[lt]=Reguliuoti naktį spalvos temperatūrą, kad būtų sumažinta akių įtampa
-Comment[nl]=Kleurtemperatuur bij nacht aanpassen on vermoeidheid van de ogen te vermijden
-Comment[nn]=Juster fargetemperaturen ved kveldstid for å gjera det mindre anstrengjande for auga
-Comment[pa]=ਰਾਤ ਦੇ ਸਮੇਂ ਅੱਖਾਂ ਉੱਤੇ ਦਬਾਅ ਘਟਾਉਣ ਲਈ ਰੰਗ ਦੇ ਤਾਪਮਾਨ ਨੂੰ ਤਰਤੀਬ ਦਿਓ
-Comment[pl]=Dostosuj temperaturę barwy w nocy, aby zmniejszyć wytężenie oka
-Comment[pt]=Ajustar a temperatura da cor à noite para reduzir o cansaço dos olhos
-Comment[pt_BR]=Ajustar a temperatura de cor a noite para reduzir a tensão visual
-Comment[ro]=Ajustează temperatura culorilor noaptea pentru a reduce încordarea ochilor
-Comment[ru]=Изменение цветовой температуры в ночное время для снижения нагрузки на глаза
-Comment[sk]=Prispôsobí teplotu farieb v noci na zníženie zaťaženia očí
-Comment[sl]=Prilagodite barvno temperaturo, da ponoči zmanjšate naprezanje oči
-Comment[sr]=Подесите температуру боје током ноћи ради мањег напрезања очију
-Comment[sr at ijekavian]=Подесите температуру боје током ноћи ради мањег напрезања очију
-Comment[sr at ijekavianlatin]=Podesite temperaturu boje tokom noći radi manjeg naprezanja očiju
-Comment[sr at latin]=Podesite temperaturu boje tokom noći radi manjeg naprezanja očiju
-Comment[sv]=Justera färgtemperatur på natten för att reducera ögonbelastning
-Comment[ta]=கண் சிரமத்தை குறைக்க இரவில் நிறங்களை மாற்று
-Comment[tr]=Geceleri gözünüzü yormaması için renk sıcaklığını ayarlayın
-Comment[uk]=Коригування температури кольорів для зменшення навантаження на очі вночі
-Comment[vi]=Điều chỉnh nhiệt độ màu vào buổi tối để giảm căng thẳng cho mắt
-Comment[x-test]=xxAdjust color temperature at night to reduce eye strainxx
-Comment[zh_CN]=在夜间调整色温以减少视觉疲劳
-Comment[zh_TW]=在夜間調整色溫以減輕眼睛的疲勞
-
-Icon=preferences-desktop
-Keywords=
-Type=Service
-X-KDE-ParentApp=
-X-KDE-PluginInfo-Author=Roman Gilg
-X-KDE-PluginInfo-Email=subdiff at gmail.com
-X-KDE-PluginInfo-License=GPL
-X-KDE-PluginInfo-Name=kcm_nightcolor
-X-KDE-PluginInfo-Version=
-X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop
-X-KDE-ServiceTypes=Plasma/Generic
-X-Plasma-API=declarativeappletscript
-
-X-Plasma-MainScript=ui/main.qml
diff --git a/kcms/notifications/CMakeLists.txt b/kcms/notifications/CMakeLists.txt
deleted file mode 100644
index 7c53b93a8..000000000
--- a/kcms/notifications/CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-# KI18N Translation Domain for this library
-add_definitions(-DTRANSLATION_DOMAIN=\"kcm_notifications\")
-
-set(kcm_notifications_SRCS
-    kcm.cpp
-    sourcesmodel.cpp
-    filterproxymodel.cpp
-    notificationsdata.cpp
-)
-
-add_library(kcm_notifications MODULE ${kcm_notifications_SRCS})
-target_link_libraries(kcm_notifications
-    KF5::KCMUtils
-    KF5::CoreAddons
-    KF5::Declarative
-    KF5::GlobalAccel
-    KF5::GuiAddons
-    KF5::I18n
-    KF5::QuickAddons
-    KF5::NotifyConfig
-    KF5::Service
-    PW::LibNotificationManager
-)
-
-kcoreaddons_desktop_to_json(kcm_notifications "kcm_notifications.desktop")
-
-install(FILES kcm_notifications.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
-install(TARGETS kcm_notifications DESTINATION ${KDE_INSTALL_PLUGINDIR}/kcms)
-
-kpackage_install_package(package kcm_notifications kcms)
-
diff --git a/kcms/notifications/Messages.sh b/kcms/notifications/Messages.sh
deleted file mode 100644
index ee640ee85..000000000
--- a/kcms/notifications/Messages.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#! /usr/bin/env bash
-$XGETTEXT `find . -name "*.cpp" -o -name "*.qml"` -o $podir/kcm_notifications.pot
diff --git a/kcms/notifications/filterproxymodel.cpp b/kcms/notifications/filterproxymodel.cpp
deleted file mode 100644
index 8831154c6..000000000
--- a/kcms/notifications/filterproxymodel.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "filterproxymodel.h"
-
-#include "sourcesmodel.h"
-
-FilterProxyModel::FilterProxyModel(QObject *parent)
-    : QSortFilterProxyModel(parent)
-{
-    setRecursiveFilteringEnabled(true);
-}
-
-FilterProxyModel::~FilterProxyModel() = default;
-
-QString FilterProxyModel::query() const
-{
-    return m_query;
-}
-
-void FilterProxyModel::setQuery(const QString &query)
-{
-    if (m_query != query) {
-        m_query = query;
-        invalidateFilter();
-        emit queryChanged();
-    }
-}
-
-bool FilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
-{
-    if (m_query.isEmpty()) {
-        return true;
-    }
-
-    const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
-
-    const QString display = idx.data(Qt::DisplayRole).toString();
-    if (display.contains(m_query, Qt::CaseInsensitive)) {
-        return true;
-    }
-
-    return false;
-}
diff --git a/kcms/notifications/filterproxymodel.h b/kcms/notifications/filterproxymodel.h
deleted file mode 100644
index e4564942e..000000000
--- a/kcms/notifications/filterproxymodel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <QSortFilterProxyModel>
-
-class FilterProxyModel : public QSortFilterProxyModel
-{
-    Q_OBJECT
-
-    Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged)
-
-public:
-    FilterProxyModel(QObject *parent = nullptr);
-    ~FilterProxyModel() override;
-
-    QString query() const;
-    void setQuery(const QString &query);
-
-    bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
-
-Q_SIGNALS:
-    void queryChanged();
-
-private:
-    QString m_query;
-};
diff --git a/kcms/notifications/kcm.cpp b/kcms/notifications/kcm.cpp
deleted file mode 100644
index 60a0c3339..000000000
--- a/kcms/notifications/kcm.cpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright (C) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "kcm.h"
-
-#include <QAction>
-#include <QCommandLineParser>
-#include <QDialog>
-#include <QDialogButtonBox>
-#include <QPushButton>
-#include <QQuickItem>
-#include <QQuickRenderControl>
-#include <QQuickWindow>
-#include <QStandardPaths>
-#include <QVBoxLayout>
-#include <QWindow>
-
-#include <KAboutData>
-#include <KConfigGroup>
-#include <KGlobalAccel>
-#include <KLocalizedString>
-#include <KNotifyConfigWidget>
-#include <KPluginFactory>
-
-#include <algorithm>
-
-#include "filterproxymodel.h"
-#include "notificationsdata.h"
-#include "sourcesmodel.h"
-
-#include <notificationmanager/badgesettings.h>
-#include <notificationmanager/behaviorsettings.h>
-#include <notificationmanager/donotdisturbsettings.h>
-#include <notificationmanager/jobsettings.h>
-#include <notificationmanager/notificationsettings.h>
-
-K_PLUGIN_FACTORY_WITH_JSON(KCMNotificationsFactory, "kcm_notifications.json", registerPlugin<KCMNotifications>(); registerPlugin<NotificationsData>();)
-
-KCMNotifications::KCMNotifications(QObject *parent, const QVariantList &args)
-    : KQuickAddons::ManagedConfigModule(parent, args)
-    , m_sourcesModel(new SourcesModel(this))
-    , m_filteredModel(new FilterProxyModel(this))
-    , m_data(new NotificationsData(this))
-    , m_toggleDoNotDisturbAction(new QAction(this))
-{
-    const char uri[] = "org.kde.private.kcms.notifications";
-    qmlRegisterUncreatableType<SourcesModel>(uri, 1, 0, "SourcesModel", QStringLiteral("Cannot create instances of SourcesModel"));
-
-    qmlRegisterType<FilterProxyModel>();
-    qmlRegisterType<QKeySequence>();
-    qmlRegisterType<NotificationManager::DoNotDisturbSettings>();
-    qmlRegisterType<NotificationManager::NotificationSettings>();
-    qmlRegisterType<NotificationManager::JobSettings>();
-    qmlRegisterType<NotificationManager::BadgeSettings>();
-    qmlRegisterType<NotificationManager::BehaviorSettings>();
-    qmlProtectModule(uri, 1);
-
-    KAboutData *about = new KAboutData(QStringLiteral("kcm_notifications"), i18n("Notifications"), QStringLiteral("5.0"), QString(), KAboutLicense::GPL);
-    about->addAuthor(i18n("Kai Uwe Broulik"), QString(), QStringLiteral("kde at privat.broulik.de"));
-    setAboutData(about);
-
-    m_filteredModel->setSourceModel(m_sourcesModel);
-
-    // for KGlobalAccel...
-    // keep in sync with globalshortcuts.cpp in notification plasmoid!
-    m_toggleDoNotDisturbAction->setObjectName(QStringLiteral("toggle do not disturb"));
-    m_toggleDoNotDisturbAction->setProperty("componentName", QStringLiteral("plasmashell"));
-    m_toggleDoNotDisturbAction->setText(i18n("Toggle do not disturb"));
-    m_toggleDoNotDisturbAction->setIcon(QIcon::fromTheme(QStringLiteral("notifications-disabled")));
-
-    QStringList stringArgs;
-    stringArgs.reserve(args.count() + 1);
-    // need to add a fake argv[0] for QCommandLineParser
-    stringArgs.append(QStringLiteral("kcm_notifications"));
-    for (const QVariant &arg : args) {
-        stringArgs.append(arg.toString());
-    }
-
-    QCommandLineParser parser;
-
-    QCommandLineOption desktopEntryOption(QStringLiteral("desktop-entry"), QString(), QStringLiteral("desktop-entry"));
-    parser.addOption(desktopEntryOption);
-    QCommandLineOption notifyRcNameOption(QStringLiteral("notifyrc"), QString(), QStringLiteral("notifyrcname"));
-    parser.addOption(notifyRcNameOption);
-    QCommandLineOption eventIdOption(QStringLiteral("event-id"), QString(), QStringLiteral("event-id"));
-    parser.addOption(eventIdOption);
-
-    parser.parse(stringArgs);
-
-    setInitialDesktopEntry(parser.value(desktopEntryOption));
-    setInitialNotifyRcName(parser.value(notifyRcNameOption));
-    setInitialEventId(parser.value(eventIdOption));
-
-    connect(this, &KCMNotifications::toggleDoNotDisturbShortcutChanged, this, &KCMNotifications::settingsChanged);
-    connect(this, &KCMNotifications::defaultsIndicatorsVisibleChanged, this, &KCMNotifications::onDefaultsIndicatorsVisibleChanged);
-}
-
-KCMNotifications::~KCMNotifications()
-{
-}
-
-SourcesModel *KCMNotifications::sourcesModel() const
-{
-    return m_sourcesModel;
-}
-
-FilterProxyModel *KCMNotifications::filteredModel() const
-{
-    return m_filteredModel;
-}
-
-NotificationManager::DoNotDisturbSettings *KCMNotifications::dndSettings() const
-{
-    return m_data->dndSettings();
-}
-
-NotificationManager::NotificationSettings *KCMNotifications::notificationSettings() const
-{
-    return m_data->notificationSettings();
-}
-
-NotificationManager::JobSettings *KCMNotifications::jobSettings() const
-{
-    return m_data->jobSettings();
-}
-
-NotificationManager::BadgeSettings *KCMNotifications::badgeSettings() const
-{
-    return m_data->badgeSettings();
-}
-
-QKeySequence KCMNotifications::toggleDoNotDisturbShortcut() const
-{
-    return m_toggleDoNotDisturbShortcut;
-}
-
-void KCMNotifications::setToggleDoNotDisturbShortcut(const QKeySequence &shortcut)
-{
-    if (m_toggleDoNotDisturbShortcut == shortcut) {
-        return;
-    }
-
-    m_toggleDoNotDisturbShortcut = shortcut;
-    m_toggleDoNotDisturbShortcutDirty = true;
-    emit toggleDoNotDisturbShortcutChanged();
-}
-
-QString KCMNotifications::initialDesktopEntry() const
-{
-    return m_initialDesktopEntry;
-}
-
-void KCMNotifications::setInitialDesktopEntry(const QString &desktopEntry)
-{
-    if (m_initialDesktopEntry != desktopEntry) {
-        m_initialDesktopEntry = desktopEntry;
-        emit initialDesktopEntryChanged();
-    }
-}
-
-QString KCMNotifications::initialNotifyRcName() const
-{
-    return m_initialNotifyRcName;
-}
-
-void KCMNotifications::setInitialNotifyRcName(const QString &notifyRcName)
-{
-    if (m_initialNotifyRcName != notifyRcName) {
-        m_initialNotifyRcName = notifyRcName;
-        emit initialNotifyRcNameChanged();
-    }
-}
-
-QString KCMNotifications::initialEventId() const
-{
-    return m_initialEventId;
-}
-
-void KCMNotifications::setInitialEventId(const QString &eventId)
-{
-    if (m_initialEventId != eventId) {
-        m_initialEventId = eventId;
-        emit initialEventIdChanged();
-    }
-}
-
-void KCMNotifications::configureEvents(const QString &notifyRcName, const QString &eventId, QQuickItem *ctx)
-{
-    // We're not using KNotifyConfigWidget::configure here as we want to handle the
-    // saving ourself (so we Apply with all other KCM settings) but there's no way
-    // to access the config object :(
-    // We also need access to the QDialog so we can set the KCM as transient parent.
-
-    QDialog *dialog = new QDialog(nullptr);
-    dialog->setAttribute(Qt::WA_DeleteOnClose);
-    dialog->setWindowTitle(i18n("Configure Notifications"));
-
-    if (ctx && ctx->window()) {
-        dialog->winId(); // so it creates windowHandle
-        dialog->windowHandle()->setTransientParent(QQuickRenderControl::renderWindowFor(ctx->window()));
-        dialog->setModal(true);
-    }
-
-    KNotifyConfigWidget *w = new KNotifyConfigWidget(dialog);
-
-    QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog);
-    buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel);
-    buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false);
-
-    QVBoxLayout *layout = new QVBoxLayout;
-    layout->addWidget(w);
-    layout->addWidget(buttonBox);
-    dialog->setLayout(layout);
-
-    // TODO we should only save settings when clicking Apply in the main UI
-    connect(buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, w, &KNotifyConfigWidget::save);
-    connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, w, &KNotifyConfigWidget::save);
-    connect(w, &KNotifyConfigWidget::changed, buttonBox->button(QDialogButtonBox::Apply), &QPushButton::setEnabled);
-
-    connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
-    connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);
-
-    w->setApplication(notifyRcName);
-    w->selectEvent(eventId);
-
-    dialog->show();
-}
-
-NotificationManager::BehaviorSettings *KCMNotifications::behaviorSettings(const QModelIndex &index)
-{
-    if (!index.isValid()) {
-        return nullptr;
-    }
-    return m_data->behaviorSettings(index.row());
-}
-
-bool KCMNotifications::isDefaultsBehaviorSettings() const
-{
-    return m_data->isDefaultsBehaviorSettings();
-}
-
-void KCMNotifications::load()
-{
-    ManagedConfigModule::load();
-
-    bool firstLoad = m_firstLoad;
-    if (m_firstLoad) {
-        m_firstLoad = false;
-        m_sourcesModel->load();
-
-        for (int i = 0; i < m_sourcesModel->rowCount(); ++i) {
-            const QModelIndex index = m_sourcesModel->index(i, 0);
-            if (!index.isValid()) {
-                continue;
-            }
-
-            QString typeName;
-            QString groupName;
-            if (m_sourcesModel->data(index, SourcesModel::SourceTypeRole) == SourcesModel::ApplicationType) {
-                typeName = QStringLiteral("Applications");
-                groupName = m_sourcesModel->data(index, SourcesModel::DesktopEntryRole).toString();
-            } else {
-                typeName = QStringLiteral("Services");
-                groupName = m_sourcesModel->data(index, SourcesModel::NotifyRcNameRole).toString();
-            }
-            auto *toAdd = new NotificationManager::BehaviorSettings(typeName, groupName, this);
-            m_data->insertBehaviorSettings(index.row(), toAdd);
-            createConnections(toAdd, index);
-        }
-    }
-
-    m_data->loadBehaviorSettings();
-
-    const QKeySequence toggleDoNotDisturbShortcut =
-        KGlobalAccel::self()
-            ->globalShortcut(m_toggleDoNotDisturbAction->property("componentName").toString(), m_toggleDoNotDisturbAction->objectName())
-            .value(0);
-
-    if (m_toggleDoNotDisturbShortcut != toggleDoNotDisturbShortcut) {
-        m_toggleDoNotDisturbShortcut = toggleDoNotDisturbShortcut;
-        emit toggleDoNotDisturbShortcutChanged();
-    }
-
-    m_toggleDoNotDisturbShortcutDirty = false;
-    if (firstLoad) {
-        emit firstLoadDone();
-    }
-}
-
-void KCMNotifications::save()
-{
-    ManagedConfigModule::save();
-    m_data->saveBehaviorSettings();
-
-    if (m_toggleDoNotDisturbShortcutDirty) {
-        // KeySequenceItem will already have checked whether the shortcut is available
-        KGlobalAccel::self()->setShortcut(m_toggleDoNotDisturbAction, {m_toggleDoNotDisturbShortcut}, KGlobalAccel::NoAutoloading);
-    }
-}
-
-void KCMNotifications::defaults()
-{
-    ManagedConfigModule::defaults();
-    m_data->defaultsBehaviorSettings();
-
-    setToggleDoNotDisturbShortcut(QKeySequence());
-}
-
-void KCMNotifications::onDefaultsIndicatorsVisibleChanged()
-{
-    for (int i = 0; i < m_sourcesModel->rowCount(); ++i) {
-        const QModelIndex index = m_sourcesModel->index(i, 0);
-        updateModelIsDefaultStatus(index);
-    }
-}
-
-void KCMNotifications::updateModelIsDefaultStatus(const QModelIndex &index)
-{
-    if (index.isValid()) {
-        m_sourcesModel->setData(index, behaviorSettings(index)->isDefaults(), SourcesModel::IsDefaultRole);
-        emit isDefaultsBehaviorSettingsChanged();
-    }
-}
-
-bool KCMNotifications::isSaveNeeded() const
-{
-    return m_toggleDoNotDisturbShortcutDirty || m_data->isSaveNeededBehaviorSettings();
-}
-
-bool KCMNotifications::isDefaults() const
-{
-    return m_data->isDefaultsBehaviorSettings();
-}
-
-void KCMNotifications::createConnections(NotificationManager::BehaviorSettings *settings, const QModelIndex &index)
-{
-    connect(settings, &NotificationManager::BehaviorSettings::ShowPopupsChanged, this, &KCMNotifications::settingsChanged);
-    connect(settings, &NotificationManager::BehaviorSettings::ShowPopupsInDndModeChanged, this, &KCMNotifications::settingsChanged);
-    connect(settings, &NotificationManager::BehaviorSettings::ShowInHistoryChanged, this, &KCMNotifications::settingsChanged);
-    connect(settings, &NotificationManager::BehaviorSettings::ShowBadgesChanged, this, &KCMNotifications::settingsChanged);
-
-    connect(settings, &NotificationManager::BehaviorSettings::ShowPopupsChanged, this, [this, index] {
-        updateModelIsDefaultStatus(index);
-    });
-    connect(settings, &NotificationManager::BehaviorSettings::ShowPopupsInDndModeChanged, this, [this, index] {
-        updateModelIsDefaultStatus(index);
-    });
-    connect(settings, &NotificationManager::BehaviorSettings::ShowInHistoryChanged, this, [this, index] {
-        updateModelIsDefaultStatus(index);
-    });
-    connect(settings, &NotificationManager::BehaviorSettings::ShowBadgesChanged, this, [this, index] {
-        updateModelIsDefaultStatus(index);
-    });
-}
-
-#include "kcm.moc"
diff --git a/kcms/notifications/kcm.h b/kcms/notifications/kcm.h
deleted file mode 100644
index dc791012c..000000000
--- a/kcms/notifications/kcm.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <KQuickAddons/ManagedConfigModule>
-
-#include <QHash>
-#include <QKeySequence>
-
-class QAction;
-
-class SourcesModel;
-class FilterProxyModel;
-class NotificationsData;
-
-namespace NotificationManager
-{
-class DoNotDisturbSettings;
-class NotificationSettings;
-class JobSettings;
-class BadgeSettings;
-class BehaviorSettings;
-}
-
-class KCMNotifications : public KQuickAddons::ManagedConfigModule
-{
-    Q_OBJECT
-
-    Q_PROPERTY(SourcesModel *sourcesModel READ sourcesModel CONSTANT)
-    Q_PROPERTY(FilterProxyModel *filteredModel READ filteredModel CONSTANT)
-
-    Q_PROPERTY(NotificationManager::DoNotDisturbSettings *dndSettings READ dndSettings CONSTANT)
-    Q_PROPERTY(NotificationManager::NotificationSettings *notificationSettings READ notificationSettings CONSTANT)
-    Q_PROPERTY(NotificationManager::JobSettings *jobSettings READ jobSettings CONSTANT)
-    Q_PROPERTY(NotificationManager::BadgeSettings *badgeSettings READ badgeSettings CONSTANT)
-    Q_PROPERTY(bool isDefaultsBehaviorSettings READ isDefaultsBehaviorSettings NOTIFY isDefaultsBehaviorSettingsChanged)
-
-    Q_PROPERTY(
-        QKeySequence toggleDoNotDisturbShortcut READ toggleDoNotDisturbShortcut WRITE setToggleDoNotDisturbShortcut NOTIFY toggleDoNotDisturbShortcutChanged)
-
-    // So it can show the respective settings module right away
-    Q_PROPERTY(QString initialDesktopEntry READ initialDesktopEntry WRITE setInitialDesktopEntry NOTIFY initialDesktopEntryChanged)
-    Q_PROPERTY(QString initialNotifyRcName READ initialNotifyRcName WRITE setInitialNotifyRcName NOTIFY initialNotifyRcNameChanged)
-    Q_PROPERTY(QString initialEventId READ initialEventId WRITE setInitialEventId NOTIFY initialEventIdChanged)
-
-public:
-    KCMNotifications(QObject *parent, const QVariantList &args);
-    ~KCMNotifications() override;
-
-    SourcesModel *sourcesModel() const;
-    FilterProxyModel *filteredModel() const;
-
-    NotificationManager::DoNotDisturbSettings *dndSettings() const;
-    NotificationManager::NotificationSettings *notificationSettings() const;
-    NotificationManager::JobSettings *jobSettings() const;
-    NotificationManager::BadgeSettings *badgeSettings() const;
-
-    QKeySequence toggleDoNotDisturbShortcut() const;
-    void setToggleDoNotDisturbShortcut(const QKeySequence &shortcut);
-    Q_SIGNAL void toggleDoNotDisturbShortcutChanged();
-
-    QString initialDesktopEntry() const;
-    void setInitialDesktopEntry(const QString &desktopEntry);
-
-    QString initialNotifyRcName() const;
-    void setInitialNotifyRcName(const QString &notifyRcName);
-
-    QString initialEventId() const;
-    void setInitialEventId(const QString &eventId);
-
-    Q_INVOKABLE void configureEvents(const QString &notifyRcName, const QString &eventId, QQuickItem *ctx = nullptr);
-
-    Q_INVOKABLE NotificationManager::BehaviorSettings *behaviorSettings(const QModelIndex &index);
-
-    bool isDefaultsBehaviorSettings() const;
-
-public Q_SLOTS:
-    void load() override;
-    void save() override;
-    void defaults() override;
-
-Q_SIGNALS:
-    void initialDesktopEntryChanged();
-    void initialNotifyRcNameChanged();
-    void initialEventIdChanged();
-    void firstLoadDone();
-    void isDefaultsBehaviorSettingsChanged();
-
-private Q_SLOTS:
-    void onDefaultsIndicatorsVisibleChanged();
-    void updateModelIsDefaultStatus(const QModelIndex &index);
-
-private:
-    bool isSaveNeeded() const override;
-    bool isDefaults() const override;
-    void createConnections(NotificationManager::BehaviorSettings *settings, const QModelIndex &index);
-
-    SourcesModel *m_sourcesModel;
-    FilterProxyModel *m_filteredModel;
-
-    NotificationsData *m_data;
-
-    QAction *m_toggleDoNotDisturbAction;
-    QKeySequence m_toggleDoNotDisturbShortcut;
-    bool m_toggleDoNotDisturbShortcutDirty = false;
-    bool m_firstLoad = true;
-
-    QString m_initialDesktopEntry;
-    QString m_initialNotifyRcName;
-    QString m_initialEventId;
-};
diff --git a/kcms/notifications/kcm_notifications.desktop b/kcms/notifications/kcm_notifications.desktop
deleted file mode 100644
index 3062b0063..000000000
--- a/kcms/notifications/kcm_notifications.desktop
+++ /dev/null
@@ -1,121 +0,0 @@
-[Desktop Entry]
-Icon=preferences-desktop-notification-bell
-Type=Service
-X-KDE-ServiceTypes=KCModule
-X-DocPath=kcontrol/notifications/index.html
-
-X-KDE-Library=kcm_notifications
-X-KDE-ParentApp=kcontrol
-
-X-KDE-System-Settings-Parent-Category=personalization
-X-KDE-Weight=40
-
-Name=Notifications
-Name[ar]=الإخطارات
-Name[ast]=Avisos
-Name[az]=Bildirilşlər
-Name[bs]=Obavještenja
-Name[ca]=Notificacions
-Name[ca at valencia]=Notificacions
-Name[cs]=Upozornění
-Name[da]=Bekendtgørelser
-Name[de]=Benachrichtigungen
-Name[el]=Ειδοποιήσεις
-Name[en_GB]=Notifications
-Name[es]=Notificaciones
-Name[et]=Märguanded
-Name[eu]=Jakinarazpenak
-Name[fi]=Ilmoitukset
-Name[fr]=Notifications
-Name[gl]=Notificacións
-Name[he]=התראות
-Name[hu]=Értesítések
-Name[ia]=Notificationes
-Name[id]=Notifikasi
-Name[is]=Tilkynningar
-Name[it]=Notifiche
-Name[ja]=通知
-Name[ko]=알림
-Name[lt]=Pranešimai
-Name[mr]=सूचना
-Name[nb]=Varslinger
-Name[nds]=Bescheden
-Name[nl]=Meldingen
-Name[nn]=Varslingar
-Name[pa]=ਨੋਟੀਫਿਕੇਸ਼ਨ
-Name[pl]=Powiadomienia
-Name[pt]=Notificações
-Name[pt_BR]=Notificações
-Name[ro]=Notificări
-Name[ru]=Уведомления
-Name[se]=Dieđáhusat
-Name[sk]=Upozornenia
-Name[sl]=Obvestila
-Name[sr]=Обавештења
-Name[sr at ijekavian]=Обавјештења
-Name[sr at ijekavianlatin]=Obavještenja
-Name[sr at latin]=Obaveštenja
-Name[sv]=Underrättelser
-Name[ta]=அறிவிப்புகள்
-Name[tg]=Огоҳиҳо
-Name[tr]=Bildirimler
-Name[uk]=Сповіщення
-Name[vi]=Thông báo
-Name[x-test]=xxNotificationsxx
-Name[zh_CN]=通知
-Name[zh_TW]=通知
-Comment=Event Notifications and Actions
-Comment[ar]=إخطارات الأحداث والإجراءات
-Comment[ast]=Avisos y aiciones d'eventos
-Comment[az]=Hadisə Bildirişləri və Fəaliyyətlər
-Comment[bs]=Obavještenja i akcije događaja
-Comment[ca]=Notificacions d'esdeveniments i accions
-Comment[ca at valencia]=Notificacions d'esdeveniments i accions
-Comment[cs]=Upozornění událostí a činností
-Comment[da]=Bekendtgørelser og handlinger ved hændelser
-Comment[de]=Ereignis-Benachrichtigungen und -Aktionen
-Comment[el]=Ειδοποιήσεις συμβάντων και ενέργειες
-Comment[en_GB]=Event Notifications and Actions
-Comment[es]=Notificaciones de eventos y acciones
-Comment[et]=Sündmuste märguanded ja toimingud
-Comment[eu]=Gertaera jakinarazpenak eta ekintzak
-Comment[fi]=Tapahtumailmoitukset ja toiminnot
-Comment[fr]=Notifications et actions après un évènement
-Comment[gl]=Notificacións e accións para eventos
-Comment[he]=הגדרות התראות אירועים ופעולות
-Comment[hu]=Eseményértesítések és műveletek
-Comment[ia]=Notificationes de evento e Actiones
-Comment[id]=Notifikasi dan Aksi Peristiwa
-Comment[is]=Birting tilkynninga og aðgerða
-Comment[it]=Notifiche degli eventi e azioni
-Comment[ja]=イベント通知とアクション
-Comment[ko]=이벤트 알림과 동작
-Comment[lt]=Įvykių pranešimai ir veiksmai
-Comment[mr]=घटना सूचना व क्रीया
-Comment[nb]=Varslinger og handlinger for hendelser
-Comment[nds]=Begeefnisbescheden un Akschonen
-Comment[nl]=Meldingen en acties van gebeurtenissen
-Comment[nn]=Varslingar og handlingar for hendingar
-Comment[pa]=ਈਵੈਂਟ ਨੋਟੀਫਿਕੇਸ਼ਨ ਅਤੇ ਕਾਰਵਾਈਆਂ
-Comment[pl]=Powiadomienia i działania zdarzeń
-Comment[pt]=Notificações de Eventos e Acções
-Comment[pt_BR]=Notificações e ações dos eventos
-Comment[ro]=Notificări și acțiuni pentru evenimente
-Comment[ru]=Уведомления и действия при событиях
-Comment[sk]=Oznámenia a akcie udalostí
-Comment[sl]=Obvestila in dejanja za dogodke
-Comment[sr]=Обавештења и радње догађаја
-Comment[sr at ijekavian]=Обавјештења и радње догађаја
-Comment[sr at ijekavianlatin]=Obavještenja i radnje događaja
-Comment[sr at latin]=Obaveštenja i radnje događaja
-Comment[sv]=Underrättelser om händelser och åtgärder
-Comment[tr]=Olay Bildirimleri ve Eylemler
-Comment[uk]=Сповіщення щодо подій та дії
-Comment[vi]=Thông báo và hành động cho sự kiện
-Comment[x-test]=xxEvent Notifications and Actionsxx
-Comment[zh_CN]=事件通知和动作
-Comment[zh_TW]=事件通知與動作
-
-X-KDE_Keywords=System sounds,Audio,Sound,Notify,Alerts,Notification,popups,disturb,do not disturb,quiet,concentrate,concentration
-
-Categories=Qt;KDE;X-KDE-settings-sound;
diff --git a/kcms/notifications/notificationsdata.cpp b/kcms/notifications/notificationsdata.cpp
deleted file mode 100644
index 600a3b0cf..000000000
--- a/kcms/notifications/notificationsdata.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2020 Cyril Rossi <cyril.rossi at enioka.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "notificationsdata.h"
-
-#include <notificationmanager/badgesettings.h>
-#include <notificationmanager/behaviorsettings.h>
-#include <notificationmanager/donotdisturbsettings.h>
-#include <notificationmanager/jobsettings.h>
-#include <notificationmanager/notificationsettings.h>
-
-NotificationsData::NotificationsData(QObject *parent, const QVariantList &args)
-    : KCModuleData(parent, args)
-    , m_dndSettings(new NotificationManager::DoNotDisturbSettings(this))
-    , m_notificationSettings(new NotificationManager::NotificationSettings(this))
-    , m_jobSettings(new NotificationManager::JobSettings(this))
-    , m_badgeSettings(new NotificationManager::BadgeSettings(this))
-{
-    autoRegisterSkeletons();
-    readBehaviorSettings();
-}
-
-NotificationManager::DoNotDisturbSettings *NotificationsData::dndSettings() const
-{
-    return m_dndSettings;
-}
-
-NotificationManager::NotificationSettings *NotificationsData::notificationSettings() const
-{
-    return m_notificationSettings;
-}
-
-NotificationManager::JobSettings *NotificationsData::jobSettings() const
-{
-    return m_jobSettings;
-}
-
-NotificationManager::BadgeSettings *NotificationsData::badgeSettings() const
-{
-    return m_badgeSettings;
-}
-
-NotificationManager::BehaviorSettings *NotificationsData::behaviorSettings(int index) const
-{
-    return m_behaviorSettingsList.value(index);
-}
-
-void NotificationsData::insertBehaviorSettings(int index, NotificationManager::BehaviorSettings *settings)
-{
-    m_behaviorSettingsList[index] = settings;
-}
-
-void NotificationsData::loadBehaviorSettings()
-{
-    for (auto *behaviorSettings : qAsConst(m_behaviorSettingsList)) {
-        behaviorSettings->load();
-    }
-}
-
-void NotificationsData::saveBehaviorSettings()
-{
-    for (auto *behaviorSettings : qAsConst(m_behaviorSettingsList)) {
-        behaviorSettings->save();
-    }
-}
-
-void NotificationsData::defaultsBehaviorSettings()
-{
-    for (auto *behaviorSettings : qAsConst(m_behaviorSettingsList)) {
-        behaviorSettings->setDefaults();
-    }
-}
-
-bool NotificationsData::isSaveNeededBehaviorSettings() const
-{
-    bool needSave = std::any_of(m_behaviorSettingsList.cbegin(), m_behaviorSettingsList.cend(), [](const NotificationManager::BehaviorSettings *settings) {
-        return settings->isSaveNeeded();
-    });
-    return needSave;
-}
-
-bool NotificationsData::isDefaultsBehaviorSettings() const
-{
-    bool notDefault = std::any_of(m_behaviorSettingsList.cbegin(), m_behaviorSettingsList.cend(), [](const NotificationManager::BehaviorSettings *settings) {
-        return !settings->isDefaults();
-    });
-    return !notDefault;
-}
-
-void NotificationsData::readBehaviorSettings()
-{
-    KConfig config("plasmanotifyrc", KConfig::SimpleConfig);
-
-    for (auto groupEntry : {QStringLiteral("Applications"), QStringLiteral("Services")}) {
-        KConfigGroup group(&config, groupEntry);
-        for (const QString &desktopEntry : group.groupList()) {
-            m_behaviorSettingsList.insert(m_behaviorSettingsList.count(), new NotificationManager::BehaviorSettings(groupEntry, desktopEntry, this));
-        }
-    }
-}
-
-bool NotificationsData::isDefaults() const
-{
-    return KCModuleData::isDefaults() && isDefaultsBehaviorSettings();
-}
diff --git a/kcms/notifications/notificationsdata.h b/kcms/notifications/notificationsdata.h
deleted file mode 100644
index b07851627..000000000
--- a/kcms/notifications/notificationsdata.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2020 Cyril Rossi <cyril.rossi at enioka.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef NOTIFICATIONSDATA_H
-#define NOTIFICATIONSDATA_H
-
-#include <QObject>
-
-#include <KCModuleData>
-
-namespace NotificationManager
-{
-class DoNotDisturbSettings;
-class NotificationSettings;
-class JobSettings;
-class BadgeSettings;
-class BehaviorSettings;
-}
-
-class NotificationsData : public KCModuleData
-{
-    Q_OBJECT
-
-public:
-    explicit NotificationsData(QObject *parent = nullptr, const QVariantList &args = QVariantList());
-
-    bool isDefaults() const override;
-
-    NotificationManager::DoNotDisturbSettings *dndSettings() const;
-    NotificationManager::NotificationSettings *notificationSettings() const;
-    NotificationManager::JobSettings *jobSettings() const;
-    NotificationManager::BadgeSettings *badgeSettings() const;
-
-    NotificationManager::BehaviorSettings *behaviorSettings(int index) const;
-    void insertBehaviorSettings(int index, NotificationManager::BehaviorSettings *settings);
-    void loadBehaviorSettings();
-    void saveBehaviorSettings();
-    void defaultsBehaviorSettings();
-    bool isSaveNeededBehaviorSettings() const;
-    bool isDefaultsBehaviorSettings() const;
-
-private:
-    void readBehaviorSettings();
-
-    NotificationManager::DoNotDisturbSettings *m_dndSettings;
-    NotificationManager::NotificationSettings *m_notificationSettings;
-    NotificationManager::JobSettings *m_jobSettings;
-    NotificationManager::BadgeSettings *m_badgeSettings;
-    QHash<int, NotificationManager::BehaviorSettings *> m_behaviorSettingsList;
-};
-
-#endif // NOTIFICATIONSDATA_H
diff --git a/kcms/notifications/package/contents/ui/ApplicationConfiguration.qml b/kcms/notifications/package/contents/ui/ApplicationConfiguration.qml
deleted file mode 100644
index 780a92cf7..000000000
--- a/kcms/notifications/package/contents/ui/ApplicationConfiguration.qml
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.9
-import QtQml.Models 2.2
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.3 as QtControls
-
-import org.kde.kirigami 2.7 as Kirigami
-import org.kde.kcm 1.3 as KCM
-
-import org.kde.notificationmanager 1.0 as NotificationManager
-
-import org.kde.private.kcms.notifications 1.0 as Private
-
-ColumnLayout {
-    id: configColumn
-
-    property var rootIndex
-    property var behaviorSettings: rootIndex ? kcm.behaviorSettings(rootIndex) : null
-
-    readonly property string otherAppsId: "@other"
-
-    readonly property string appDisplayName: rootIndex ? kcm.sourcesModel.data(rootIndex, Qt.DisplayRole) || "" : ""
-    readonly property string appIconName: rootIndex ? kcm.sourcesModel.data(rootIndex, Qt.DecorationRole) || "" : ""
-    readonly property string desktopEntry: rootIndex ? kcm.sourcesModel.data(rootIndex, Private.SourcesModel.DesktopEntryRole) || "" : ""
-    readonly property string notifyRcName: rootIndex ? kcm.sourcesModel.data(rootIndex, Private.SourcesModel.NotifyRcNameRole) || "" : ""
-
-    readonly property bool isOtherApp: configColumn.desktopEntry === configColumn.otherAppsId
-
-    function configureEvents(eventId) {
-        kcm.configureEvents(configColumn.notifyRcName, eventId, this)
-    }
-
-    spacing: Kirigami.Units.smallSpacing
-
-    Kirigami.FormLayout {
-        id: form
-
-        RowLayout {
-            Kirigami.FormData.isSection: true
-            spacing: Kirigami.Units.smallSpacing
-
-            Kirigami.Icon {
-                Layout.preferredWidth: Kirigami.Units.iconSizes.smallMedium
-                Layout.preferredHeight: Kirigami.Units.iconSizes.smallMedium
-                source: configColumn.appIconName
-            }
-
-            Kirigami.Heading {
-                level: 2
-                text: configColumn.appDisplayName
-                elide: Text.ElideRight
-                textFormat: Text.PlainText
-            }
-        }
-
-        QtControls.CheckBox {
-            id: showPopupsCheck
-            text: i18n("Show popups")
-            checked: !!behaviorSettings && behaviorSettings.showPopups
-            onClicked: behaviorSettings.showPopups = checked
-
-            KCM.SettingStateBinding {
-                configObject: behaviorSettings
-                settingName: "ShowPopups"
-            }
-        }
-
-        RowLayout { // just for indentation
-            QtControls.CheckBox {
-                Layout.leftMargin: mirrored ? 0 : indicator.width
-                Layout.rightMargin: mirrored ? indicator.width : 0
-                text: i18n("Show in do not disturb mode")
-                checked: !!behaviorSettings && behaviorSettings.showPopupsInDndMode
-                onClicked: behaviorSettings.showPopupsInDndMode = checked
-
-                KCM.SettingStateBinding {
-                    configObject: behaviorSettings
-                    settingName: "ShowPopupsInDndMode"
-                    extraEnabledConditions: showPopupsCheck.checked
-                }
-            }
-        }
-
-        QtControls.CheckBox {
-            text: i18n("Show in history")
-            checked: !!behaviorSettings && behaviorSettings.showInHistory
-            onClicked: behaviorSettings.showInHistory = checked
-
-            KCM.SettingStateBinding {
-                configObject: behaviorSettings
-                settingName: "ShowInHistory"
-            }
-        }
-
-        QtControls.CheckBox {
-            text: i18n("Show notification badges")
-            checked: !!behaviorSettings && behaviorSettings.showBadges
-            onClicked: behaviorSettings.showBadges = checked
-
-            KCM.SettingStateBinding {
-                configObject: behaviorSettings
-                settingName: "ShowBadges"
-                extraEnabledConditions: !!configColumn.desktopEntry && configColumn.desktopEntry !== configColumn.otherAppsId
-            }
-        }
-
-        Kirigami.Separator {
-            Kirigami.FormData.isSection: true
-            visible: configureEventsButton.visible || noEventsLabel.visible
-        }
-
-        QtControls.Button {
-            id: configureEventsButton
-            text: i18n("Configure Events...")
-            icon.name: "preferences-desktop-notification"
-            visible: !!configColumn.notifyRcName
-            onClicked: configColumn.configureEvents()
-        }
-    }
-
-    QtControls.Label {
-        id: noEventsLabel
-        Layout.alignment: Qt.AlignHCenter
-        Layout.preferredWidth: form.implicitWidth
-        text: i18n("This application does not support configuring notifications on a per-event basis.");
-        wrapMode: Text.WordWrap
-        visible: !configColumn.notifyRcName && !configColumn.isOtherApp
-    }
-
-    // compact layout
-    Item {
-        Layout.fillHeight: true
-    }
-}
diff --git a/kcms/notifications/package/contents/ui/PopupPositionPage.qml b/kcms/notifications/package/contents/ui/PopupPositionPage.qml
deleted file mode 100644
index 86cae41b5..000000000
--- a/kcms/notifications/package/contents/ui/PopupPositionPage.qml
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.9
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.3 as QtControls
-import org.kde.kirigami 2.7 as Kirigami
-
-Kirigami.Page {
-    id: positionPage
-
-    title: i18n("Popup Position")
-
-    ScreenPositionSelector {
-        anchors.horizontalCenter: parent.horizontalCenter
-        selectedPosition: kcm.notificationSettings.popupPosition
-        onSelectedPositionChanged: kcm.notificationSettings.popupPosition = selectedPosition
-    }
-}
diff --git a/kcms/notifications/package/contents/ui/ScreenPositionSelector.qml b/kcms/notifications/package/contents/ui/ScreenPositionSelector.qml
deleted file mode 100644
index 164c57eed..000000000
--- a/kcms/notifications/package/contents/ui/ScreenPositionSelector.qml
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright 2015 (C) Martin Klapetek <mklapetek at kde.org>
- * Copyright 2019 (C) Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in  14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>
- */
-
-import QtQuick 2.0
-import QtQuick.Window 2.1
-import QtQuick.Controls 2.2 as QtControls
-import org.kde.kirigami 2.4 as Kirigami
-import org.kde.plasma.core 2.0 as PlasmaCore
-
-import org.kde.notificationmanager 1.0 as NotificationManager
-
-Item {
-    id: monitorPanel
-
-    property int baseUnit: Kirigami.Units.gridUnit
-
-    implicitWidth: baseUnit * 13 + baseUnit * 2
-    implicitHeight: (screenRatio * baseUnit * 13) + (baseUnit * 2) + basePart.height
-
-    property int selectedPosition
-    property var disabledPositions: []
-    property real screenRatio: Screen.height / Screen.width
-
-    onSelectedPositionChanged: {
-        var buttons = positionRadios.buttons.length;
-        for (var i = 0; i < buttons.length; ++i) {
-            var button = buttons[i];
-            if (button.position === selectedPosition) {
-                button.checked = true;
-                break;
-            }
-        }
-    }
-
-    PlasmaCore.Svg {
-        id: monitorSvg
-        imagePath: "widgets/monitor"
-    }
-
-    PlasmaCore.SvgItem {
-        id: topleftPart
-        anchors {
-            left: parent.left
-            top: parent.top
-        }
-        svg: monitorSvg
-        elementId: "topleft"
-        width: baseUnit
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: topPart
-        anchors {
-            top: parent.top
-            left: topleftPart.right
-            right: toprightPart.left
-        }
-        svg: monitorSvg
-        elementId: "top"
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: toprightPart
-        anchors {
-            right: parent.right
-            top: parent.top
-        }
-        svg: monitorSvg
-        elementId: "topright"
-        width: baseUnit
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: leftPart
-        anchors {
-            left: parent.left
-            top: topleftPart.bottom
-            bottom: bottomleftPart.top
-        }
-        svg: monitorSvg
-        elementId: "left"
-        width: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: rightPart
-        anchors {
-            right: parent.right
-            top: toprightPart.bottom
-            bottom: bottomrightPart.top
-        }
-        svg: monitorSvg
-        elementId: "right"
-        width: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: bottomleftPart
-        anchors {
-            left: parent.left
-            bottom: basePart.top
-        }
-        svg: monitorSvg
-        elementId: "bottomleft"
-        width: baseUnit
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: bottomPart
-        anchors {
-            bottom: basePart.top
-            left: bottomleftPart.right
-            right: bottomrightPart.left
-        }
-        svg: monitorSvg
-        elementId: "bottom"
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: bottomrightPart
-        anchors {
-            right: parent.right
-            bottom: basePart.top
-        }
-        svg: monitorSvg
-        elementId: "bottomright"
-        width: baseUnit
-        height: baseUnit
-    }
-
-    PlasmaCore.SvgItem {
-        id: basePart
-        anchors {
-            bottom: parent.bottom
-            horizontalCenter: parent.horizontalCenter
-        }
-        width: 120
-        height: 60
-        svg: monitorSvg
-        elementId: "base"
-    }
-
-    QtControls.ButtonGroup {
-        id: positionRadios
-        onCheckedButtonChanged: monitorPanel.selectedPosition = checkedButton.position
-    }
-
-    // TODO increase hit area for radio buttons
-
-    QtControls.RadioButton {
-        anchors {
-            top: topPart.bottom
-            left: leftPart.right
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.TopLeft
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-    QtControls.RadioButton {
-        anchors {
-            top: topPart.bottom
-            horizontalCenter: topPart.horizontalCenter
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.TopCenter
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-    QtControls.RadioButton {
-        anchors {
-            top: topPart.bottom
-            right: rightPart.left
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.TopRight
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-    QtControls.RadioButton {
-        anchors {
-            bottom: bottomPart.top
-            left: leftPart.right
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.BottomLeft
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-    QtControls.RadioButton {
-        anchors {
-            bottom: bottomPart.top
-            horizontalCenter: bottomPart.horizontalCenter
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.BottomCenter
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-    QtControls.RadioButton {
-        anchors {
-            bottom: bottomPart.top
-            right: rightPart.left
-            margins: Kirigami.Units.smallSpacing
-        }
-        readonly property int position: NotificationManager.Settings.BottomRight
-        checked: monitorPanel.selectedPosition == position
-        visible: monitorPanel.disabledPositions.indexOf(position) == -1
-        QtControls.ButtonGroup.group: positionRadios
-    }
-}
diff --git a/kcms/notifications/package/contents/ui/SourcesPage.qml b/kcms/notifications/package/contents/ui/SourcesPage.qml
deleted file mode 100644
index 3600cb7e0..000000000
--- a/kcms/notifications/package/contents/ui/SourcesPage.qml
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.9
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.3 as QtControls
-import QtQml 2.15
-
-import org.kde.kirigami 2.12 as Kirigami
-import org.kde.kcm 1.2 as KCM
-
-import org.kde.private.kcms.notifications 1.0 as Private
-
-Kirigami.Page {
-    id: sourcesPage
-    title: i18n("Application Settings")
-
-    Component.onCompleted: {
-        var idx = kcm.sourcesModel.persistentIndexForDesktopEntry(kcm.initialDesktopEntry);
-        if (!idx.valid) {
-            idx = kcm.sourcesModel.persistentIndexForNotifyRcName(kcm.initialNotifyRcName);
-        }
-        appConfiguration.rootIndex = idx;
-
-        // In Component.onCompleted we might not be assigned a window yet
-        // which we need to make the events config dialog transient to it
-        Qt.callLater(function() {
-            if (kcm.initialEventId && kcm.initialNotifyRcName) {
-                appConfiguration.configureEvents(kcm.initialEventId);
-            }
-
-            kcm.initialDesktopEntry = "";
-            kcm.initialNotifyRcName = "";
-            kcm.initialEventId = "";
-        });
-    }
-
-    Binding {
-        target: kcm.filteredModel
-        property: "query"
-        value: searchField.text
-        restoreMode: Binding.RestoreBinding
-    }
-
-    RowLayout {
-        id: rootRow
-        anchors.fill: parent
-
-        ColumnLayout {
-            Layout.minimumWidth: Kirigami.Units.gridUnit * 12
-            Layout.preferredWidth: Math.round(rootRow.width / 3)
-
-            Kirigami.SearchField {
-                id: searchField
-                Layout.fillWidth: true
-            }
-
-            QtControls.ScrollView {
-                id: sourcesScroll
-                Layout.fillWidth: true
-                Layout.fillHeight: true
-                Kirigami.Theme.colorSet: Kirigami.Theme.View
-                Kirigami.Theme.inherit: false
-
-                Component.onCompleted: background.visible = true
-
-                ListView {
-                    id: sourcesList
-                    clip: true
-                    focus: true
-                    activeFocusOnTab: true
-
-                    keyNavigationEnabled: true
-                    keyNavigationWraps: true
-                    highlightMoveDuration: 0
-
-                    model: kcm.filteredModel
-                    currentIndex: -1
-
-                    section {
-                        criteria: ViewSection.FullString
-                        property: "sourceType"
-                        delegate: Kirigami.ListSectionHeader {
-                            id: sourceSection
-                            width: sourcesList.width
-                            label: {
-                                switch (Number(section)) {
-                                    case Private.SourcesModel.ApplicationType: return i18n("Applications");
-                                    case Private.SourcesModel.ServiceType: return i18n("System Services");
-                                }
-                            }
-                        }
-                    }
-
-                    onCurrentItemChanged: {
-                        var sourceIdx = kcm.filteredModel.mapToSource(kcm.filteredModel.index(sourcesList.currentIndex, 0));
-                        appConfiguration.rootIndex = kcm.sourcesModel.makePersistentModelIndex(sourceIdx);
-                    }
-
-                    delegate: Kirigami.BasicListItem {
-                        id: sourceDelegate
-                        width: sourcesList.width
-                        text: model.display
-                        icon: model.decoration
-                        highlighted: ListView.isCurrentItem
-                        onClicked: {
-                            sourcesList.forceActiveFocus();
-                            sourcesList.currentIndex = index;
-                        }
-                        Rectangle {
-                            id: defaultIndicator
-                            radius: width * 0.5
-                            implicitWidth: Kirigami.Units.largeSpacing
-                            implicitHeight: Kirigami.Units.largeSpacing
-                            visible: kcm.defaultsIndicatorsVisible
-                            opacity: !model.isDefault
-                            color: Kirigami.Theme.neutralTextColor
-                        }
-                    }
-
-                    Kirigami.PlaceholderMessage {
-                        anchors.centerIn: parent
-                        width: parent.width - (Kirigami.Units.largeSpacing * 4)
-
-                        visible: sourcesList.count === 0 && searchField.length > 0
-
-                        text: i18n("No application or event matches your search term.")
-                    }
-                }
-            }
-        }
-
-        Item {
-            Layout.fillWidth: true
-            Layout.fillHeight: true
-            Layout.preferredWidth: Math.round(rootRow.width / 3 * 2)
-
-            ApplicationConfiguration {
-                id: appConfiguration
-                anchors.fill: parent
-                visible: typeof appConfiguration.rootIndex !== "undefined" && appConfiguration.rootIndex.valid
-            }
-
-            Kirigami.PlaceholderMessage {
-                anchors.centerIn: parent
-                width: parent.width - (Kirigami.Units.largeSpacing * 4)
-                text: i18n("Select an application from the list to configure its notification settings and behavior.")
-                visible: !appConfiguration.rootIndex || !appConfiguration.rootIndex.valid
-            }
-        }
-    }
-}
diff --git a/kcms/notifications/package/contents/ui/main.qml b/kcms/notifications/package/contents/ui/main.qml
deleted file mode 100644
index 8ce2948c2..000000000
--- a/kcms/notifications/package/contents/ui/main.qml
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-import QtQuick 2.9
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.3 as QtControls
-import org.kde.kirigami 2.4 as Kirigami
-import org.kde.kquickcontrols 2.0 as KQuickControls
-import org.kde.kcm 1.5 as KCM
-
-import org.kde.notificationmanager 1.0 as NotificationManager
-
-KCM.SimpleKCM {
-    id: root
-    KCM.ConfigModule.quickHelp: i18n("This module lets you manage application and system notifications.")
-
-    // Sidebar on SourcesPage is 1/3 of the width at a minimum of 12, so assume 3 * 12 = 36 as preferred
-    implicitWidth: Kirigami.Units.gridUnit * 36
-
-    readonly property string ourServerVendor: "KDE"
-    readonly property string ourServerName: "Plasma"
-
-    readonly property NotificationManager.ServerInfo currentOwnerInfo: NotificationManager.Server.currentOwner
-
-    readonly property bool notificationsAvailable: currentOwnerInfo.status === NotificationManager.ServerInfo.Running
-        && currentOwnerInfo.vendor === ourServerVendor && currentOwnerInfo.name === ourServerName
-
-    function openSourcesSettings() {
-        // TODO would be nice to re-use the current SourcesPage instead of pushing a new one that lost all state
-        // but there's no pageAt(index) method in KConfigModuleQml
-        kcm.push("SourcesPage.qml");
-    }
-
-    Kirigami.FormLayout {
-        Kirigami.InlineMessage {
-            Kirigami.FormData.isSection: true
-            Layout.fillWidth: true
-            type: Kirigami.MessageType.Error
-            text: i18n("Could not find a 'Notifications' widget which is required for displaying notifications.");
-            visible: currentOwnerInfo.status === NotificationManager.ServerInfo.NotRunning
-        }
-
-        Kirigami.InlineMessage {
-            Kirigami.FormData.isSection: true
-            Layout.fillWidth: true
-            type: Kirigami.MessageType.Information
-            text: {
-                if (currentOwnerInfo.vendor && currentOwnerInfo.name) {
-                    return i18nc("Vendor and product name",
-                                 "Notifications are currently provided by '%1 %2' instead of Plasma.",
-                                 currentOwnerInfo.vendor, currentOwnerInfo.name);
-                }
-
-                return i18n("Notifications are currently not provided by Plasma.");
-            }
-            visible: root.currentOwnerInfo.status === NotificationManager.ServerInfo.Running
-                && (currentOwnerInfo.vendor !== root.ourServerVendor || currentOwnerInfo.name !== root.ourServerName)
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Do Not Disturb mode:")
-            text: i18nc("Do not disturb when screens are mirrored", "Enable when screens are mirrored")
-            checked: kcm.dndSettings.whenScreensMirrored
-            onClicked: kcm.dndSettings.whenScreensMirrored = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.dndSettings
-                settingName: "WhenScreensMirrored"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        QtControls.CheckBox {
-            text: i18nc("Do not disturb while screen sharing", "Enable while screen sharing")
-            checked: kcm.dndSettings.whenScreenSharing
-            onClicked: kcm.dndSettings.whenScreenSharing = checked
-            // Only applicable to Wayland where we can control who can cast the screen
-            visible: Qt.platform.pluginName.includes("wayland")
-
-            KCM.SettingStateBinding {
-                configObject: kcm.dndSettings
-                settingName: "WhenScreenSharing"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-
-        RowLayout {
-            enabled: root.notificationsAvailable
-
-            QtControls.Label {
-                text: i18nc("Turn do not disturb mode on/off with keyboard shortcut", "Toggle with:")
-            }
-
-            KQuickControls.KeySequenceItem {
-                keySequence: kcm.toggleDoNotDisturbShortcut
-                onKeySequenceChanged: kcm.toggleDoNotDisturbShortcut = keySequence
-            }
-        }
-
-        Kirigami.Separator {
-            Kirigami.FormData.isSection: true
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Critical notifications:")
-            text: i18n("Show in Do Not Disturb mode")
-            checked: kcm.notificationSettings.criticalInDndMode
-            onClicked: kcm.notificationSettings.criticalInDndMode = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.notificationSettings
-                settingName: "CriticalInDndMode"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Normal notifications:")
-            text: i18n("Show over full screen windows")
-            checked: kcm.notificationSettings.normalAlwaysOnTop
-            onClicked: kcm.notificationSettings.normalAlwaysOnTop = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.notificationSettings
-                settingName: "NormalAlwaysOnTop"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Low priority notifications:")
-            text: i18n("Show popup")
-            checked: kcm.notificationSettings.lowPriorityPopups
-            onClicked: kcm.notificationSettings.lowPriorityPopups = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.notificationSettings
-                settingName: "LowPriorityPopups"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        QtControls.CheckBox {
-            text: i18n("Show in history")
-            checked: kcm.notificationSettings.lowPriorityHistory
-            onClicked: kcm.notificationSettings.lowPriorityHistory = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.notificationSettings
-                settingName: "LowPriorityHistory"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        QtControls.ButtonGroup {
-            id: positionGroup
-            buttons: [positionCloseToWidget, positionCustomPosition]
-        }
-
-        Kirigami.Separator {
-            Kirigami.FormData.isSection: true
-        }
-
-        QtControls.RadioButton {
-            id: positionCloseToWidget
-            Kirigami.FormData.label: i18n("Popup:")
-            text: i18nc("Popup position near notification plasmoid", "Show near notification icon") // "widget"
-            checked: kcm.notificationSettings.popupPosition === NotificationManager.Settings.CloseToWidget
-                // Force binding re-evaluation when user returns from position selector
-                + kcm.currentIndex * 0
-            onClicked: kcm.notificationSettings.popupPosition = NotificationManager.Settings.CloseToWidget
-
-            KCM.SettingStateBinding {
-                configObject: kcm.notificationSettings
-                settingName: "PopupPosition"
-                extraEnabledConditions: root.notificationsAvailable
-            }
-        }
-
-        RowLayout {
-            spacing: 0
-            enabled: positionCloseToWidget.enabled
-
-            QtControls.RadioButton {
-                id: positionCustomPosition
-                checked: kcm.notificationSettings.popupPosition !== NotificationManager.Settings.CloseToWidget
-                    + kcm.currentIndex * 0
-                activeFocusOnTab: false
-
-                MouseArea {
-                    anchors.fill: parent
-                    onClicked: positionCustomButton.clicked()
-                }
-
-                KCM.SettingStateBinding {
-                    configObject: kcm.notificationSettings
-                    settingName: "PopupPosition"
-                    extraEnabledConditions: root.notificationsAvailable
-                }
-
-            }
-            QtControls.Button {
-                id: positionCustomButton
-                text: i18n("Choose Custom Position...")
-                icon.name: "preferences-desktop-display"
-                onClicked: kcm.push("PopupPositionPage.qml")
-            }
-        }
-
-        TextMetrics {
-            id: timeoutSpinnerMetrics
-            font: timeoutSpinner.font
-            text: i18np("%1 second", "%1 seconds", 888)
-        }
-
-        Item {
-            Kirigami.FormData.isSection: true
-        }
-
-        RowLayout {
-            QtControls.Label {
-                text: i18nc("Part of a sentence like, 'Hide popup after n seconds'", "Hide after:")
-            }
-
-            QtControls.SpinBox {
-                id: timeoutSpinner
-                Layout.preferredWidth: timeoutSpinnerMetrics.width + leftPadding + rightPadding
-                from: 1000 // 1 second
-                to: 120000 // 2 minutes
-                stepSize: 1000
-                value: kcm.notificationSettings.popupTimeout
-                editable: true
-                valueFromText: function(text, locale) {
-                    return parseInt(text) * 1000;
-                }
-                textFromValue: function(value, locale) {
-                    return i18np("%1 second", "%1 seconds", Math.round(value / 1000));
-                }
-                onValueModified: kcm.notificationSettings.popupTimeout = value
-
-                KCM.SettingStateBinding {
-                    configObject: kcm.notificationSettings
-                    settingName: "PopupTimeout"
-                    extraEnabledConditions: root.notificationsAvailable
-                }
-            }
-        }
-
-        Kirigami.Separator {
-            Kirigami.FormData.isSection: true
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Application progress:")
-            text: i18n("Show in task manager")
-            checked: kcm.jobSettings.inTaskManager
-            onClicked: kcm.jobSettings.inTaskManager = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.jobSettings
-                settingName: "InTaskManager"
-            }
-        }
-
-        QtControls.CheckBox {
-            id: applicationJobsEnabledCheck
-            text: i18nc("Show application jobs in notification widget", "Show in notifications")
-            checked: kcm.jobSettings.inNotifications
-            onClicked: kcm.jobSettings.inNotifications = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.jobSettings
-                settingName: "InNotifications"
-            }
-        }
-
-        RowLayout { // just for indentation
-            QtControls.CheckBox {
-                Layout.leftMargin: mirrored ? 0 : indicator.width
-                Layout.rightMargin: mirrored ? indicator.width : 0
-                text: i18nc("Keep application job popup open for entire duration of job", "Keep popup open during progress")
-                checked: kcm.jobSettings.permanentPopups
-                onClicked: kcm.jobSettings.permanentPopups = checked
-
-                KCM.SettingStateBinding {
-                    configObject: kcm.jobSettings
-                    settingName: "PermanentPopups"
-                    extraEnabledConditions: applicationJobsEnabledCheck.checked
-                }
-            }
-        }
-
-        Item {
-            Kirigami.FormData.isSection: true
-        }
-
-        QtControls.CheckBox {
-            Kirigami.FormData.label: i18n("Notification badges:")
-            text: i18n("Show in task manager")
-            checked: kcm.badgeSettings.inTaskManager
-            onClicked: kcm.badgeSettings.inTaskManager = checked
-
-            KCM.SettingStateBinding {
-                configObject: kcm.badgeSettings
-                settingName: "InTaskManager"
-            }
-        }
-
-        Kirigami.Separator {
-            Kirigami.FormData.isSection: true
-        }
-
-        QtControls.Button {
-            Kirigami.FormData.label: i18n("Applications:")
-            text: i18n("Configure...")
-            icon.name: "configure"
-            enabled: root.notificationsAvailable
-            onClicked: root.openSourcesSettings()
-
-            KCM.SettingHighlighter {
-                highlight: !kcm.isDefaultsBehaviorSettings
-            }
-        }
-
-        Connections {
-            target: kcm
-            function onFirstLoadDone() {
-                if (kcm.initialDesktopEntry || kcm.initialNotifyRcName) {
-                        root.openSourcesSettings();
-                }
-            }
-        }
-    }
-}
diff --git a/kcms/notifications/package/metadata.desktop b/kcms/notifications/package/metadata.desktop
deleted file mode 100644
index 82a962142..000000000
--- a/kcms/notifications/package/metadata.desktop
+++ /dev/null
@@ -1,119 +0,0 @@
-[Desktop Entry]
-Name=Notifications
-Name[ar]=الإخطارات
-Name[ast]=Avisos
-Name[az]=Bildirilşlər
-Name[bs]=Obavještenja
-Name[ca]=Notificacions
-Name[ca at valencia]=Notificacions
-Name[cs]=Upozornění
-Name[da]=Bekendtgørelser
-Name[de]=Benachrichtigungen
-Name[el]=Ειδοποιήσεις
-Name[en_GB]=Notifications
-Name[es]=Notificaciones
-Name[et]=Märguanded
-Name[eu]=Jakinarazpenak
-Name[fi]=Ilmoitukset
-Name[fr]=Notifications
-Name[gl]=Notificacións
-Name[he]=התראות
-Name[hu]=Értesítések
-Name[ia]=Notificationes
-Name[id]=Notifikasi
-Name[is]=Tilkynningar
-Name[it]=Notifiche
-Name[ja]=通知
-Name[ko]=알림
-Name[lt]=Pranešimai
-Name[mr]=सूचना
-Name[nb]=Varslinger
-Name[nds]=Bescheden
-Name[nl]=Meldingen
-Name[nn]=Varslingar
-Name[pa]=ਨੋਟੀਫਿਕੇਸ਼ਨ
-Name[pl]=Powiadomienia
-Name[pt]=Notificações
-Name[pt_BR]=Notificações
-Name[ro]=Notificări
-Name[ru]=Уведомления
-Name[se]=Dieđáhusat
-Name[sk]=Upozornenia
-Name[sl]=Obvestila
-Name[sr]=Обавештења
-Name[sr at ijekavian]=Обавјештења
-Name[sr at ijekavianlatin]=Obavještenja
-Name[sr at latin]=Obaveštenja
-Name[sv]=Underrättelser
-Name[ta]=அறிவிப்புகள்
-Name[tg]=Огоҳиҳо
-Name[tr]=Bildirimler
-Name[uk]=Сповіщення
-Name[vi]=Thông báo
-Name[x-test]=xxNotificationsxx
-Name[zh_CN]=通知
-Name[zh_TW]=通知
-Comment=Event Notifications and Actions
-Comment[ar]=إخطارات الأحداث والإجراءات
-Comment[ast]=Avisos y aiciones d'eventos
-Comment[az]=Hadisə Bildirişləri və Fəaliyyətlər
-Comment[bs]=Obavještenja i akcije događaja
-Comment[ca]=Notificacions d'esdeveniments i accions
-Comment[ca at valencia]=Notificacions d'esdeveniments i accions
-Comment[cs]=Upozornění událostí a činností
-Comment[da]=Bekendtgørelser og handlinger ved hændelser
-Comment[de]=Ereignis-Benachrichtigungen und -Aktionen
-Comment[el]=Ειδοποιήσεις συμβάντων και ενέργειες
-Comment[en_GB]=Event Notifications and Actions
-Comment[es]=Notificaciones de eventos y acciones
-Comment[et]=Sündmuste märguanded ja toimingud
-Comment[eu]=Gertaera jakinarazpenak eta ekintzak
-Comment[fi]=Tapahtumailmoitukset ja toiminnot
-Comment[fr]=Notifications et actions après un évènement
-Comment[gl]=Notificacións e accións para eventos
-Comment[he]=הגדרות התראות אירועים ופעולות
-Comment[hu]=Eseményértesítések és műveletek
-Comment[ia]=Notificationes de evento e Actiones
-Comment[id]=Notifikasi dan Aksi Peristiwa
-Comment[is]=Birting tilkynninga og aðgerða
-Comment[it]=Notifiche degli eventi e azioni
-Comment[ja]=イベント通知とアクション
-Comment[ko]=이벤트 알림과 동작
-Comment[lt]=Įvykių pranešimai ir veiksmai
-Comment[mr]=घटना सूचना व क्रीया
-Comment[nb]=Varslinger og handlinger for hendelser
-Comment[nds]=Begeefnisbescheden un Akschonen
-Comment[nl]=Meldingen en acties van gebeurtenissen
-Comment[nn]=Varslingar og handlingar for hendingar
-Comment[pa]=ਈਵੈਂਟ ਨੋਟੀਫਿਕੇਸ਼ਨ ਅਤੇ ਕਾਰਵਾਈਆਂ
-Comment[pl]=Powiadomienia i działania zdarzeń
-Comment[pt]=Notificações de Eventos e Acções
-Comment[pt_BR]=Notificações e ações dos eventos
-Comment[ro]=Notificări și acțiuni pentru evenimente
-Comment[ru]=Уведомления и действия при событиях
-Comment[sk]=Oznámenia a akcie udalostí
-Comment[sl]=Obvestila in dejanja za dogodke
-Comment[sr]=Обавештења и радње догађаја
-Comment[sr at ijekavian]=Обавјештења и радње догађаја
-Comment[sr at ijekavianlatin]=Obavještenja i radnje događaja
-Comment[sr at latin]=Obaveštenja i radnje događaja
-Comment[sv]=Underrättelser om händelser och åtgärder
-Comment[tr]=Olay Bildirimleri ve Eylemler
-Comment[uk]=Сповіщення щодо подій та дії
-Comment[vi]=Thông báo và hành động cho sự kiện
-Comment[x-test]=xxEvent Notifications and Actionsxx
-Comment[zh_CN]=事件通知和动作
-Comment[zh_TW]=事件通知與動作
-
-Icon=preferences-desktop-notification-bell
-Type=Service
-X-KDE-PluginInfo-Author=Kai Uwe Broulik
-X-KDE-PluginInfo-Email=kde at privat.broulik.de
-X-KDE-PluginInfo-License=GPL
-X-KDE-PluginInfo-Name=kcm_notifications
-X-KDE-PluginInfo-Version=
-X-KDE-PluginInfo-Website=
-X-KDE-ServiceTypes=Plasma/Generic
-X-Plasma-API=declarativeappletscript
-
-X-Plasma-MainScript=ui/main.qml
diff --git a/kcms/notifications/sourcesmodel.cpp b/kcms/notifications/sourcesmodel.cpp
deleted file mode 100644
index b57317d7f..000000000
--- a/kcms/notifications/sourcesmodel.cpp
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright (C) 2007 Matthew Woehlke <mw_triad at users.sourceforge.net>
- * Copyright (C) 2007 Jeremy Whiting <jpwhiting at kde.org>
- * Copyright (C) 2016 Olivier Churlaud <olivier at churlaud.com>
- * Copyright (C) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "sourcesmodel.h"
-
-#include <QCollator>
-#include <QDir>
-#include <QRegularExpression>
-#include <QStandardPaths>
-#include <QStringList>
-
-#include <KConfig>
-#include <KConfigGroup>
-#include <KLocalizedString>
-#include <KService>
-#include <KServiceTypeTrader>
-#include <KSharedConfig>
-
-#include <algorithm>
-
-static const QString s_plasmaWorkspaceNotifyRcName = QStringLiteral("plasma_workspace");
-
-SourcesModel::SourcesModel(QObject *parent)
-    : QAbstractItemModel(parent)
-{
-}
-
-SourcesModel::~SourcesModel() = default;
-
-QPersistentModelIndex SourcesModel::makePersistentModelIndex(const QModelIndex &idx) const
-{
-    return QPersistentModelIndex(idx);
-}
-
-QPersistentModelIndex SourcesModel::persistentIndexForDesktopEntry(const QString &desktopEntry) const
-{
-    if (desktopEntry.isEmpty()) {
-        return QPersistentModelIndex();
-    }
-    const auto matches = match(index(0, 0), SourcesModel::DesktopEntryRole, desktopEntry, 1, Qt::MatchFixedString);
-    if (matches.isEmpty()) {
-        return QPersistentModelIndex();
-    }
-    return QPersistentModelIndex(matches.first());
-}
-
-QPersistentModelIndex SourcesModel::persistentIndexForNotifyRcName(const QString &notifyRcName) const
-{
-    if (notifyRcName.isEmpty()) {
-        return QPersistentModelIndex();
-    }
-    const auto matches = match(index(0, 0), SourcesModel::NotifyRcNameRole, notifyRcName, 1, Qt::MatchFixedString);
-    if (matches.isEmpty()) {
-        return QPersistentModelIndex();
-    }
-    return QPersistentModelIndex(matches.first());
-}
-
-int SourcesModel::columnCount(const QModelIndex &parent) const
-{
-    Q_UNUSED(parent);
-    return 1;
-}
-
-int SourcesModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.column() > 0) {
-        return 0;
-    }
-
-    if (!parent.isValid()) {
-        return m_data.count();
-    }
-
-    if (parent.internalId()) {
-        return 0;
-    }
-
-    return m_data.at(parent.row()).events.count();
-}
-
-QVariant SourcesModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid()) {
-        return QVariant();
-    }
-
-    if (index.internalId()) { // event
-        const auto &event = m_data.at(index.internalId() - 1).events.at(index.row());
-
-        switch (role) {
-        case Qt::DisplayRole:
-            return event.name;
-        case Qt::DecorationRole:
-            return event.iconName;
-        case EventIdRole:
-            return event.eventId;
-        case ActionsRole:
-            return event.actions;
-        }
-
-        return QVariant();
-    }
-
-    const auto &source = m_data.at(index.row());
-
-    switch (role) {
-    case Qt::DisplayRole:
-        return source.display();
-    case Qt::DecorationRole:
-        return source.iconName;
-    case SourceTypeRole:
-        return source.desktopEntry.isEmpty() ? ServiceType : ApplicationType;
-    case NotifyRcNameRole:
-        return source.notifyRcName;
-    case DesktopEntryRole:
-        return source.desktopEntry;
-    case IsDefaultRole:
-        return source.isDefault;
-    }
-
-    return QVariant();
-}
-
-bool SourcesModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    if (!index.isValid()) {
-        return false;
-    }
-
-    bool dirty = false;
-
-    if (index.internalId()) { // event
-        auto &event = m_data[index.internalId() - 1].events[index.row()];
-        switch (role) {
-        case ActionsRole: {
-            const QStringList newActions = value.toStringList();
-            if (event.actions != newActions) {
-                event.actions = newActions;
-                dirty = true;
-            }
-            break;
-        }
-        }
-    }
-
-    auto &source = m_data[index.row()];
-
-    switch (role) {
-    case IsDefaultRole: {
-        if (source.isDefault != value.toBool()) {
-            source.isDefault = value.toBool();
-            dirty = true;
-        }
-        break;
-    }
-    }
-
-    if (dirty) {
-        emit dataChanged(index, index, {role});
-    }
-
-    return dirty;
-}
-
-QModelIndex SourcesModel::index(int row, int column, const QModelIndex &parent) const
-{
-    if (row < 0 || column != 0) {
-        return QModelIndex();
-    }
-
-    if (parent.isValid()) {
-        const auto events = m_data.at(parent.row()).events;
-        if (row < events.count()) {
-            return createIndex(row, column, parent.row() + 1);
-        }
-
-        return QModelIndex();
-    }
-
-    if (row < m_data.count()) {
-        return createIndex(row, column, nullptr);
-    }
-
-    return QModelIndex();
-}
-
-QModelIndex SourcesModel::parent(const QModelIndex &child) const
-{
-    if (child.internalId()) {
-        return createIndex(child.internalId() - 1, 0, nullptr);
-    }
-
-    return QModelIndex();
-}
-
-QHash<int, QByteArray> SourcesModel::roleNames() const
-{
-    return {{Qt::DisplayRole, QByteArrayLiteral("display")},
-            {Qt::DecorationRole, QByteArrayLiteral("decoration")},
-            {SourceTypeRole, QByteArrayLiteral("sourceType")},
-            {NotifyRcNameRole, QByteArrayLiteral("notifyRcName")},
-            {DesktopEntryRole, QByteArrayLiteral("desktopEntry")},
-            {IsDefaultRole, QByteArrayLiteral("isDefault")},
-            {EventIdRole, QByteArrayLiteral("eventId")},
-            {ActionsRole, QByteArrayLiteral("actions")}};
-}
-
-void SourcesModel::load()
-{
-    beginResetModel();
-
-    m_data.clear();
-
-    QCollator collator;
-
-    QVector<SourceData> appsData;
-    QVector<SourceData> servicesData;
-
-    QStringList notifyRcFiles;
-    QStringList desktopEntries;
-
-    // old code did KGlobal::dirs()->findAllResources("data", QStringLiteral("*/*.notifyrc")) but in KF5
-    // only notifyrc files in knotifications5/ folder are supported
-    const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("knotifications5"), QStandardPaths::LocateDirectory);
-    for (const QString &dir : dirs) {
-        const QStringList fileNames = QDir(dir).entryList(QStringList() << QStringLiteral("*.notifyrc"));
-        for (const QString &file : fileNames) {
-            if (notifyRcFiles.contains(file)) {
-                continue;
-            }
-
-            notifyRcFiles.append(file);
-
-            KConfig config(file, KConfig::NoGlobals);
-            config.addConfigSources(QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("knotifications5/") + file));
-
-            KConfigGroup globalGroup(&config, QLatin1String("Global"));
-
-            const QRegularExpression regExp(QStringLiteral("^Event/([^/]*)$"));
-            const QStringList groups = config.groupList().filter(regExp);
-
-            const QString notifyRcName = file.section(QLatin1Char('.'), 0, -2);
-            const QString desktopEntry = globalGroup.readEntry(QStringLiteral("DesktopEntry"));
-            if (!desktopEntry.isEmpty()) {
-                if (desktopEntries.contains(desktopEntry)) {
-                    continue;
-                }
-
-                desktopEntries.append(desktopEntry);
-            }
-
-            SourceData source{
-                // The old KCM read the Name and Comment from global settings disregarding
-                // any user settings and just used user-specific files for actions config
-                // I'm pretty sure there's a readEntry equivalent that does that without
-                // reading the config stuff twice, assuming we care about this to begin with
-                globalGroup.readEntry(QStringLiteral("Name")),
-                globalGroup.readEntry(QStringLiteral("Comment")),
-                globalGroup.readEntry(QStringLiteral("IconName")),
-                true,
-                notifyRcName,
-                desktopEntry,
-                {} // events
-            };
-
-            QVector<EventData> events;
-            for (const QString &group : groups) {
-                KConfigGroup cg(&config, group);
-
-                const QString eventId = regExp.match(group).captured(1);
-                // TODO context stuff
-                // TODO load defaults thing
-
-                EventData event{cg.readEntry("Name"),
-                                cg.readEntry("Comment"),
-                                cg.readEntry("IconName"),
-                                eventId,
-                                // TODO Flags?
-                                cg.readEntry("Action").split(QLatin1Char('|'))};
-                events.append(event);
-            }
-
-            std::sort(events.begin(), events.end(), [&collator](const EventData &a, const EventData &b) {
-                return collator.compare(a.name, b.name) < 0;
-            });
-
-            source.events = events;
-
-            if (!source.desktopEntry.isEmpty()) {
-                appsData.append(source);
-            } else {
-                servicesData.append(source);
-            }
-        }
-    }
-
-    const auto services =
-        KServiceTypeTrader::self()->query(QStringLiteral("Application"), QStringLiteral("exist Exec and TRUE == [X-GNOME-UsesNotifications]"));
-    for (const auto &service : services) {
-        if (service->noDisplay()) {
-            continue;
-        }
-
-        if (desktopEntries.contains(service->desktopEntryName())) {
-            continue;
-        }
-
-        SourceData source{
-            service->name(),
-            service->comment(),
-            service->icon(),
-            true,
-            QString(), // notifyRcFile
-            service->desktopEntryName(),
-            {} // events
-        };
-        appsData.append(source);
-        desktopEntries.append(service->desktopEntryName());
-    }
-
-    KSharedConfig::Ptr plasmanotifyrc = KSharedConfig::openConfig(QStringLiteral("plasmanotifyrc"));
-    KConfigGroup applicationsGroup = plasmanotifyrc->group("Applications");
-    const QStringList seenApps = applicationsGroup.groupList();
-    for (const QString &app : seenApps) {
-        if (desktopEntries.contains(app)) {
-            continue;
-        }
-
-        KService::Ptr service = KService::serviceByDesktopName(app);
-        if (!service || service->noDisplay()) {
-            continue;
-        }
-
-        SourceData source{service->name(),
-                          service->comment(),
-                          service->icon(),
-                          true,
-                          QString(), // notifyRcFile
-                          service->desktopEntryName(),
-                          {}};
-        appsData.append(source);
-        desktopEntries.append(service->desktopEntryName());
-    }
-
-    std::sort(appsData.begin(), appsData.end(), [&collator](const SourceData &a, const SourceData &b) {
-        return collator.compare(a.display(), b.display()) < 0;
-    });
-
-    // Fake entry for configuring non-identifyable applications
-    appsData << SourceData{i18n("Other Applications"), {}, QStringLiteral("applications-other"), true, QString(), QStringLiteral("@other"), {}};
-
-    // Sort and make sure plasma_workspace is at the beginning of the list
-    std::sort(servicesData.begin(), servicesData.end(), [&collator](const SourceData &a, const SourceData &b) {
-        if (a.notifyRcName == s_plasmaWorkspaceNotifyRcName) {
-            return true;
-        }
-        if (b.notifyRcName == s_plasmaWorkspaceNotifyRcName) {
-            return false;
-        }
-        return collator.compare(a.display(), b.display()) < 0;
-    });
-
-    m_data << appsData << servicesData;
-
-    endResetModel();
-}
diff --git a/kcms/notifications/sourcesmodel.h b/kcms/notifications/sourcesmodel.h
deleted file mode 100644
index 1f48e69e9..000000000
--- a/kcms/notifications/sourcesmodel.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2019 Kai Uwe Broulik <kde at privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License or (at your option) version 3 or any later version
- * accepted by the membership of KDE e.V. (or its successor approved
- * by the membership of KDE e.V.), which shall act as a proxy
- * defined in Section 14 of version 3 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#pragma once
-
-#include <QAbstractItemModel>
-#include <QHash>
-#include <QString>
-#include <QVector>
-
-struct EventData {
-    QString name;
-    QString comment;
-    QString iconName;
-    QString eventId;
-    QStringList actions;
-};
-
-// FIXME add constructors for KService and KConfigGroup
-struct SourceData {
-    QString name;
-    QString comment;
-    QString iconName;
-    bool isDefault;
-
-    QString notifyRcName;
-    QString desktopEntry;
-
-    QVector<EventData> events;
-
-    QString display() const
-    {
-        return !name.isEmpty() ? name : comment;
-    }
-};
-
-class SourcesModel : public QAbstractItemModel
-{
-    Q_OBJECT
-
-public:
-    SourcesModel(QObject *parent = nullptr);
-    ~SourcesModel() override;
-
-    enum Roles {
-        SourceTypeRole = Qt::UserRole + 1,
-        NotifyRcNameRole,
-        DesktopEntryRole,
-        IsDefaultRole,
-
-        EventIdRole,
-        ActionsRole,
-    };
-    Q_ENUM(Roles)
-
-    enum Type {
-        ApplicationType,
-        ServiceType,
-    };
-    Q_ENUM(Type)
-
-    Q_INVOKABLE QPersistentModelIndex makePersistentModelIndex(const QModelIndex &idx) const;
-
-    Q_INVOKABLE QPersistentModelIndex persistentIndexForDesktopEntry(const QString &desktopEntry) const;
-    Q_INVOKABLE QPersistentModelIndex persistentIndexForNotifyRcName(const QString &notifyRcName) const;
-
-    int columnCount(const QModelIndex &parent) const override;
-    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
-
-    QVariant data(const QModelIndex &index, int role) const override;
-    bool setData(const QModelIndex &index, const QVariant &value, int role) override;
-
-    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
-    QModelIndex parent(const QModelIndex &child) const override;
-
-    QHash<int, QByteArray> roleNames() const override;
-
-    Q_INVOKABLE void load();
-
-private:
-    QVector<SourceData> m_data;
-};


More information about the kde-doc-english mailing list