From 720bf6ac8612c32942bb059f9086ee86c2963bb5 Mon Sep 17 00:00:00 2001 From: Michael Weghorn Date: Thu, 22 Jun 2023 08:48:05 +0200 Subject: 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 --- vcl/CustomTarget_kf6_moc.mk | 29 +++++++++++++++ vcl/Library_vclplug_kf6.mk | 86 +++++++++++++++++++++++++++++++++++++++++++ vcl/Module_vcl.mk | 8 ++++ vcl/source/app/salplug.cxx | 4 ++ vcl/unx/kf6/KFFilePicker.cxx | 12 ++++++ vcl/unx/kf6/KFFilePicker.hxx | 12 ++++++ vcl/unx/kf6/KFSalInstance.cxx | 12 ++++++ vcl/unx/kf6/KFSalInstance.hxx | 12 ++++++ 8 files changed, 175 insertions(+) create mode 100644 vcl/CustomTarget_kf6_moc.mk create mode 100644 vcl/Library_vclplug_kf6.mk create mode 100644 vcl/unx/kf6/KFFilePicker.cxx create mode 100644 vcl/unx/kf6/KFFilePicker.hxx create mode 100644 vcl/unx/kf6/KFSalInstance.cxx create mode 100644 vcl/unx/kf6/KFSalInstance.hxx (limited to 'vcl') 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 ), +# 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: */ -- cgit