From d3c6ac6d0f23df56644008ccb6aa2c8fa37ab1b5 Mon Sep 17 00:00:00 2001
From: Jan-Marek Glogowski <glogow@fbihome.de>
Date: Tue, 9 Jul 2019 15:28:29 +0000
Subject: tdf#125922 rename kde5 to kf5 + plasma5

Just as the gtk3 plugin isn't named GNOME, rename kde5 to kf5, as
it is based on the KDE frameworks 5 libraries.

This also includes:
* a convenience alias to load the kf5 VCL plugin in case someone
  requests the kde5 plugin.
* keep convenience kde5 configure switch, but warn about it
* rename detected desktop from kde5 to plasma5

Change-Id: I6764a05b81a5edbf284484c234fee2649aacf735
Reviewed-on: https://gerrit.libreoffice.org/75313
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
---
 vcl/CustomTarget_kde5_moc.mk                      |  21 --
 vcl/CustomTarget_kf5_moc.mk                       |  21 ++
 vcl/Executable_lo_kde5filepicker.mk               |   2 +-
 vcl/Library_vcl.mk                                |   2 +-
 vcl/Library_vclplug_kde5.mk                       | 102 ----------
 vcl/Library_vclplug_kf5.mk                        | 102 ++++++++++
 vcl/Module_vcl.mk                                 |  12 +-
 vcl/README                                        |   4 +-
 vcl/inc/unx/desktops.hxx                          |   2 +-
 vcl/inc/unx/gendata.hxx                           |   2 +-
 vcl/inc/vclpluginapi.h                            |   6 +-
 vcl/qa/cppunit/app/test_IconThemeSelector.cxx     |   4 +-
 vcl/qt5/Qt5Frame.cxx                              |   4 +-
 vcl/source/app/IconThemeSelector.cxx              |   2 +-
 vcl/source/app/salplug.cxx                        |  18 +-
 vcl/unx/generic/desktopdetect/desktopdetector.cxx |  21 +-
 vcl/unx/gtk3_kde5/kde5_filepicker.cxx             |   4 +-
 vcl/unx/kde5/KDE5FilePicker.hxx                   |  65 -------
 vcl/unx/kde5/KDE5FilePicker2.cxx                  | 210 --------------------
 vcl/unx/kde5/KDE5SalFrame.cxx                     | 222 ----------------------
 vcl/unx/kde5/KDE5SalFrame.hxx                     |  47 -----
 vcl/unx/kde5/KDE5SalInstance.cxx                  | 101 ----------
 vcl/unx/kde5/KDE5SalInstance.hxx                  |  36 ----
 vcl/unx/kf5/KF5FilePicker.cxx                     | 210 ++++++++++++++++++++
 vcl/unx/kf5/KF5FilePicker.hxx                     |  65 +++++++
 vcl/unx/kf5/KF5SalFrame.cxx                       | 222 ++++++++++++++++++++++
 vcl/unx/kf5/KF5SalFrame.hxx                       |  47 +++++
 vcl/unx/kf5/KF5SalInstance.cxx                    | 101 ++++++++++
 vcl/unx/kf5/KF5SalInstance.hxx                    |  36 ++++
 29 files changed, 844 insertions(+), 847 deletions(-)
 delete mode 100644 vcl/CustomTarget_kde5_moc.mk
 create mode 100644 vcl/CustomTarget_kf5_moc.mk
 delete mode 100644 vcl/Library_vclplug_kde5.mk
 create mode 100644 vcl/Library_vclplug_kf5.mk
 delete mode 100644 vcl/unx/kde5/KDE5FilePicker.hxx
 delete mode 100644 vcl/unx/kde5/KDE5FilePicker2.cxx
 delete mode 100644 vcl/unx/kde5/KDE5SalFrame.cxx
 delete mode 100644 vcl/unx/kde5/KDE5SalFrame.hxx
 delete mode 100644 vcl/unx/kde5/KDE5SalInstance.cxx
 delete mode 100644 vcl/unx/kde5/KDE5SalInstance.hxx
 create mode 100644 vcl/unx/kf5/KF5FilePicker.cxx
 create mode 100644 vcl/unx/kf5/KF5FilePicker.hxx
 create mode 100644 vcl/unx/kf5/KF5SalFrame.cxx
 create mode 100644 vcl/unx/kf5/KF5SalFrame.hxx
 create mode 100644 vcl/unx/kf5/KF5SalInstance.cxx
 create mode 100644 vcl/unx/kf5/KF5SalInstance.hxx

(limited to 'vcl')

diff --git a/vcl/CustomTarget_kde5_moc.mk b/vcl/CustomTarget_kde5_moc.mk
deleted file mode 100644
index 8f9d65c27f31..000000000000
--- a/vcl/CustomTarget_kde5_moc.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_CustomTarget_CustomTarget,vcl/unx/kde5))
-
-$(call gb_CustomTarget_get_target,vcl/unx/kde5) : \
-	$(call gb_CustomTarget_get_workdir,vcl/unx/kde5)/KDE5FilePicker.moc
-
-$(call gb_CustomTarget_get_workdir,vcl/unx/kde5)/%.moc : \
-		$(SRCDIR)/vcl/unx/kde5/%.hxx \
-		| $(call gb_CustomTarget_get_workdir,vcl/unx/kde5)/.dir
-	$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),MOC,1)
-	$(MOC5) $< -o $@
-
-# vim: set noet sw=4:
diff --git a/vcl/CustomTarget_kf5_moc.mk b/vcl/CustomTarget_kf5_moc.mk
new file mode 100644
index 000000000000..6247c58161fd
--- /dev/null
+++ b/vcl/CustomTarget_kf5_moc.mk
@@ -0,0 +1,21 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_CustomTarget_CustomTarget,vcl/unx/kf5))
+
+$(call gb_CustomTarget_get_target,vcl/unx/kf5) : \
+	$(call gb_CustomTarget_get_workdir,vcl/unx/kf5)/KF5FilePicker.moc
+
+$(call gb_CustomTarget_get_workdir,vcl/unx/kf5)/%.moc : \
+		$(SRCDIR)/vcl/unx/kf5/%.hxx \
+		| $(call gb_CustomTarget_get_workdir,vcl/unx/kf5)/.dir
+	$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),MOC,1)
+	$(MOC5) $< -o $@
+
+# vim: set noet sw=4:
diff --git a/vcl/Executable_lo_kde5filepicker.mk b/vcl/Executable_lo_kde5filepicker.mk
index a34682966778..7d44b3fca120 100644
--- a/vcl/Executable_lo_kde5filepicker.mk
+++ b/vcl/Executable_lo_kde5filepicker.mk
@@ -68,7 +68,7 @@ $(eval $(call gb_Executable_use_libraries,lo_kde5filepicker,\
 $(eval $(call gb_Executable_use_externals,lo_kde5filepicker,\
 	boost_headers \
 	epoxy \
-	kde5 \
+	kf5 \
 	dbus \
 ))
 
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 25f11f0cbaea..1c3f0b31eb2d 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -603,7 +603,7 @@ $(eval $(call gb_Library_add_libs,vcl,\
 ))
 
 $(eval $(call gb_Library_add_exception_objects,vcl, \
-    $(if $(or $(ENABLE_QT5),$(ENABLE_KDE5)),vcl/source/app/salplug) \
+    $(if $(or $(ENABLE_QT5),$(ENABLE_KF5)),vcl/source/app/salplug) \
 ))
 
 $(eval $(call gb_Library_use_externals,vcl,\
diff --git a/vcl/Library_vclplug_kde5.mk b/vcl/Library_vclplug_kde5.mk
deleted file mode 100644
index 8b5804185b3e..000000000000
--- a/vcl/Library_vclplug_kde5.mk
+++ /dev/null
@@ -1,102 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-#   Licensed to the Apache Software Foundation (ASF) under one or more
-#   contributor license agreements. See the NOTICE file distributed
-#   with this work for additional information regarding copyright
-#   ownership. The ASF licenses this file to you under the Apache
-#   License, Version 2.0 (the "License"); you may not use this file
-#   except in compliance with the License. You may obtain a copy of
-#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-$(eval $(call gb_Library_Library,vclplug_kde5))
-
-$(eval $(call gb_Library_use_custom_headers,vclplug_kde5,vcl/unx/kde5))
-
-$(eval $(call gb_Library_set_include,vclplug_kde5,\
-    $$(INCLUDE) \
-    -I$(SRCDIR)/vcl/inc \
-    -I$(SRCDIR)/vcl/inc/qt5 \
-))
-
-$(eval $(call gb_Library_add_defs,vclplug_kde5,\
-    -DVCLPLUG_KDE5_IMPLEMENTATION \
-))
-
-$(eval $(call gb_Library_use_sdk_api,vclplug_kde5))
-
-$(eval $(call gb_Library_use_libraries,vclplug_kde5,\
-    vclplug_qt5 \
-    vcl \
-    tl \
-    utl \
-    sot \
-    ucbhelper \
-    basegfx \
-    comphelper \
-    cppuhelper \
-    i18nlangtag \
-    i18nutil \
-    $(if $(ENABLE_JAVA), \
-        jvmaccess) \
-    cppu \
-    sal \
-))
-
-$(eval $(call gb_Library_use_externals,vclplug_kde5,\
-	boost_headers \
-	cairo \
-	graphite \
-	harfbuzz \
-	icuuc \
-	kde5 \
-	epoxy \
-))
-
-ifneq ($(QT5_HAVE_GLIB),)
-$(eval $(call gb_Library_add_cxxflags,vclplug_kde5,\
-    $(QT5_GLIB_CFLAGS) \
-))
-
-$(eval $(call gb_Library_add_libs,vclplug_kde5,\
-    $(QT5_GLIB_LIBS) \
-))
-endif
-
-$(eval $(call gb_Library_add_cxxflags,vclplug_kde5,\
-    $(KF5_CFLAGS) \
-))
-$(eval $(call gb_Library_add_libs,vclplug_kde5,\
-    $(KF5_LIBS) \
-))
-
-$(eval $(call gb_Library_add_exception_objects,vclplug_kde5,\
-    vcl/unx/kde5/KDE5FilePicker2 \
-    vcl/unx/kde5/KDE5SalFrame \
-    vcl/unx/kde5/KDE5SalInstance \
-))
-
-ifeq ($(OS),LINUX)
-$(eval $(call gb_Library_add_libs,vclplug_kde5,\
-	-lm \
-	-ldl \
-))
-endif
-
-# Workaround for clang+icecream (clang's -frewrite-includes
-# doesn't handle Qt5's QT_HAS_INCLUDE that Qt5 uses for <chrono>).
-ifeq ($(COM_IS_CLANG),TRUE)
-$(eval $(call gb_Library_add_cxxflags,vclplug_kde5, \
-    -include chrono \
-))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/vcl/Library_vclplug_kf5.mk b/vcl/Library_vclplug_kf5.mk
new file mode 100644
index 000000000000..62dafe2c2536
--- /dev/null
+++ b/vcl/Library_vclplug_kf5.mk
@@ -0,0 +1,102 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This file incorporates work covered by the following license notice:
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements. See the NOTICE file distributed
+#   with this work for additional information regarding copyright
+#   ownership. The ASF licenses this file to you under the Apache
+#   License, Version 2.0 (the "License"); you may not use this file
+#   except in compliance with the License. You may obtain a copy of
+#   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+#
+
+$(eval $(call gb_Library_Library,vclplug_kf5))
+
+$(eval $(call gb_Library_use_custom_headers,vclplug_kf5,vcl/unx/kf5))
+
+$(eval $(call gb_Library_set_include,vclplug_kf5,\
+    $$(INCLUDE) \
+    -I$(SRCDIR)/vcl/inc \
+    -I$(SRCDIR)/vcl/inc/qt5 \
+))
+
+$(eval $(call gb_Library_add_defs,vclplug_kf5,\
+    -DVCLPLUG_KF5_IMPLEMENTATION \
+))
+
+$(eval $(call gb_Library_use_sdk_api,vclplug_kf5))
+
+$(eval $(call gb_Library_use_libraries,vclplug_kf5,\
+    vclplug_qt5 \
+    vcl \
+    tl \
+    utl \
+    sot \
+    ucbhelper \
+    basegfx \
+    comphelper \
+    cppuhelper \
+    i18nlangtag \
+    i18nutil \
+    $(if $(ENABLE_JAVA), \
+        jvmaccess) \
+    cppu \
+    sal \
+))
+
+$(eval $(call gb_Library_use_externals,vclplug_kf5,\
+	boost_headers \
+	cairo \
+	graphite \
+	harfbuzz \
+	icuuc \
+	kf5 \
+	epoxy \
+))
+
+ifneq ($(QT5_HAVE_GLIB),)
+$(eval $(call gb_Library_add_cxxflags,vclplug_kf5,\
+    $(QT5_GLIB_CFLAGS) \
+))
+
+$(eval $(call gb_Library_add_libs,vclplug_kf5,\
+    $(QT5_GLIB_LIBS) \
+))
+endif
+
+$(eval $(call gb_Library_add_cxxflags,vclplug_kf5,\
+    $(KF5_CFLAGS) \
+))
+$(eval $(call gb_Library_add_libs,vclplug_kf5,\
+    $(KF5_LIBS) \
+))
+
+$(eval $(call gb_Library_add_exception_objects,vclplug_kf5,\
+    vcl/unx/kf5/KF5FilePicker \
+    vcl/unx/kf5/KF5SalFrame \
+    vcl/unx/kf5/KF5SalInstance \
+))
+
+ifeq ($(OS),LINUX)
+$(eval $(call gb_Library_add_libs,vclplug_kf5,\
+	-lm \
+	-ldl \
+))
+endif
+
+# Workaround for clang+icecream (clang's -frewrite-includes
+# doesn't handle Qt5's QT_HAS_INCLUDE that Qt5 uses for <chrono>).
+ifeq ($(COM_IS_CLANG),TRUE)
+$(eval $(call gb_Library_add_cxxflags,vclplug_kf5, \
+    -include chrono \
+))
+endif
+
+# vim: set noet sw=4 ts=4:
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 78604ab0e9c4..54e3fbd6b07f 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -77,10 +77,10 @@ $(eval $(call gb_Module_add_targets,vcl,\
     Library_vclplug_gtk3 \
 ))
 endif
-ifneq ($(ENABLE_KDE5),)
+ifneq ($(ENABLE_KF5),)
 $(eval $(call gb_Module_add_targets,vcl,\
-    CustomTarget_kde5_moc \
-    Library_vclplug_kde5 \
+    CustomTarget_kf5_moc \
+    Library_vclplug_kf5 \
 ))
 endif
 ifneq ($(ENABLE_QT5),)
@@ -119,10 +119,10 @@ $(eval $(call gb_Module_add_targets,vcl,\
     Library_vclplug_qt5 \
 ))
 endif
-ifneq ($(ENABLE_KDE5),)
+ifneq ($(ENABLE_KF5),)
 $(eval $(call gb_Module_add_targets,vcl,\
-    CustomTarget_kde5_moc \
-    Library_vclplug_kde5 \
+    CustomTarget_kf5_moc \
+    Library_vclplug_kf5 \
 ))
 endif
 endif
diff --git a/vcl/README b/vcl/README
index d8da537939b3..6ee9dad11e80 100644
--- a/vcl/README
+++ b/vcl/README
@@ -38,8 +38,8 @@ unx/
 		+ GTK2 support
 	gtk3/
 		+ GTK3 support
-	kde5/
-		+ KDE5 support
+	kf5/
+		+ KF5 support
 	gtk3_kde5/
 		+ GTK3 support with KDE5 file pickers (alternative to native kde5 one)
 	generic/
diff --git a/vcl/inc/unx/desktops.hxx b/vcl/inc/unx/desktops.hxx
index a4a6700b7e96..531e4c64272b 100644
--- a/vcl/inc/unx/desktops.hxx
+++ b/vcl/inc/unx/desktops.hxx
@@ -31,7 +31,7 @@ enum SAL_DLLPUBLIC_RTTI DesktopType {
     DESKTOP_UNITY,
     DESKTOP_XFCE,
     DESKTOP_MATE,
-    DESKTOP_KDE5,
+    DESKTOP_PLASMA5,
     DESKTOP_LXQT
 }; // keep in sync with desktop_strings[] in salplug.cxx
 
diff --git a/vcl/inc/unx/gendata.hxx b/vcl/inc/unx/gendata.hxx
index 15f201931792..d8f8149ad6a7 100644
--- a/vcl/inc/unx/gendata.hxx
+++ b/vcl/inc/unx/gendata.hxx
@@ -27,7 +27,7 @@ enum GenericUnixSalDataType
 {
     SAL_DATA_GTK,
     SAL_DATA_GTK3,
-    SAL_DATA_KDE5,
+    SAL_DATA_KF5,
     SAL_DATA_UNX,
     SAL_DATA_SVP,
     SAL_DATA_ANDROID,
diff --git a/vcl/inc/vclpluginapi.h b/vcl/inc/vclpluginapi.h
index 495c86b8e57b..589d7244ddaa 100644
--- a/vcl/inc/vclpluginapi.h
+++ b/vcl/inc/vclpluginapi.h
@@ -35,10 +35,10 @@
 #define VCLPLUG_GTK_PUBLIC SAL_DLLPUBLIC_IMPORT
 #endif
 
-#if defined VCLPLUG_KDE5_IMPLEMENTATION
-#define VCLPLUG_KDE5_PUBLIC SAL_DLLPUBLIC_EXPORT
+#if defined VCLPLUG_KF5_IMPLEMENTATION
+#define VCLPLUG_KF5_PUBLIC SAL_DLLPUBLIC_EXPORT
 #else
-#define VCLPLUG_KDE5_PUBLIC SAL_DLLPUBLIC_IMPORT
+#define VCLPLUG_KF5_PUBLIC SAL_DLLPUBLIC_IMPORT
 #endif
 
 #if defined VCLPLUG_OSX_IMPLEMENTATION
diff --git a/vcl/qa/cppunit/app/test_IconThemeSelector.cxx b/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
index 5ff3468655cc..cff9641cd033 100644
--- a/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
+++ b/vcl/qa/cppunit/app/test_IconThemeSelector.cxx
@@ -75,8 +75,8 @@ IconThemeSelectorTest::BreezeIsReturnedForKde5Desktop()
 {
     std::vector<vcl::IconThemeInfo> themes = GetFakeInstalledThemes();
     vcl::IconThemeSelector s;
-    OUString r = s.SelectIconThemeForDesktopEnvironment(themes, "kde5");
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is returned for kde5 desktop", OUString("breeze"), r);
+    OUString r = s.SelectIconThemeForDesktopEnvironment(themes, "plasma5");
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("'breeze' theme is returned for Plasma 5 desktop", OUString("breeze"), r);
 }
 
 void
diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 0bfd51c515da..142cb12aa199 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -1062,14 +1062,14 @@ KeyIndicatorState Qt5Frame::GetIndicatorState() { return KeyIndicatorState(); }
 
 void Qt5Frame::SimulateKeyPress(sal_uInt16 nKeyCode)
 {
-    SAL_WARN("vcl.kde5", "missing simulate keypress " << nKeyCode);
+    SAL_WARN("vcl.qt5", "missing simulate keypress " << nKeyCode);
 }
 
 void Qt5Frame::SetParent(SalFrame* pNewParent) { m_pParent = static_cast<Qt5Frame*>(pNewParent); }
 
 bool Qt5Frame::SetPluginParent(SystemParentData* /*pNewParent*/)
 {
-    //FIXME: no SetPluginParent impl. for kde5
+    //FIXME: no SetPluginParent impl. for qt5
     return false;
 }
 
diff --git a/vcl/source/app/IconThemeSelector.cxx b/vcl/source/app/IconThemeSelector.cxx
index 0ed454f2911b..ff2dcc52805a 100644
--- a/vcl/source/app/IconThemeSelector.cxx
+++ b/vcl/source/app/IconThemeSelector.cxx
@@ -55,7 +55,7 @@ IconThemeSelector::GetIconThemeForDesktopEnvironment(const OUString& desktopEnvi
     return OUString("colibre");
 #else
     OUString r;
-    if ( desktopEnvironment.equalsIgnoreAsciiCase("kde5") ||
+    if ( desktopEnvironment.equalsIgnoreAsciiCase("plasma5") ||
          desktopEnvironment.equalsIgnoreAsciiCase("lxqt") ) {
         r = "breeze";
     }
diff --git a/vcl/source/app/salplug.cxx b/vcl/source/app/salplug.cxx
index 4ec54849b21c..20604edb7f46 100644
--- a/vcl/source/app/salplug.cxx
+++ b/vcl/source/app/salplug.cxx
@@ -65,11 +65,14 @@ SalInstance* tryInstance( const OUString& rModuleBase, bool bForce = false )
 #endif
 
     SalInstance* pInst = nullptr;
+    OUString aUsedModuleBase(rModuleBase);
+    if (aUsedModuleBase == "kde5")
+        aUsedModuleBase = "kf5";
     OUString aModule(
 #ifdef SAL_DLLPREFIX
             SAL_DLLPREFIX
 #endif
-            "vclplug_" + rModuleBase + "lo" SAL_DLLEXTENSION );
+            "vclplug_" + aUsedModuleBase + "lo" SAL_DLLEXTENSION );
 
     osl::Module aMod;
     if (aMod.loadRelative(reinterpret_cast<oslGenericFunction>(&tryInstance), aModule, SAL_LOADMODULE_GLOBAL))
@@ -92,7 +95,7 @@ SalInstance* tryInstance( const OUString& rModuleBase, bool bForce = false )
                  * So make sure libgtk+ & co are still mapped into memory when
                  * atk-bridge's atexit handler gets called.
                  */
-                if( rModuleBase == "gtk" || rModuleBase == "gtk3" || rModuleBase == "gtk3_kde5" || rModuleBase == "win" )
+                if( aUsedModuleBase == "gtk" || aUsedModuleBase == "gtk3" || aUsedModuleBase == "gtk3_kde5" || aUsedModuleBase == "win" )
                 {
                     pCloseModule = nullptr;
                 }
@@ -145,8 +148,8 @@ SalInstance* autodetect_plugin()
 {
     static const char* const pKDEFallbackList[] =
     {
-#if ENABLE_KDE5
-        "kde5",
+#if ENABLE_KF5
+        "kf5",
 #endif
 #if ENABLE_GTK3_KDE5
         "gtk3_kde5",
@@ -181,8 +184,7 @@ SalInstance* autodetect_plugin()
               desktop == DESKTOP_XFCE  ||
               desktop == DESKTOP_MATE )
         pList = pStandardFallbackList;
-    else if( desktop == DESKTOP_KDE5 ||
-              desktop == DESKTOP_LXQT )
+    else if (desktop == DESKTOP_PLASMA5 || desktop == DESKTOP_LXQT)
         pList = pKDEFallbackList;
 
     SalInstance* pInst = nullptr;
@@ -257,7 +259,7 @@ SalInstance *CreateSalInstance()
 #ifdef MACOSX
         "osx"
 #else
-        "gtk3", "gtk", "kde5", "gen"
+        "gtk3", "gtk", "kf5", "gen"
 #endif
 #endif
      };
@@ -314,7 +316,7 @@ const OUString& SalGetDesktopEnvironment()
     // Order to match desktops.hxx' DesktopType
     static const char * const desktop_strings[] = {
         "none", "unknown", "GNOME", "UNITY",
-        "XFCE", "MATE", "KDE5", "LXQT" };
+        "XFCE", "MATE", "PLASMA5", "LXQT" };
     static OUString aDesktopEnvironment;
     if( aDesktopEnvironment.isEmpty())
     {
diff --git a/vcl/unx/generic/desktopdetect/desktopdetector.cxx b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
index 2c453e051b5c..b2aea898e45c 100644
--- a/vcl/unx/generic/desktopdetect/desktopdetector.cxx
+++ b/vcl/unx/generic/desktopdetect/desktopdetector.cxx
@@ -115,15 +115,11 @@ static bool is_gnome_desktop( Display* pDisplay )
     return ret;
 }
 
-
-static bool is_kde5_desktop()
+static bool is_plasma5_desktop()
 {
-    static const char * pFullVersion = getenv( "KDE_FULL_SESSION" );
-    static const char * pSessionVersion = getenv( "KDE_SESSION_VERSION" );
-    if ( pFullVersion && pSessionVersion && strcmp(pSessionVersion, "5") == 0)
-        return true;
-
-    return false;
+    static const char* pFullVersion = getenv("KDE_FULL_SESSION");
+    static const char* pSessionVersion = getenv("KDE_SESSION_VERSION");
+    return pFullVersion && pSessionVersion && (0 == strcmp(pSessionVersion, "5"));
 }
 
 extern "C"
@@ -139,8 +135,8 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
 
         if ( aOver.equalsIgnoreAsciiCase( "lxqt" ) )
             return DESKTOP_LXQT;
-        if ( aOver.equalsIgnoreAsciiCase( "kde5" ) )
-            return DESKTOP_KDE5;
+        if (aOver.equalsIgnoreAsciiCase("plasma5") || aOver.equalsIgnoreAsciiCase("plasma"))
+            return DESKTOP_PLASMA5;
         if ( aOver.equalsIgnoreAsciiCase( "gnome" ) )
             return DESKTOP_GNOME;
         if ( aOver.equalsIgnoreAsciiCase( "gnome-wayland" ) )
@@ -197,9 +193,8 @@ DESKTOP_DETECTOR_PUBLIC DesktopType get_desktop_environment()
     else if ( aDesktopSession.equalsIgnoreAsciiCase( "lxqt" ) )
         return DESKTOP_LXQT;
 
-
-    if ( is_kde5_desktop() )
-        return DESKTOP_KDE5;
+    if (is_plasma5_desktop())
+        return DESKTOP_PLASMA5;
 
     // tdf#121275 if we still can't tell, and WAYLAND_DISPLAY
     // is set, default to gtk3
diff --git a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
index f4cb305e239c..2ee4dbd8e85c 100644
--- a/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
+++ b/vcl/unx/gtk3_kde5/kde5_filepicker.cxx
@@ -68,7 +68,7 @@ void KDE5FilePicker::enableFolderMode()
     // and then confirming would return "foo" rather than "foo/bar";
     // on the other hand, non-native file dialog needs 'QFileDialog::Directory'
     // and doesn't allow folder selection otherwise
-    if (Application::GetDesktopEnvironment() != "KDE5")
+    if (Application::GetDesktopEnvironment() != "PLASMA5")
     {
         _dialog->setFileMode(QFileDialog::Directory);
     }
@@ -248,7 +248,7 @@ void KDE5FilePicker::setupCustomWidgets()
     // dialog there in order not to lose the custom controls and insert the custom
     // widget in the layout returned by QFileDialog::layout()
     // (which returns nullptr for native file dialogs)
-    if (Application::GetDesktopEnvironment() == "KDE5")
+    if (Application::GetDesktopEnvironment() == "PLASMA5")
     {
         qApp->installEventFilter(this);
     }
diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx
deleted file mode 100644
index 786a99b00777..000000000000
--- a/vcl/unx/kde5/KDE5FilePicker.hxx
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <Qt5FilePicker.hxx>
-
-class QGridLayout;
-
-class KDE5FilePicker : public Qt5FilePicker
-{
-    Q_OBJECT
-
-protected:
-    //layout for extra custom controls
-    QGridLayout* _layout;
-
-    bool allowRemoteUrls;
-
-public:
-    explicit KDE5FilePicker(css::uno::Reference<css::uno::XComponentContext> const& context,
-                            QFileDialog::FileMode);
-
-    // XExecutableDialog functions
-    virtual sal_Int16 SAL_CALL execute() override;
-
-    // XFilePickerControlAccess functions
-    virtual void SAL_CALL setValue(sal_Int16 nControlId, sal_Int16 nControlAction,
-                                   const css::uno::Any& rValue) override;
-    virtual css::uno::Any SAL_CALL getValue(sal_Int16 nControlId,
-                                            sal_Int16 nControlAction) override;
-    virtual void SAL_CALL enableControl(sal_Int16 nControlId, sal_Bool bEnable) override;
-    virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) override;
-    virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) override;
-
-    // XServiceInfo
-    virtual OUString SAL_CALL getImplementationName() override;
-    virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override;
-    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
-
-private:
-    //add a custom control widget to the file dialog
-    void addCustomControl(sal_Int16 controlId) override;
-
-protected:
-    bool eventFilter(QObject* watched, QEvent* event) override;
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx
deleted file mode 100644
index cb778e2fd0f7..000000000000
--- a/vcl/unx/kde5/KDE5FilePicker2.cxx
+++ /dev/null
@@ -1,210 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "KDE5FilePicker.hxx"
-#include <KDE5FilePicker.moc>
-
-#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
-#include <cppuhelper/supportsservice.hxx>
-#include <osl/mutex.hxx>
-
-#include <qt5/Qt5Instance.hxx>
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QWidget>
-#include <KFileWidget>
-
-using namespace ::com::sun::star;
-using ::com::sun::star::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION;
-
-namespace
-{
-uno::Sequence<OUString> FilePicker_getSupportedServiceNames()
-{
-    uno::Sequence<OUString> aRet(4);
-    aRet[0] = "com.sun.star.ui.dialogs.FilePicker";
-    aRet[1] = "com.sun.star.ui.dialogs.SystemFilePicker";
-    aRet[2] = "com.sun.star.ui.dialogs.KDE5FilePicker";
-    aRet[3] = "com.sun.star.ui.dialogs.KDE5FolderPicker";
-    return aRet;
-}
-}
-
-// KDE5FilePicker
-
-KDE5FilePicker::KDE5FilePicker(css::uno::Reference<css::uno::XComponentContext> const& context,
-                               QFileDialog::FileMode eMode)
-    // Native kde5 filepicker does not add file extension automatically
-    : Qt5FilePicker(context, eMode, true, true)
-    , _layout(new QGridLayout(m_pExtraControls))
-    , allowRemoteUrls(false)
-{
-    // use native dialog
-    m_pFileDialog->setOption(QFileDialog::DontUseNativeDialog, false);
-
-    // only columns 0 and 1 are used by controls (s. Qt5FilePicker::addCustomControl);
-    // set stretch for (unused) column 2 in order for the controls to only take the space
-    // they actually need and avoid empty space in between
-    _layout->setColumnStretch(2, 1);
-
-    // set layout so custom widgets show up in our native file dialog
-    setCustomControlWidgetLayout(_layout);
-
-    m_pFileDialog->setSupportedSchemes({
-        QStringLiteral("file"), QStringLiteral("ftp"), QStringLiteral("http"),
-        QStringLiteral("https"), QStringLiteral("webdav"), QStringLiteral("webdavs"),
-        QStringLiteral("smb"),
-        QStringLiteral(""), // this makes removable devices shown
-    });
-
-    // used to set the custom controls
-    qApp->installEventFilter(this);
-}
-
-sal_Int16 SAL_CALL KDE5FilePicker::execute()
-{
-    SolarMutexGuard g;
-    auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance));
-    assert(pSalInst);
-    if (!pSalInst->IsMainThread())
-    {
-        sal_Int16 ret;
-        pSalInst->RunInMainThread([&ret, this] { ret = execute(); });
-        return ret;
-    }
-
-    if (!m_aNamedFilterList.isEmpty())
-        m_pFileDialog->setNameFilters(m_aNamedFilterList);
-    if (!m_aCurrentFilter.isEmpty())
-        m_pFileDialog->selectNameFilter(m_aCurrentFilter);
-
-    m_pFileDialog->show();
-    //block and wait for user input
-    return m_pFileDialog->exec() == QFileDialog::Accepted ? 1 : 0;
-}
-
-// XFilePickerControlAccess
-void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction,
-                                       const uno::Any& value)
-{
-    if (CHECKBOX_AUTOEXTENSION == controlId)
-        // We ignore this one and rely on QFileDialog to provide the functionality
-        return;
-
-    Qt5FilePicker::setValue(controlId, nControlAction, value);
-}
-
-uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction)
-{
-    SolarMutexGuard g;
-    auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance));
-    assert(pSalInst);
-    if (!pSalInst->IsMainThread())
-    {
-        uno::Any ret;
-        pSalInst->RunInMainThread([&ret, this, controlId, nControlAction]() {
-            ret = getValue(controlId, nControlAction);
-        });
-        return ret;
-    }
-
-    if (CHECKBOX_AUTOEXTENSION == controlId)
-        // We ignore this one and rely on QFileDialog to provide the function.
-        // Always return false, to pretend we do not support this, otherwise
-        // LO core would try to be smart and cut the extension in some places,
-        // interfering with QFileDialog's handling of it. QFileDialog also
-        // saves the value of the setting, so LO core is not needed for that either.
-        return uno::Any(false);
-
-    return Qt5FilePicker::getValue(controlId, nControlAction);
-}
-
-void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable)
-{
-    if (CHECKBOX_AUTOEXTENSION == controlId)
-        // We ignore this one and rely on QFileDialog to provide the functionality
-        return;
-
-    Qt5FilePicker::enableControl(controlId, enable);
-}
-
-void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label)
-{
-    if (CHECKBOX_AUTOEXTENSION == controlId)
-        // We ignore this one and rely on QFileDialog to provide the functionality
-        return;
-
-    Qt5FilePicker::setLabel(controlId, label);
-}
-
-OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId)
-{
-    // We ignore this one and rely on QFileDialog to provide the functionality
-    if (CHECKBOX_AUTOEXTENSION == controlId)
-        return "";
-
-    return Qt5FilePicker::getLabel(controlId);
-}
-
-void KDE5FilePicker::addCustomControl(sal_Int16 controlId)
-{
-    // native kde5 filepicker has its own autoextension checkbox,
-    // therefore avoid adding yet another one
-    if (controlId == CHECKBOX_AUTOEXTENSION)
-        return;
-
-    Qt5FilePicker::addCustomControl(controlId);
-}
-
-// XServiceInfo
-OUString SAL_CALL KDE5FilePicker::getImplementationName()
-{
-    return OUString("com.sun.star.ui.dialogs.KDE5FilePicker");
-}
-
-sal_Bool SAL_CALL KDE5FilePicker::supportsService(const OUString& ServiceName)
-{
-    return cppu::supportsService(this, ServiceName);
-}
-
-uno::Sequence<OUString> SAL_CALL KDE5FilePicker::getSupportedServiceNames()
-{
-    return FilePicker_getSupportedServiceNames();
-}
-
-bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e)
-{
-    if (e->type() == QEvent::Show && o->isWidgetType())
-    {
-        auto* w = static_cast<QWidget*>(o);
-        if (!w->parentWidget() && w->isModal())
-        {
-            if (auto* fileWidget = w->findChild<KFileWidget*>({}, Qt::FindDirectChildrenOnly))
-            {
-                fileWidget->setCustomWidget(m_pExtraControls);
-                // remove event filter again; the only purpose was to set the custom widget here
-                qApp->removeEventFilter(this);
-            }
-        }
-    }
-    return QObject::eventFilter(o, e);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde5/KDE5SalFrame.cxx b/vcl/unx/kde5/KDE5SalFrame.cxx
deleted file mode 100644
index efb08a74d832..000000000000
--- a/vcl/unx/kde5/KDE5SalFrame.cxx
+++ /dev/null
@@ -1,222 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <memory>
-#include <QtGui/QColor>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QToolTip>
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMenuBar>
-
-#include <KConfig>
-#include <KConfigGroup>
-#include <KSharedConfig>
-
-#include "KDE5SalFrame.hxx"
-
-#include <tools/color.hxx>
-
-#include <vcl/font.hxx>
-#include <vcl/settings.hxx>
-#include <sal/log.hxx>
-
-#include <unx/fontmanager.hxx>
-
-#include <svdata.hxx>
-
-#include <boost/optional.hpp>
-
-KDE5SalFrame::KDE5SalFrame(KDE5SalFrame* pParent, SalFrameStyleFlags nState, bool bUseCairo)
-    : Qt5Frame(pParent, nState, bUseCairo)
-    , m_bGraphicsInUse(false)
-{
-}
-
-/** Helper function to add information to Font from QFont.
-
-    Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx).
-*/
-static vcl::Font toFont(const QFont& rQFont, const css::lang::Locale& rLocale)
-{
-    psp::FastPrintFontInfo aInfo;
-    QFontInfo qFontInfo(rQFont);
-
-    // set family name
-    aInfo.m_aFamilyName = OUString(static_cast<const char*>(rQFont.family().toUtf8()),
-                                   strlen(static_cast<const char*>(rQFont.family().toUtf8())),
-                                   RTL_TEXTENCODING_UTF8);
-
-    // set italic
-    aInfo.m_eItalic = (qFontInfo.italic() ? ITALIC_NORMAL : ITALIC_NONE);
-
-    // set weight
-    int nWeight = qFontInfo.weight();
-    if (nWeight <= QFont::Light)
-        aInfo.m_eWeight = WEIGHT_LIGHT;
-    else if (nWeight <= QFont::Normal)
-        aInfo.m_eWeight = WEIGHT_NORMAL;
-    else if (nWeight <= QFont::DemiBold)
-        aInfo.m_eWeight = WEIGHT_SEMIBOLD;
-    else if (nWeight <= QFont::Bold)
-        aInfo.m_eWeight = WEIGHT_BOLD;
-    else
-        aInfo.m_eWeight = WEIGHT_ULTRABOLD;
-
-    // set width
-    int nStretch = rQFont.stretch();
-    if (nStretch == 0) // QFont::AnyStretch since Qt 5.8
-        aInfo.m_eWidth = WIDTH_DONTKNOW;
-    else if (nStretch <= QFont::UltraCondensed)
-        aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;
-    else if (nStretch <= QFont::ExtraCondensed)
-        aInfo.m_eWidth = WIDTH_EXTRA_CONDENSED;
-    else if (nStretch <= QFont::Condensed)
-        aInfo.m_eWidth = WIDTH_CONDENSED;
-    else if (nStretch <= QFont::SemiCondensed)
-        aInfo.m_eWidth = WIDTH_SEMI_CONDENSED;
-    else if (nStretch <= QFont::Unstretched)
-        aInfo.m_eWidth = WIDTH_NORMAL;
-    else if (nStretch <= QFont::SemiExpanded)
-        aInfo.m_eWidth = WIDTH_SEMI_EXPANDED;
-    else if (nStretch <= QFont::Expanded)
-        aInfo.m_eWidth = WIDTH_EXPANDED;
-    else if (nStretch <= QFont::ExtraExpanded)
-        aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;
-    else
-        aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;
-
-    SAL_INFO("vcl.kde5", "font name BEFORE system match: \"" << aInfo.m_aFamilyName << "\"");
-
-    // match font to e.g. resolve "Sans"
-    psp::PrintFontManager::get().matchFont(aInfo, rLocale);
-
-    SAL_INFO("vcl.kde5", "font match " << (aInfo.m_nID != 0 ? "succeeded" : "failed")
-                                       << ", name AFTER: \"" << aInfo.m_aFamilyName << "\"");
-
-    // font height
-    int nPointHeight = qFontInfo.pointSize();
-    if (nPointHeight <= 0)
-        nPointHeight = rQFont.pointSize();
-
-    // Create the font
-    vcl::Font aFont(aInfo.m_aFamilyName, Size(0, nPointHeight));
-    if (aInfo.m_eWeight != WEIGHT_DONTKNOW)
-        aFont.SetWeight(aInfo.m_eWeight);
-    if (aInfo.m_eWidth != WIDTH_DONTKNOW)
-        aFont.SetWidthType(aInfo.m_eWidth);
-    if (aInfo.m_eItalic != ITALIC_DONTKNOW)
-        aFont.SetItalic(aInfo.m_eItalic);
-    if (aInfo.m_ePitch != PITCH_DONTKNOW)
-        aFont.SetPitch(aInfo.m_ePitch);
-
-    return aFont;
-}
-
-/** Implementation of KDE integration's main method.
-*/
-void KDE5SalFrame::UpdateSettings(AllSettings& rSettings)
-{
-    Qt5Frame::UpdateSettings(rSettings);
-
-    StyleSettings style(rSettings.GetStyleSettings());
-    bool bSetTitleFont = false;
-
-    // WM settings
-    /*KConfig *pConfig = KGlobal::config().data();
-    if ( pConfig )
-    {
-        const char *pKey;
-
-        {
-            KConfigGroup aWMGroup = pConfig->group( "WM" );
-
-            pKey = "titleFont";
-            if (aWMGroup.hasKey(pKey))
-            {
-                vcl::Font aFont = toFont(aWMGroup.readEntry(pKey, QFont()),
-                                         rSettings.GetUILanguageTag().getLocale());
-                style.SetTitleFont( aFont );
-                bSetTitleFont = true;
-            }
-        }
-
-        KConfigGroup aIconsGroup = pConfig->group("Icons");
-
-        pKey = "Theme";
-        if (aIconsGroup.hasKey(pKey))
-            style.SetPreferredIconTheme( readEntryUntranslated(&aIconsGroup, pKey));
-
-        //toolbar
-        pKey = "toolbarFont";
-        if (aIconsGroup.hasKey(pKey))
-        {
-            vcl::Font aFont = toFont(aIconsGroup.readEntry(pKey, QFont()),
-                                     rSettings.GetUILanguageTag().getLocale());
-            style.SetToolFont( aFont );
-        }
-    }*/
-
-    // Font
-    vcl::Font aFont = toFont(QApplication::font(), rSettings.GetUILanguageTag().getLocale());
-
-    style.BatchSetFonts(aFont, aFont);
-
-    aFont.SetWeight(WEIGHT_BOLD);
-    if (!bSetTitleFont)
-    {
-        style.SetTitleFont(aFont);
-    }
-    style.SetFloatTitleFont(aFont);
-    style.SetHelpFont(toFont(QToolTip::font(), rSettings.GetUILanguageTag().getLocale()));
-
-    int flash_time = QApplication::cursorFlashTime();
-    style.SetCursorBlinkTime(flash_time != 0 ? flash_time / 2 : STYLE_CURSOR_NOBLINKTIME);
-
-    // Menu
-    std::unique_ptr<QMenuBar> pMenuBar = std::make_unique<QMenuBar>();
-    aFont = toFont(pMenuBar->font(), rSettings.GetUILanguageTag().getLocale());
-    style.SetMenuFont(aFont);
-
-    rSettings.SetStyleSettings(style);
-}
-
-SalGraphics* KDE5SalFrame::AcquireGraphics()
-{
-    if (m_bGraphicsInUse)
-        return nullptr;
-
-    m_bGraphicsInUse = true;
-
-    if (!m_pKDE5Graphics.get())
-    {
-        m_pKDE5Graphics.reset(new Qt5SvpGraphics(this));
-        Qt5Frame::InitQt5SvpGraphics(m_pKDE5Graphics.get());
-    }
-
-    return m_pKDE5Graphics.get();
-}
-
-void KDE5SalFrame::ReleaseGraphics(SalGraphics* pSalGraph)
-{
-    (void)pSalGraph;
-    assert(pSalGraph == m_pKDE5Graphics.get());
-    m_bGraphicsInUse = false;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde5/KDE5SalFrame.hxx b/vcl/unx/kde5/KDE5SalFrame.hxx
deleted file mode 100644
index cf3874af7c8c..000000000000
--- a/vcl/unx/kde5/KDE5SalFrame.hxx
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <memory>
-
-#include <qt5/Qt5Frame.hxx>
-#include <qt5/Qt5SvpGraphics.hxx>
-
-class QWidget;
-
-class KDE5SalFrame : public Qt5Frame
-{
-private:
-    std::unique_ptr<Qt5SvpGraphics> m_pKDE5Graphics;
-    bool m_bGraphicsInUse;
-
-public:
-    KDE5SalFrame(KDE5SalFrame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo);
-
-    virtual SalGraphics* AcquireGraphics() override;
-    virtual void ReleaseGraphics(SalGraphics* pGraphics) override;
-    virtual void UpdateSettings(AllSettings& rSettings) override;
-
-    virtual LanguageType GetInputLanguage() override { return LANGUAGE_SYSTEM; }
-    virtual SalPointerState GetPointerState() override { return SalPointerState(); }
-    virtual KeyIndicatorState GetIndicatorState() override { return KeyIndicatorState(); }
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx
deleted file mode 100644
index b1b8eb59375f..000000000000
--- a/vcl/unx/kde5/KDE5SalInstance.cxx
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/config.h>
-
-#include <utility>
-
-#include <QtWidgets/QApplication>
-
-#include <sal/log.hxx>
-
-#include <Qt5Data.hxx>
-
-#include "KDE5FilePicker.hxx"
-#include "KDE5SalFrame.hxx"
-#include "KDE5SalInstance.hxx"
-
-using namespace com::sun::star;
-
-KDE5SalInstance::KDE5SalInstance(std::unique_ptr<QApplication>& pQApp)
-    : Qt5Instance(pQApp, true)
-{
-    ImplSVData* pSVData = ImplGetSVData();
-    pSVData->maAppData.mxToolkitName = OUString("kde5");
-}
-
-SalFrame* KDE5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nState)
-{
-    SalFrame* pRet(nullptr);
-    RunInMainThread(std::function([&pRet, pParent, nState]() {
-        pRet = new KDE5SalFrame(static_cast<KDE5SalFrame*>(pParent), nState, true);
-    }));
-    assert(pRet);
-    return pRet;
-}
-
-bool KDE5SalInstance::hasNativeFileSelection() const
-{
-    if (Application::GetDesktopEnvironment() == "KDE5")
-        return true;
-    return Qt5Instance::hasNativeFileSelection();
-}
-
-Qt5FilePicker*
-KDE5SalInstance::createPicker(css::uno::Reference<css::uno::XComponentContext> const& context,
-                              QFileDialog::FileMode eMode)
-{
-    if (!IsMainThread())
-    {
-        SolarMutexGuard g;
-        Qt5FilePicker* pPicker;
-        RunInMainThread(std::function([&, this]() { pPicker = createPicker(context, eMode); }));
-        assert(pPicker);
-        return pPicker;
-    }
-
-    // In order to insert custom controls, KDE5FilePicker currently relies on KFileWidget
-    // being used in the native file picker, which is only the case for KDE Plasma.
-    // Therefore, return the plain qt5 one in order to not lose custom controls.
-    if (Application::GetDesktopEnvironment() == "KDE5")
-        return new KDE5FilePicker(context, eMode);
-    return Qt5Instance::createPicker(context, eMode);
-}
-
-extern "C" {
-VCLPLUG_KDE5_PUBLIC SalInstance* create_SalInstance()
-{
-    std::unique_ptr<char* []> pFakeArgv;
-    std::unique_ptr<int> pFakeArgc;
-    std::vector<FreeableCStr> aFakeArgvFreeable;
-    Qt5Instance::AllocFakeCmdlineArgs(pFakeArgv, pFakeArgc, aFakeArgvFreeable);
-
-    std::unique_ptr<QApplication> pQApp
-        = Qt5Instance::CreateQApplication(*pFakeArgc, pFakeArgv.get());
-
-    KDE5SalInstance* pInstance = new KDE5SalInstance(pQApp);
-    pInstance->MoveFakeCmdlineArgs(pFakeArgv, pFakeArgc, aFakeArgvFreeable);
-
-    new Qt5Data(pInstance);
-
-    return pInstance;
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kde5/KDE5SalInstance.hxx b/vcl/unx/kde5/KDE5SalInstance.hxx
deleted file mode 100644
index 4215ec483308..000000000000
--- a/vcl/unx/kde5/KDE5SalInstance.hxx
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <qt5/Qt5Instance.hxx>
-
-class KDE5SalInstance final : public Qt5Instance
-{
-    bool hasNativeFileSelection() const override;
-    Qt5FilePicker* createPicker(css::uno::Reference<css::uno::XComponentContext> const& context,
-                                QFileDialog::FileMode) override;
-
-    SalFrame* CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) override;
-
-public:
-    explicit KDE5SalInstance(std::unique_ptr<QApplication>& pQApp);
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5FilePicker.cxx b/vcl/unx/kf5/KF5FilePicker.cxx
new file mode 100644
index 000000000000..366ca89ffa54
--- /dev/null
+++ b/vcl/unx/kf5/KF5FilePicker.cxx
@@ -0,0 +1,210 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "KF5FilePicker.hxx"
+#include <KF5FilePicker.moc>
+
+#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
+#include <cppuhelper/supportsservice.hxx>
+#include <osl/mutex.hxx>
+
+#include <qt5/Qt5Instance.hxx>
+
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QWidget>
+#include <KFileWidget>
+
+using namespace ::com::sun::star;
+using ::com::sun::star::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION;
+
+namespace
+{
+uno::Sequence<OUString> FilePicker_getSupportedServiceNames()
+{
+    uno::Sequence<OUString> aRet(4);
+    aRet[0] = "com.sun.star.ui.dialogs.FilePicker";
+    aRet[1] = "com.sun.star.ui.dialogs.SystemFilePicker";
+    aRet[2] = "com.sun.star.ui.dialogs.KF5FilePicker";
+    aRet[3] = "com.sun.star.ui.dialogs.KF5FolderPicker";
+    return aRet;
+}
+}
+
+// KF5FilePicker
+
+KF5FilePicker::KF5FilePicker(css::uno::Reference<css::uno::XComponentContext> const& context,
+                             QFileDialog::FileMode eMode)
+    // Native kf5 filepicker does not add file extension automatically
+    : Qt5FilePicker(context, eMode, true, true)
+    , _layout(new QGridLayout(m_pExtraControls))
+    , allowRemoteUrls(false)
+{
+    // use native dialog
+    m_pFileDialog->setOption(QFileDialog::DontUseNativeDialog, false);
+
+    // only columns 0 and 1 are used by controls (s. Qt5FilePicker::addCustomControl);
+    // set stretch for (unused) column 2 in order for the controls to only take the space
+    // they actually need and avoid empty space in between
+    _layout->setColumnStretch(2, 1);
+
+    // set layout so custom widgets show up in our native file dialog
+    setCustomControlWidgetLayout(_layout);
+
+    m_pFileDialog->setSupportedSchemes({
+        QStringLiteral("file"), QStringLiteral("ftp"), QStringLiteral("http"),
+        QStringLiteral("https"), QStringLiteral("webdav"), QStringLiteral("webdavs"),
+        QStringLiteral("smb"),
+        QStringLiteral(""), // this makes removable devices shown
+    });
+
+    // used to set the custom controls
+    qApp->installEventFilter(this);
+}
+
+sal_Int16 SAL_CALL KF5FilePicker::execute()
+{
+    SolarMutexGuard g;
+    auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance));
+    assert(pSalInst);
+    if (!pSalInst->IsMainThread())
+    {
+        sal_Int16 ret;
+        pSalInst->RunInMainThread([&ret, this] { ret = execute(); });
+        return ret;
+    }
+
+    if (!m_aNamedFilterList.isEmpty())
+        m_pFileDialog->setNameFilters(m_aNamedFilterList);
+    if (!m_aCurrentFilter.isEmpty())
+        m_pFileDialog->selectNameFilter(m_aCurrentFilter);
+
+    m_pFileDialog->show();
+    //block and wait for user input
+    return m_pFileDialog->exec() == QFileDialog::Accepted ? 1 : 0;
+}
+
+// XFilePickerControlAccess
+void SAL_CALL KF5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction,
+                                      const uno::Any& value)
+{
+    if (CHECKBOX_AUTOEXTENSION == controlId)
+        // We ignore this one and rely on QFileDialog to provide the functionality
+        return;
+
+    Qt5FilePicker::setValue(controlId, nControlAction, value);
+}
+
+uno::Any SAL_CALL KF5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction)
+{
+    SolarMutexGuard g;
+    auto* pSalInst(static_cast<Qt5Instance*>(GetSalData()->m_pInstance));
+    assert(pSalInst);
+    if (!pSalInst->IsMainThread())
+    {
+        uno::Any ret;
+        pSalInst->RunInMainThread([&ret, this, controlId, nControlAction]() {
+            ret = getValue(controlId, nControlAction);
+        });
+        return ret;
+    }
+
+    if (CHECKBOX_AUTOEXTENSION == controlId)
+        // We ignore this one and rely on QFileDialog to provide the function.
+        // Always return false, to pretend we do not support this, otherwise
+        // LO core would try to be smart and cut the extension in some places,
+        // interfering with QFileDialog's handling of it. QFileDialog also
+        // saves the value of the setting, so LO core is not needed for that either.
+        return uno::Any(false);
+
+    return Qt5FilePicker::getValue(controlId, nControlAction);
+}
+
+void SAL_CALL KF5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable)
+{
+    if (CHECKBOX_AUTOEXTENSION == controlId)
+        // We ignore this one and rely on QFileDialog to provide the functionality
+        return;
+
+    Qt5FilePicker::enableControl(controlId, enable);
+}
+
+void SAL_CALL KF5FilePicker::setLabel(sal_Int16 controlId, const OUString& label)
+{
+    if (CHECKBOX_AUTOEXTENSION == controlId)
+        // We ignore this one and rely on QFileDialog to provide the functionality
+        return;
+
+    Qt5FilePicker::setLabel(controlId, label);
+}
+
+OUString SAL_CALL KF5FilePicker::getLabel(sal_Int16 controlId)
+{
+    // We ignore this one and rely on QFileDialog to provide the functionality
+    if (CHECKBOX_AUTOEXTENSION == controlId)
+        return "";
+
+    return Qt5FilePicker::getLabel(controlId);
+}
+
+void KF5FilePicker::addCustomControl(sal_Int16 controlId)
+{
+    // native kf5 filepicker has its own autoextension checkbox,
+    // therefore avoid adding yet another one
+    if (controlId == CHECKBOX_AUTOEXTENSION)
+        return;
+
+    Qt5FilePicker::addCustomControl(controlId);
+}
+
+// XServiceInfo
+OUString SAL_CALL KF5FilePicker::getImplementationName()
+{
+    return OUString("com.sun.star.ui.dialogs.KF5FilePicker");
+}
+
+sal_Bool SAL_CALL KF5FilePicker::supportsService(const OUString& ServiceName)
+{
+    return cppu::supportsService(this, ServiceName);
+}
+
+uno::Sequence<OUString> SAL_CALL KF5FilePicker::getSupportedServiceNames()
+{
+    return FilePicker_getSupportedServiceNames();
+}
+
+bool KF5FilePicker::eventFilter(QObject* o, QEvent* e)
+{
+    if (e->type() == QEvent::Show && o->isWidgetType())
+    {
+        auto* w = static_cast<QWidget*>(o);
+        if (!w->parentWidget() && w->isModal())
+        {
+            if (auto* fileWidget = w->findChild<KFileWidget*>({}, Qt::FindDirectChildrenOnly))
+            {
+                fileWidget->setCustomWidget(m_pExtraControls);
+                // remove event filter again; the only purpose was to set the custom widget here
+                qApp->removeEventFilter(this);
+            }
+        }
+    }
+    return QObject::eventFilter(o, e);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5FilePicker.hxx b/vcl/unx/kf5/KF5FilePicker.hxx
new file mode 100644
index 000000000000..6bfc7ee96077
--- /dev/null
+++ b/vcl/unx/kf5/KF5FilePicker.hxx
@@ -0,0 +1,65 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <Qt5FilePicker.hxx>
+
+class QGridLayout;
+
+class KF5FilePicker : public Qt5FilePicker
+{
+    Q_OBJECT
+
+protected:
+    //layout for extra custom controls
+    QGridLayout* _layout;
+
+    bool allowRemoteUrls;
+
+public:
+    explicit KF5FilePicker(css::uno::Reference<css::uno::XComponentContext> const& context,
+                           QFileDialog::FileMode);
+
+    // XExecutableDialog functions
+    virtual sal_Int16 SAL_CALL execute() override;
+
+    // XFilePickerControlAccess functions
+    virtual void SAL_CALL setValue(sal_Int16 nControlId, sal_Int16 nControlAction,
+                                   const css::uno::Any& rValue) override;
+    virtual css::uno::Any SAL_CALL getValue(sal_Int16 nControlId,
+                                            sal_Int16 nControlAction) override;
+    virtual void SAL_CALL enableControl(sal_Int16 nControlId, sal_Bool bEnable) override;
+    virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) override;
+    virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) override;
+
+    // XServiceInfo
+    virtual OUString SAL_CALL getImplementationName() override;
+    virtual sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+
+private:
+    //add a custom control widget to the file dialog
+    void addCustomControl(sal_Int16 controlId) override;
+
+protected:
+    bool eventFilter(QObject* watched, QEvent* event) override;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5SalFrame.cxx b/vcl/unx/kf5/KF5SalFrame.cxx
new file mode 100644
index 000000000000..a212759aeb91
--- /dev/null
+++ b/vcl/unx/kf5/KF5SalFrame.cxx
@@ -0,0 +1,222 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <memory>
+#include <QtGui/QColor>
+#include <QtWidgets/QStyle>
+#include <QtWidgets/QToolTip>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QMenuBar>
+
+#include <KConfig>
+#include <KConfigGroup>
+#include <KSharedConfig>
+
+#include "KF5SalFrame.hxx"
+
+#include <tools/color.hxx>
+
+#include <vcl/font.hxx>
+#include <vcl/settings.hxx>
+#include <sal/log.hxx>
+
+#include <unx/fontmanager.hxx>
+
+#include <svdata.hxx>
+
+#include <boost/optional.hpp>
+
+KF5SalFrame::KF5SalFrame(KF5SalFrame* pParent, SalFrameStyleFlags nState, bool bUseCairo)
+    : Qt5Frame(pParent, nState, bUseCairo)
+    , m_bGraphicsInUse(false)
+{
+}
+
+/** Helper function to add information to Font from QFont.
+
+    Mostly grabbed from the Gtk+ vclplug (salnativewidgets-gtk.cxx).
+*/
+static vcl::Font toFont(const QFont& rQFont, const css::lang::Locale& rLocale)
+{
+    psp::FastPrintFontInfo aInfo;
+    QFontInfo qFontInfo(rQFont);
+
+    // set family name
+    aInfo.m_aFamilyName = OUString(static_cast<const char*>(rQFont.family().toUtf8()),
+                                   strlen(static_cast<const char*>(rQFont.family().toUtf8())),
+                                   RTL_TEXTENCODING_UTF8);
+
+    // set italic
+    aInfo.m_eItalic = (qFontInfo.italic() ? ITALIC_NORMAL : ITALIC_NONE);
+
+    // set weight
+    int nWeight = qFontInfo.weight();
+    if (nWeight <= QFont::Light)
+        aInfo.m_eWeight = WEIGHT_LIGHT;
+    else if (nWeight <= QFont::Normal)
+        aInfo.m_eWeight = WEIGHT_NORMAL;
+    else if (nWeight <= QFont::DemiBold)
+        aInfo.m_eWeight = WEIGHT_SEMIBOLD;
+    else if (nWeight <= QFont::Bold)
+        aInfo.m_eWeight = WEIGHT_BOLD;
+    else
+        aInfo.m_eWeight = WEIGHT_ULTRABOLD;
+
+    // set width
+    int nStretch = rQFont.stretch();
+    if (nStretch == 0) // QFont::AnyStretch since Qt 5.8
+        aInfo.m_eWidth = WIDTH_DONTKNOW;
+    else if (nStretch <= QFont::UltraCondensed)
+        aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;
+    else if (nStretch <= QFont::ExtraCondensed)
+        aInfo.m_eWidth = WIDTH_EXTRA_CONDENSED;
+    else if (nStretch <= QFont::Condensed)
+        aInfo.m_eWidth = WIDTH_CONDENSED;
+    else if (nStretch <= QFont::SemiCondensed)
+        aInfo.m_eWidth = WIDTH_SEMI_CONDENSED;
+    else if (nStretch <= QFont::Unstretched)
+        aInfo.m_eWidth = WIDTH_NORMAL;
+    else if (nStretch <= QFont::SemiExpanded)
+        aInfo.m_eWidth = WIDTH_SEMI_EXPANDED;
+    else if (nStretch <= QFont::Expanded)
+        aInfo.m_eWidth = WIDTH_EXPANDED;
+    else if (nStretch <= QFont::ExtraExpanded)
+        aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;
+    else
+        aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;
+
+    SAL_INFO("vcl.kf5", "font name BEFORE system match: \"" << aInfo.m_aFamilyName << "\"");
+
+    // match font to e.g. resolve "Sans"
+    psp::PrintFontManager::get().matchFont(aInfo, rLocale);
+
+    SAL_INFO("vcl.kf5", "font match " << (aInfo.m_nID != 0 ? "succeeded" : "failed")
+                                      << ", name AFTER: \"" << aInfo.m_aFamilyName << "\"");
+
+    // font height
+    int nPointHeight = qFontInfo.pointSize();
+    if (nPointHeight <= 0)
+        nPointHeight = rQFont.pointSize();
+
+    // Create the font
+    vcl::Font aFont(aInfo.m_aFamilyName, Size(0, nPointHeight));
+    if (aInfo.m_eWeight != WEIGHT_DONTKNOW)
+        aFont.SetWeight(aInfo.m_eWeight);
+    if (aInfo.m_eWidth != WIDTH_DONTKNOW)
+        aFont.SetWidthType(aInfo.m_eWidth);
+    if (aInfo.m_eItalic != ITALIC_DONTKNOW)
+        aFont.SetItalic(aInfo.m_eItalic);
+    if (aInfo.m_ePitch != PITCH_DONTKNOW)
+        aFont.SetPitch(aInfo.m_ePitch);
+
+    return aFont;
+}
+
+/** Implementation of KDE integration's main method.
+*/
+void KF5SalFrame::UpdateSettings(AllSettings& rSettings)
+{
+    Qt5Frame::UpdateSettings(rSettings);
+
+    StyleSettings style(rSettings.GetStyleSettings());
+    bool bSetTitleFont = false;
+
+    // WM settings
+    /*KConfig *pConfig = KGlobal::config().data();
+    if ( pConfig )
+    {
+        const char *pKey;
+
+        {
+            KConfigGroup aWMGroup = pConfig->group( "WM" );
+
+            pKey = "titleFont";
+            if (aWMGroup.hasKey(pKey))
+            {
+                vcl::Font aFont = toFont(aWMGroup.readEntry(pKey, QFont()),
+                                         rSettings.GetUILanguageTag().getLocale());
+                style.SetTitleFont( aFont );
+                bSetTitleFont = true;
+            }
+        }
+
+        KConfigGroup aIconsGroup = pConfig->group("Icons");
+
+        pKey = "Theme";
+        if (aIconsGroup.hasKey(pKey))
+            style.SetPreferredIconTheme( readEntryUntranslated(&aIconsGroup, pKey));
+
+        //toolbar
+        pKey = "toolbarFont";
+        if (aIconsGroup.hasKey(pKey))
+        {
+            vcl::Font aFont = toFont(aIconsGroup.readEntry(pKey, QFont()),
+                                     rSettings.GetUILanguageTag().getLocale());
+            style.SetToolFont( aFont );
+        }
+    }*/
+
+    // Font
+    vcl::Font aFont = toFont(QApplication::font(), rSettings.GetUILanguageTag().getLocale());
+
+    style.BatchSetFonts(aFont, aFont);
+
+    aFont.SetWeight(WEIGHT_BOLD);
+    if (!bSetTitleFont)
+    {
+        style.SetTitleFont(aFont);
+    }
+    style.SetFloatTitleFont(aFont);
+    style.SetHelpFont(toFont(QToolTip::font(), rSettings.GetUILanguageTag().getLocale()));
+
+    int flash_time = QApplication::cursorFlashTime();
+    style.SetCursorBlinkTime(flash_time != 0 ? flash_time / 2 : STYLE_CURSOR_NOBLINKTIME);
+
+    // Menu
+    std::unique_ptr<QMenuBar> pMenuBar = std::make_unique<QMenuBar>();
+    aFont = toFont(pMenuBar->font(), rSettings.GetUILanguageTag().getLocale());
+    style.SetMenuFont(aFont);
+
+    rSettings.SetStyleSettings(style);
+}
+
+SalGraphics* KF5SalFrame::AcquireGraphics()
+{
+    if (m_bGraphicsInUse)
+        return nullptr;
+
+    m_bGraphicsInUse = true;
+
+    if (!m_pKF5Graphics.get())
+    {
+        m_pKF5Graphics.reset(new Qt5SvpGraphics(this));
+        Qt5Frame::InitQt5SvpGraphics(m_pKF5Graphics.get());
+    }
+
+    return m_pKF5Graphics.get();
+}
+
+void KF5SalFrame::ReleaseGraphics(SalGraphics* pSalGraph)
+{
+    (void)pSalGraph;
+    assert(pSalGraph == m_pKF5Graphics.get());
+    m_bGraphicsInUse = false;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5SalFrame.hxx b/vcl/unx/kf5/KF5SalFrame.hxx
new file mode 100644
index 000000000000..091a5b019ca7
--- /dev/null
+++ b/vcl/unx/kf5/KF5SalFrame.hxx
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <memory>
+
+#include <qt5/Qt5Frame.hxx>
+#include <qt5/Qt5SvpGraphics.hxx>
+
+class QWidget;
+
+class KF5SalFrame : public Qt5Frame
+{
+private:
+    std::unique_ptr<Qt5SvpGraphics> m_pKF5Graphics;
+    bool m_bGraphicsInUse;
+
+public:
+    KF5SalFrame(KF5SalFrame* pParent, SalFrameStyleFlags nStyle, bool bUseCairo);
+
+    virtual SalGraphics* AcquireGraphics() override;
+    virtual void ReleaseGraphics(SalGraphics* pGraphics) override;
+    virtual void UpdateSettings(AllSettings& rSettings) override;
+
+    virtual LanguageType GetInputLanguage() override { return LANGUAGE_SYSTEM; }
+    virtual SalPointerState GetPointerState() override { return SalPointerState(); }
+    virtual KeyIndicatorState GetIndicatorState() override { return KeyIndicatorState(); }
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5SalInstance.cxx b/vcl/unx/kf5/KF5SalInstance.cxx
new file mode 100644
index 000000000000..da4906a70a49
--- /dev/null
+++ b/vcl/unx/kf5/KF5SalInstance.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <utility>
+
+#include <QtWidgets/QApplication>
+
+#include <sal/log.hxx>
+
+#include <Qt5Data.hxx>
+
+#include "KF5FilePicker.hxx"
+#include "KF5SalFrame.hxx"
+#include "KF5SalInstance.hxx"
+
+using namespace com::sun::star;
+
+KF5SalInstance::KF5SalInstance(std::unique_ptr<QApplication>& pQApp)
+    : Qt5Instance(pQApp, true)
+{
+    ImplSVData* pSVData = ImplGetSVData();
+    pSVData->maAppData.mxToolkitName = OUString("kf5");
+}
+
+SalFrame* KF5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nState)
+{
+    SalFrame* pRet(nullptr);
+    RunInMainThread(std::function([&pRet, pParent, nState]() {
+        pRet = new KF5SalFrame(static_cast<KF5SalFrame*>(pParent), nState, true);
+    }));
+    assert(pRet);
+    return pRet;
+}
+
+bool KF5SalInstance::hasNativeFileSelection() const
+{
+    if (Application::GetDesktopEnvironment() == "PLASMA5")
+        return true;
+    return Qt5Instance::hasNativeFileSelection();
+}
+
+Qt5FilePicker*
+KF5SalInstance::createPicker(css::uno::Reference<css::uno::XComponentContext> const& context,
+                             QFileDialog::FileMode eMode)
+{
+    if (!IsMainThread())
+    {
+        SolarMutexGuard g;
+        Qt5FilePicker* pPicker;
+        RunInMainThread(std::function([&, this]() { pPicker = createPicker(context, eMode); }));
+        assert(pPicker);
+        return pPicker;
+    }
+
+    // In order to insert custom controls, KF5FilePicker currently relies on KFileWidget
+    // being used in the native file picker, which is only the case for KDE Plasma.
+    // Therefore, return the plain qt5 one in order to not lose custom controls.
+    if (Application::GetDesktopEnvironment() == "PLASMA5")
+        return new KF5FilePicker(context, eMode);
+    return Qt5Instance::createPicker(context, eMode);
+}
+
+extern "C" {
+VCLPLUG_KF5_PUBLIC SalInstance* create_SalInstance()
+{
+    std::unique_ptr<char* []> pFakeArgv;
+    std::unique_ptr<int> pFakeArgc;
+    std::vector<FreeableCStr> aFakeArgvFreeable;
+    Qt5Instance::AllocFakeCmdlineArgs(pFakeArgv, pFakeArgc, aFakeArgvFreeable);
+
+    std::unique_ptr<QApplication> pQApp
+        = Qt5Instance::CreateQApplication(*pFakeArgc, pFakeArgv.get());
+
+    KF5SalInstance* pInstance = new KF5SalInstance(pQApp);
+    pInstance->MoveFakeCmdlineArgs(pFakeArgv, pFakeArgc, aFakeArgvFreeable);
+
+    new Qt5Data(pInstance);
+
+    return pInstance;
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/kf5/KF5SalInstance.hxx b/vcl/unx/kf5/KF5SalInstance.hxx
new file mode 100644
index 000000000000..5dd306da5231
--- /dev/null
+++ b/vcl/unx/kf5/KF5SalInstance.hxx
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <qt5/Qt5Instance.hxx>
+
+class KF5SalInstance final : public Qt5Instance
+{
+    bool hasNativeFileSelection() const override;
+    Qt5FilePicker* createPicker(css::uno::Reference<css::uno::XComponentContext> const& context,
+                                QFileDialog::FileMode) override;
+
+    SalFrame* CreateFrame(SalFrame* pParent, SalFrameStyleFlags nStyle) override;
+
+public:
+    explicit KF5SalInstance(std::unique_ptr<QApplication>& pQApp);
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
-- 
cgit 

eter by accident

Change-Id: Ief805410b3f7035e012e229e77f92d5832430f58
Reviewed-on: https://gerrit.libreoffice.org/11916
Reviewed-by: Noel Grandin &lt;noelgrandin@gmail.com&gt;
Tested-by: Noel Grandin &lt;noelgrandin@gmail.com&gt;


</td></tr>
<tr class='logheader'><td><span title='2014-10-11 15:14:32 +0000'>2014-10-11</span></td><td class='logsubject'><a href='/cgit/lo/core/commit/sfx2/source/dialog/titledockwin.cxx?h=cd-5.3-27&amp;id=cb7ede2d9970a4d162dc71922f578922c0d6235a'>convert vcl StateChangedType to enum class</a><span class='decoration'></span></td><td>Noel Grandin</td></tr>
<tr class='nohover-highlight'><td/><td colspan='3' class='logmsg'>
Change-Id: Ifa46523619ae7fb8d112525b8df594836e51bb8f
Reviewed-on: https://gerrit.libreoffice.org/11843
Tested-by: LibreOffice gerrit bot &lt;gerrit@libreoffice.org&gt;
Reviewed-by: Noel Grandin &lt;noelgrandin@gmail.com&gt;


</td></tr>