diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2023-06-22 08:48:05 +0200 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2023-06-22 22:16:11 +0200 |
commit | 720bf6ac8612c32942bb059f9086ee86c2963bb5 (patch) | |
tree | d175788a07888a6f51adb22be1042409a2c29b86 | |
parent | 8b0e1f2a914d672182d585d8cb2d4a815e88977e (diff) |
kf6: Add a kf6 VCL plugin
Add a "kf6" VCL plugin that uses the KF6 (KDE Frameworks 6)
libraries to provide a native KDE/Plasma file chooser,
just like the kf5 VCL plugin does for KF5.
Building the plugin is disabled by default and can be enabled by
autogen option '--enable-kf6'.
Selecting the VCL plugin can be done by starting LO
with environment variable 'SAL_USE_VCLPLUGIN=kf6' set.
The kf6 VCL plugin reuses the kf5 VCL plugin code.
(The kf6 headers and sources for now just `#include`
the kf5 ones.)
This was quickly tested on KDE Neon unstable,
which provides a daily snapshot of Plasma 6 and the KF6
libraries.
(Regarding a potential release date, [1] mentions:
"Plasma 6 is built on top of Qt 6 and is
tentatively planned to be released in late 2023 or early 2024.")
[1] https://community.kde.org/Plasma/Plasma_6
Change-Id: I4c2b7e3be8e60f1d8cf60119f6f3f642b71349f5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153438
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
-rw-r--r-- | Repository.mk | 1 | ||||
-rw-r--r-- | RepositoryExternal.mk | 24 | ||||
-rw-r--r-- | config_host.mk.in | 3 | ||||
-rw-r--r-- | config_host/config_vclplug.h.in | 1 | ||||
-rw-r--r-- | configure.ac | 101 | ||||
-rw-r--r-- | vcl/CustomTarget_kf6_moc.mk | 29 | ||||
-rw-r--r-- | vcl/Library_vclplug_kf6.mk | 86 | ||||
-rw-r--r-- | vcl/Module_vcl.mk | 8 | ||||
-rw-r--r-- | vcl/source/app/salplug.cxx | 4 | ||||
-rw-r--r-- | vcl/unx/kf6/KFFilePicker.cxx | 12 | ||||
-rw-r--r-- | vcl/unx/kf6/KFFilePicker.hxx | 12 | ||||
-rw-r--r-- | vcl/unx/kf6/KFSalInstance.cxx | 12 | ||||
-rw-r--r-- | vcl/unx/kf6/KFSalInstance.hxx | 12 |
13 files changed, 303 insertions, 2 deletions
diff --git a/Repository.mk b/Repository.mk index 76e91e62c94b..22e1da82d263 100644 --- a/Repository.mk +++ b/Repository.mk @@ -318,6 +318,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,OOOLIBS,kde, \ $(eval $(call gb_Helper_register_plugins_for_install,OOOLIBS,$(gb_haiku_or_kde), \ $(if $(ENABLE_KF5),vclplug_kf5) \ + $(if $(ENABLE_KF6),vclplug_kf6) \ $(if $(ENABLE_QT5),vclplug_qt5) \ $(if $(ENABLE_QT6),vclplug_qt6) \ $(if $(ENABLE_GTK3_KDE5),vclplug_gtk3_kde5) \ diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index b105e1d755d0..0d70c7e966fb 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -3117,7 +3117,31 @@ endef endif # ENABLE_KF5 +ifneq (,$(filter TRUE,$(ENABLE_KF6))) +define gb_LinkTarget__use_kf6 +$(call gb_LinkTarget_set_include,$(1),\ + $(subst -isystem/,-isystem /,$(filter -I% -isystem%,$(subst -isystem /,-isystem/,$(KF6_CFLAGS)))) \ + $$(INCLUDE) \ +) + +$(call gb_LinkTarget_add_cxxflags,$(1),\ + $(filter-out -I% -isystem%,$(subst -isystem /,-isystem/,$(KF6_CFLAGS))) \ +) + +$(call gb_LinkTarget_add_libs,$(1),\ + $(KF6_LIBS) \ +) + +endef + +else # !ENABLE_KF6 + +define gb_LinkTarget__use_kf6 + +endef + +endif # ENABLE_KF6 ifneq (,$(filter TRUE,$(ENABLE_QT5) $(ENABLE_GTK3_KDE5))) diff --git a/config_host.mk.in b/config_host.mk.in index 0d857cf6043c..0ab0e2f747c4 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -203,6 +203,7 @@ export ENABLE_POPPLER=@ENABLE_POPPLER@ export ENABLE_QT5=@ENABLE_QT5@ export ENABLE_QT6=@ENABLE_QT6@ export ENABLE_KF5=@ENABLE_KF5@ +export ENABLE_KF6=@ENABLE_KF6@ export ENABLE_GTK3_KDE5=@ENABLE_GTK3_KDE5@ export ENABLE_RANDR=@ENABLE_RANDR@ export ENABLE_RELEASE_BUILD=@ENABLE_RELEASE_BUILD@ @@ -363,6 +364,8 @@ export JQ=@JQ@ export JVM_ONE_PATH_CHECK=@JVM_ONE_PATH_CHECK@ export KF5_CFLAGS=$(gb_SPACE)@KF5_CFLAGS@ export KF5_LIBS=$(gb_SPACE)@KF5_LIBS@ +export KF6_CFLAGS=$(gb_SPACE)@KF6_CFLAGS@ +export KF6_LIBS=$(gb_SPACE)@KF6_LIBS@ export KRB5_LIBS=@KRB5_LIBS@ export LCMS2_CFLAGS=$(gb_SPACE)@LCMS2_CFLAGS@ export LCMS2_LIBS=$(gb_SPACE)@LCMS2_LIBS@ diff --git a/config_host/config_vclplug.h.in b/config_host/config_vclplug.h.in index eeb43a1a8608..63dacb1bc10e 100644 --- a/config_host/config_vclplug.h.in +++ b/config_host/config_vclplug.h.in @@ -20,6 +20,7 @@ Settings about which desktops have support enabled. #define ENABLE_GTK3_KDE5 0 #define ENABLE_HEADLESS 0 #define ENABLE_KF5 0 +#define ENABLE_KF6 0 #define ENABLE_QT5 0 #define ENABLE_QT6 0 diff --git a/configure.ac b/configure.ac index cd5338c42dd2..04dcacc85a66 100644 --- a/configure.ac +++ b/configure.ac @@ -1140,6 +1140,7 @@ haiku*) test_gtk3=no test_gtk3_kde5=no test_kf5=yes + test_kf6=yes enable_odk=no enable_coinmp=no enable_pdfium=no @@ -1186,6 +1187,7 @@ test "${test_gstreamer_1_0+set}" = set || test_gstreamer_1_0="$using_x11" test "${test_gtk3+set}" = set || test_gtk3="$using_x11" test "${test_gtk4+set}" = set || test_gtk4="$using_x11" test "${test_kf5+set}" = set || test_kf5="$using_x11" +test "${test_kf6+set}" = set || test_kf6="$using_x11" # don't handle test_qt5, so it can disable test_kf5 later test "${test_qt6+set}" = set || test_qt6="$using_x11" test "${test_randr+set}" = set || test_randr="$using_x11" @@ -1217,6 +1219,7 @@ disable_x11_tests() test_gtk3=no test_gtk4=no test_kf5=no + test_kf6=no test_qt5=no test_qt6=no test_randr=no @@ -1769,6 +1772,13 @@ AC_ARG_ENABLE(kf5, KF5 are available.]), ,) +AC_ARG_ENABLE(kf6, + AS_HELP_STRING([--enable-kf6], + [Determines whether to use KF6 vclplug on platforms where Qt6 and + KF6 are available.]), +,) + + AC_ARG_ENABLE(gtk3_kde5, AS_HELP_STRING([--enable-gtk3-kde5], [Determines whether to use Gtk3 vclplug with KF5 file dialogs on @@ -6034,6 +6044,15 @@ if test "$test_kf5" = "yes" -a "$enable_kf5" = "yes"; then fi fi +if test "$test_kf6" = "yes" -a "$enable_kf6" = "yes"; then + if test "$enable_qt6" = "no"; then + AC_MSG_ERROR([KF6 support depends on QT6, so it conflicts with --disable-qt6]) + else + enable_qt6=yes + fi +fi + + AC_MSG_CHECKING([whether to build the pagein binaries for oosplash]) if test "${enable_pagein}" != no -a -z "$DISABLE_DYNLOADING"; then AC_MSG_RESULT([yes]) @@ -11650,6 +11669,7 @@ libo_ENABLE_VCLPLUG([gtk3]) libo_ENABLE_VCLPLUG([gtk3_kde5]) libo_ENABLE_VCLPLUG([gtk4]) libo_ENABLE_VCLPLUG([kf5]) +libo_ENABLE_VCLPLUG([kf6]) libo_ENABLE_VCLPLUG([qt5]) libo_ENABLE_VCLPLUG([qt6]) @@ -12849,7 +12869,7 @@ AC_SUBST(ENABLE_SCRIPTING_JAVASCRIPT) AC_SUBST(SYSTEM_RHINO) AC_SUBST(RHINO_JAR) -# This is only used in Qt5/Qt6/KF5 checks to determine if /usr/lib64 +# This is only used in Qt5/Qt6/KF5/KF6 checks to determine if /usr/lib64 # paths should be added to library search path. So lets put all 64-bit # platforms there. supports_multilib= @@ -13034,7 +13054,8 @@ QT6_LIBS="" QMAKE6="qmake" MOC6="moc" QT6_PLATFORMS_SRCDIR="" -if test \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \) +if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \) -o \ + \( "$test_qt6" = "yes" -a "$ENABLE_QT6" = "TRUE" \) then qt6_incdirs="$QT6INC /usr/include/qt6 /usr/include $x_includes" qt6_libdirs="$QT6LIB /usr/lib/qt6 /usr/lib $x_libraries" @@ -13244,6 +13265,82 @@ AC_SUBST(KF5_CFLAGS) AC_SUBST(KF5_LIBS) dnl =================================================================== +dnl KF6 Integration +dnl =================================================================== + +KF6_CFLAGS="" +KF6_LIBS="" +if test \( "$test_kf6" = "yes" -a "$ENABLE_KF6" = "TRUE" \) +then + if test "$OS" = "HAIKU"; then + haiku_arch="`echo $RTL_ARCH | tr X x`" + kf6_haiku_incdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_HEADERS_DIRECTORY`" + kf6_haiku_libdirs="`findpaths -c ' ' -a $haiku_arch B_FIND_PATH_DEVELOP_LIB_DIRECTORY`" + fi + + kf6_incdirs="$KF6INC /usr/include $kf6_haiku_incdirs $x_includes" + kf6_libdirs="$KF6LIB /usr/lib /usr/lib/kf6 /usr/lib/kf6/devel $kf6_haiku_libdirs $x_libraries" + if test -n "$supports_multilib"; then + kf6_libdirs="$kf6_libdirs /usr/lib64 /usr/lib64/kf6 /usr/lib64/kf6/devel" + fi + + kf6_test_include="KF6/KIOFileWidgets/KFileWidget" + kf6_test_library="libKF6KIOFileWidgets.so" + kf6_libdirs="$qt6_libdir $kf6_libdirs" + + dnl Check for KF6 headers + AC_MSG_CHECKING([for KF6 headers]) + kf6_incdir="no" + for kf6_check in $kf6_incdirs; do + if test -r "$kf6_check/$kf6_test_include"; then + kf6_incdir="$kf6_check/KF6" + break + fi + done + AC_MSG_RESULT([$kf6_incdir]) + if test "x$kf6_incdir" = "xno"; then + AC_MSG_ERROR([KF6 headers not found. Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".]) + fi + + dnl Check for KF6 libraries + AC_MSG_CHECKING([for KF6 libraries]) + kf6_libdir="no" + for kf6_check in $kf6_libdirs; do + if test -r "$kf6_check/$kf6_test_library"; then + kf6_libdir="$kf6_check" + break + fi + done + + AC_MSG_RESULT([$kf6_libdir]) + if test "x$kf6_libdir" = "xno"; then + AC_MSG_ERROR([KF6 libraries not found. Please specify the root of your KF6 installation by exporting KF6DIR before running "configure".]) + fi + + KF6_CFLAGS="-I$kf6_incdir -I$kf6_incdir/KCoreAddons -I$kf6_incdir/KI18n -I$kf6_incdir/KConfigCore -I$kf6_incdir/KWindowSystem -I$kf6_incdir/KIO -I$kf6_incdir/KIOCore -I$kf6_incdir/KIOWidgets -I$kf6_incdir/KIOFileWidgets -I$qt6_incdir -I$qt6_incdir/QtCore -I$qt6_incdir/QtGui -I$qt6_incdir/QtWidgets -I$qt6_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT -DQT_NO_VERSION_TAGGING" + KF6_LIBS="-L$kf6_libdir -lKF6CoreAddons -lKF6I18n -lKF6ConfigCore -lKF6WindowSystem -lKF6KIOCore -lKF6KIOWidgets -lKF6KIOFileWidgets -L$qt6_libdir -lQt6Core -lQt6Gui -lQt6Widgets -lQt6Network" + KF6_CFLAGS=$(printf '%s' "$KF6_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") + + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $KF6_CFLAGS" + dnl KF6 development version as of 2023-06 uses version number 5.240 + AC_MSG_CHECKING([whether KDE is >= 5.240]) + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <kcoreaddons_version.h> + +int main(int argc, char **argv) { + if (KCOREADDONS_VERSION_MAJOR == 6 || (KCOREADDONS_VERSION_MAJOR == 5 && KCOREADDONS_VERSION_MINOR >= 240)) return 0; + else return 1; +} + ]])],[AC_MSG_RESULT([yes])],[AC_MSG_ERROR([KDE version too old])],[]) + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) +fi +AC_SUBST(KF6_CFLAGS) +AC_SUBST(KF6_LIBS) + +dnl =================================================================== dnl Test whether to include Evolution 2 support dnl =================================================================== AC_MSG_CHECKING([whether to enable evolution 2 support]) diff --git a/vcl/CustomTarget_kf6_moc.mk b/vcl/CustomTarget_kf6_moc.mk new file mode 100644 index 000000000000..ba0f514cd81a --- /dev/null +++ b/vcl/CustomTarget_kf6_moc.mk @@ -0,0 +1,29 @@ +# -*- 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/kf6)) + +$(call gb_CustomTarget_get_target,vcl/unx/kf6) : \ + $(call gb_CustomTarget_get_workdir,vcl/unx/kf6)/KFFilePicker.moc + +# For now, the headers in vcl/unx/kf6 just '#include' the ones +# in 'vcl/unx/kf5'. +# Since moc does not process classes from the included headers, +# it needs to be run on the headers in the kf5 dir. +# That will have to be adapted in case the kf6 VCL plugin +# uses "own" headers +$(call gb_CustomTarget_get_workdir,vcl/unx/kf6)/%.moc : \ + $(SRCDIR)/vcl/unx/kf5/%.hxx \ + | $(call gb_CustomTarget_get_workdir,vcl/unx/kf6)/.dir + $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),MOC,1) + $(call gb_Trace_StartRange,$(subst $(WORKDIR)/,,$@),MOC) + $(MOC6) $< -o $@ + $(call gb_Trace_EndRange,$(subst $(WORKDIR)/,,$@),MOC) + +# vim: set noet sw=4: diff --git a/vcl/Library_vclplug_kf6.mk b/vcl/Library_vclplug_kf6.mk new file mode 100644 index 000000000000..1e7ece07037c --- /dev/null +++ b/vcl/Library_vclplug_kf6.mk @@ -0,0 +1,86 @@ +# -*- 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_kf6)) + +$(eval $(call gb_Library_set_plugin_for,vclplug_kf6,vcl)) + +$(eval $(call gb_Library_use_custom_headers,vclplug_kf6,vcl/unx/kf6)) + +$(eval $(call gb_Library_set_include,vclplug_kf6,\ + $$(INCLUDE) \ + -I$(SRCDIR)/vcl/inc \ + -I$(SRCDIR)/vcl/inc/qt5 \ +)) + +$(eval $(call gb_Library_add_defs,vclplug_kf6,\ + -DVCLPLUG_KF_IMPLEMENTATION \ +)) + +$(eval $(call gb_Library_use_sdk_api,vclplug_kf6)) + +$(eval $(call gb_Library_use_libraries,vclplug_kf6,\ + vclplug_qt6 \ + tl \ + utl \ + sot \ + ucbhelper \ + basegfx \ + comphelper \ + cppuhelper \ + i18nlangtag \ + i18nutil \ + $(if $(ENABLE_JAVA), \ + jvmaccess) \ + cppu \ + sal \ +)) + +$(eval $(call gb_Library_use_externals,vclplug_kf6,\ + boost_headers \ + cairo \ + graphite \ + harfbuzz \ + icuuc \ + kf6 \ + epoxy \ +)) + +$(eval $(call gb_Library_add_exception_objects,vclplug_kf6,\ + vcl/unx/kf6/KFFilePicker \ + vcl/unx/kf6/KFSalInstance \ +)) + +ifeq ($(OS),LINUX) +$(eval $(call gb_Library_add_libs,vclplug_kf6,\ + -lm \ + -ldl \ +)) +endif + +# Workaround for clang+icecream (clang's -frewrite-includes +# doesn't handle Qt5's QT_HAS_INCLUDE that Qt5 uses for <chrono>), +# and probably the same is true for Qt6. +ifeq ($(COM_IS_CLANG),TRUE) +$(eval $(call gb_Library_add_cxxflags,vclplug_kf6, \ + -include chrono \ +)) +endif + +# vim: set noet sw=4 ts=4: diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk index 5265cd951243..5c6fbe987430 100644 --- a/vcl/Module_vcl.mk +++ b/vcl/Module_vcl.mk @@ -97,6 +97,14 @@ $(eval $(call gb_Module_add_targets,vcl,\ )) endif +ifneq ($(ENABLE_KF6),) +$(eval $(call gb_Module_add_targets,vcl,\ + CustomTarget_kf6_moc \ + Library_vclplug_kf6 \ +)) +endif + + ifneq ($(ENABLE_QT5),) $(eval $(call gb_Module_add_targets,vcl,\ CustomTarget_qt5_moc \ diff --git a/vcl/source/app/salplug.cxx b/vcl/source/app/salplug.cxx index fee5b7e33e6d..7f0ba2e96bb9 100644 --- a/vcl/source/app/salplug.cxx +++ b/vcl/source/app/salplug.cxx @@ -137,6 +137,7 @@ SalInstance* tryInstance( const OUString& rModuleBase, bool bForce = false ) */ if (aUsedModuleBase == "gtk4" || aUsedModuleBase == "gtk3" || aUsedModuleBase == "gtk3_kde5" || aUsedModuleBase == "kf5" || + aUsedModuleBase == "kf6" || aUsedModuleBase == "qt5" || aUsedModuleBase == "qt6" || aUsedModuleBase == "win") { @@ -338,6 +339,9 @@ SalInstance *CreateSalInstance() #if ENABLE_QT5 "qt5", #endif +#if ENABLE_KF6 + "kf6", +#endif #if ENABLE_QT6 "qt6", #endif diff --git a/vcl/unx/kf6/KFFilePicker.cxx b/vcl/unx/kf6/KFFilePicker.cxx new file mode 100644 index 000000000000..17672c834506 --- /dev/null +++ b/vcl/unx/kf6/KFFilePicker.cxx @@ -0,0 +1,12 @@ +/* -*- 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/. + */ + +#include "../kf5/KFFilePicker.cxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kf6/KFFilePicker.hxx b/vcl/unx/kf6/KFFilePicker.hxx new file mode 100644 index 000000000000..b0c790552dac --- /dev/null +++ b/vcl/unx/kf6/KFFilePicker.hxx @@ -0,0 +1,12 @@ +/* -*- 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/. + */ + +#include "../kf5/KFFilePicker.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kf6/KFSalInstance.cxx b/vcl/unx/kf6/KFSalInstance.cxx new file mode 100644 index 000000000000..7595c93bd251 --- /dev/null +++ b/vcl/unx/kf6/KFSalInstance.cxx @@ -0,0 +1,12 @@ +/* -*- 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/. + */ + +#include "../kf5/KFSalInstance.cxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kf6/KFSalInstance.hxx b/vcl/unx/kf6/KFSalInstance.hxx new file mode 100644 index 000000000000..9c648d933672 --- /dev/null +++ b/vcl/unx/kf6/KFSalInstance.hxx @@ -0,0 +1,12 @@ +/* -*- 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/. + */ + +#include "../kf5/KFSalInstance.hxx" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |