Rebased ref, commits from common ancestor: commit f9fd65b28f7d9c402b4e2bfb1b88e7b9b420d47b Author: Katarina Behrens <katarina.behr...@cib.de> Date: Tue Jun 19 15:59:50 2018 +0200
Folder picker is now really a folder picker and not a regular file picker with wrong title Change-Id: I849e7bb3d0cad197880fadd865f4d39f13245e97 diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 4fbbc487394c..6f175cc375cf 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -79,6 +79,7 @@ protected: QGridLayout* _layout; bool allowRemoteUrls; + bool mbIsFolderPicker; public: explicit KDE5FilePicker(QFileDialog::FileMode); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 46bcccf4bd24..56734b4d36e9 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -83,6 +83,7 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) , _extraControls(new QWidget) , _layout(new QGridLayout(_extraControls)) , allowRemoteUrls(false) + , mbIsFolderPicker(eMode == QFileDialog::Directory) { _dialog->setSupportedSchemes({ QStringLiteral("file"), @@ -96,14 +97,12 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) _dialog->setFileMode(eMode); - if (eMode == QFileDialog::Directory) + if (mbIsFolderPicker) { _dialog->setOption(QFileDialog::ShowDirsOnly, true); _dialog->setWindowTitle(toQString(VclResId(STR_FPICKER_FOLDER_DEFAULT_TITLE))); } - setMultiSelectionMode(false); - connect(_dialog, &QFileDialog::filterSelected, this, &KDE5FilePicker::filterChanged); connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, @@ -191,6 +190,9 @@ void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) return Q_EMIT setMultiSelectionSignal(multiSelect); } + if (mbIsFolderPicker) + return; + _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); } commit 276adef1703ad1594fee3aaf7a170823cb583447 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Tue Jun 19 13:01:43 2018 +0200 Fix initial switch to folder in fileopen dlg the argument passed is an URL, so using setDirectory wouldn't do the trick, setDirectoryUrl would Change-Id: I312f6e2a06b46777dc126f95f63ec0dbcb1f5799 diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 3d1491eab5cc..46bcccf4bd24 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -213,7 +213,8 @@ void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) return Q_EMIT setDisplayDirectorySignal(dir); } - _dialog->setDirectory(toQString(dir)); + QString qDir(toQString(dir)); + _dialog->setDirectoryUrl(QUrl(qDir)); } OUString SAL_CALL KDE5FilePicker::getDisplayDirectory() commit 2e57b03efda51e3bf53386e2572e816c4d3382d6 Author: Stephan Bergmann <sberg...@redhat.com> Date: Mon Jun 18 18:05:29 2018 +0200 loplugin:{implicitboolconversion,salbool} Change-Id: I795a50241b9d77127b5ee5558e0cd706e0fdb76b diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 69d86c5107a9..4fbbc487394c 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -173,7 +173,7 @@ Q_SIGNALS: void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue); css::uno::Any getValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction); - void enableControlSignal(sal_Int16 nControlId, sal_Bool bEnable); + void enableControlSignal(sal_Int16 nControlId, bool bEnable); void setLabelSignal(sal_Int16 nControlId, const OUString& rLabel); OUString getLabelSignal(sal_Int16 nControlId); void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); @@ -199,7 +199,7 @@ private Q_SLOTS: return getValue(nControlId, nControlAction); } - void enableControlSlot(sal_Int16 nControlId, sal_Bool bEnable) + void enableControlSlot(sal_Int16 nControlId, bool bEnable) { return enableControl(nControlId, bEnable); } diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index ce8af6a7eaf2..3d1491eab5cc 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -180,7 +180,7 @@ sal_Int16 SAL_CALL KDE5FilePicker::execute() _dialog->show(); //block and wait for user input - return _dialog->exec() == QFileDialog::Accepted; + return _dialog->exec() == QFileDialog::Accepted ? 1 : 0; } void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) commit 4bd93b662f5ad0556d573cb67ae7f4da5577ee23 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Jun 18 11:24:36 2018 +0200 VCLKDE5Application is now unused as well Change-Id: Ib11274b6039596246aa232b83fa4d85095a93e08 diff --git a/vcl/Library_vclplug_kde5.mk b/vcl/Library_vclplug_kde5.mk index 11fa740926e4..4d134d0fbf8b 100644 --- a/vcl/Library_vclplug_kde5.mk +++ b/vcl/Library_vclplug_kde5.mk @@ -84,7 +84,6 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_kde5,\ vcl/unx/kde5/KDE5SalFrame \ vcl/unx/kde5/KDE5SalGraphics \ vcl/unx/kde5/KDE5SalInstance \ - vcl/unx/kde5/VCLKDE5Application \ )) ifeq ($(OS),LINUX) diff --git a/vcl/unx/kde5/VCLKDE5Application.cxx b/vcl/unx/kde5/VCLKDE5Application.cxx deleted file mode 100644 index 2d9532f1def9..000000000000 --- a/vcl/unx/kde5/VCLKDE5Application.cxx +++ /dev/null @@ -1,75 +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 "VCLKDE5Application.hxx" - -#include <QtGui/QClipboard> -#include <QtCore/QEvent> -#include <assert.h> - -VCLKDE5Application::VCLKDE5Application(int argc, char** argv) - : QApplication(argc, argv) -{ -} - -// various hacks to be performed before re-entering Qt's event loop -// because of showing a Qt dialog -void VCLKDE5Application::preDialogSetup() -{ - // KFileDialog integration requires using event loop with QClipboard. - // Opening the KDE file dialog here can lead to QClipboard - // asking for clipboard contents. If LO core is the owner of the clipboard - // content, without event loop use this will block for 5 seconds and timeout, - // since the clipboard thread will not be able to acquire SolarMutex - // and thus won't be able to respond. If the event loops - // are properly integrated and QClipboard can use a nested event loop - // (see the KDE VCL plug), then this won't happen. - // We cannot simply release SolarMutex here, because the event loop started - // by the file dialog would also call back to LO code. - assert(QApplication::clipboard()->property("useEventLoopWhenWaiting").toBool()); -} - -// various hacks to be performed after a Qt dialog has been closed -void VCLKDE5Application::postDialogCleanup() -{ - // HACK: KFileDialog uses KConfig("kdeglobals") for saving some settings - // (such as the auto-extension flag), but that doesn't update KGlobal::config() - // (which is probably a KDE bug), so force reading the new configuration, - // otherwise the next opening of the dialog would use the old settings. - KConfig config; - config.reparseConfiguration(); - // HACK: If Qt owns clipboard or selection, give up on their ownership now. Otherwise - // LO core might ask for the contents, but it would block while doing so (i.e. it - // doesn't seem to have an equivalent of QClipboard's "useEventLoopWhenWaiting"), - // therefore QClipboard wouldn't be able to respond, and whole LO would block until - // a timeout. Given that Klipper is most probably running, giving up clipboard/selection - // ownership will not only avoid the blocking, but even pasting that content in LO - // will in fact work, if Klipper can handle it. - // Technically proper solution would be of course to allow Qt to process QClipboard - // events while LO waits for clipboard contents, or short-circuit to QClipboard somehow - // (it's a mystery why LO's clipboard handling has its own thread when whole LO can - // get blocked by both trying to send and receive clipboard contents anyway). - QClipboard* clipboard = QApplication::clipboard(); - if (clipboard->ownsSelection()) - clipboard->clear(QClipboard::Selection); - if (clipboard->ownsClipboard()) - clipboard->clear(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/VCLKDE5Application.hxx b/vcl/unx/kde5/VCLKDE5Application.hxx deleted file mode 100644 index 5503db32c901..000000000000 --- a/vcl/unx/kde5/VCLKDE5Application.hxx +++ /dev/null @@ -1,41 +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 . - */ - -#ifndef INCLUDED_VCL_UNX_KDE5_VCLKDE5APPLICATION_HXX -#define INCLUDED_VCL_UNX_KDE5_VCLKDE5APPLICATION_HXX - -#pragma once - -#include <QtWidgets/QApplication> -#include <QtCore/QAbstractNativeEventFilter> -#include <KConfigCore/kconfig.h> - -#undef Region - -class VCLKDE5Application : public QApplication, public QAbstractNativeEventFilter -{ -public: - VCLKDE5Application(int argc, char** argv); - static void preDialogSetup(); - static void postDialogCleanup(); -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit a39e55c359b0d4d2a2f3f0766ac47c3aaa96fffd Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Jun 18 11:15:02 2018 +0200 Drop cargo-cult FPServiceInfo FILE_PICKER_SERVICE_NAME wasn't even used anywhere Change-Id: Ie99de85175b8321948612c680c4e4d956a4c7efc diff --git a/vcl/unx/kde5/FPServiceInfo.hxx b/vcl/unx/kde5/FPServiceInfo.hxx deleted file mode 100644 index ec58684d4919..000000000000 --- a/vcl/unx/kde5/FPServiceInfo.hxx +++ /dev/null @@ -1,28 +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 - -// the service names -#define FILE_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.KDE4FilePicker" - -// the implementation names -#define FILE_PICKER_IMPL_NAME "com.sun.star.ui.dialogs.KDE4FilePicker" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 778608e1edb9..ce8af6a7eaf2 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -31,7 +31,6 @@ #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <osl/mutex.hxx> -#include "FPServiceInfo.hxx" #undef Region @@ -664,7 +663,7 @@ void KDE5FilePicker::disposing(const lang::EventObject& rEvent) OUString SAL_CALL KDE5FilePicker::getImplementationName() { - return OUString(FILE_PICKER_IMPL_NAME); + return OUString("com.sun.star.ui.dialogs.KDE5FilePicker"); } sal_Bool SAL_CALL KDE5FilePicker::supportsService(const OUString& ServiceName) commit f103d482ebc5611d00f0136d3f55aac34827e18b Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Jun 18 10:36:50 2018 +0200 Fold all the rest into KDE5FilePicker2 Change-Id: Icbaa56057776ffcb981207ec30e5d94d6901e43c diff --git a/vcl/Library_vclplug_kde5.mk b/vcl/Library_vclplug_kde5.mk index 655ae6b80d96..11fa740926e4 100644 --- a/vcl/Library_vclplug_kde5.mk +++ b/vcl/Library_vclplug_kde5.mk @@ -79,7 +79,6 @@ $(eval $(call gb_Library_add_libs,vclplug_kde5,\ )) $(eval $(call gb_Library_add_exception_objects,vclplug_kde5,\ - vcl/unx/kde5/KDE5FilePicker \ vcl/unx/kde5/KDE5FilePicker2 \ vcl/unx/kde5/KDE5SalData \ vcl/unx/kde5/KDE5SalFrame \ diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx deleted file mode 100644 index 19bea46654a3..000000000000 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ /dev/null @@ -1,59 +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 <KWindowSystem> -#include <KFileWidget> - -#include <QtCore/QDebug> -#include <QtCore/QUrl> -#include <QtGui/QClipboard> -#include <QtGui/QWindow> -#include <QtWidgets/QCheckBox> -#include <QtWidgets/QFileDialog> -#include <QtWidgets/QGridLayout> -#include <QtWidgets/QWidget> -#include <QtWidgets/QApplication> - -// KDE5FilePicker - -KDE5FilePicker::~KDE5FilePicker() -{ - delete _extraControls; - delete _dialog; -} - -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(_extraControls); - } - } - return QObject::eventFilter(o, e); -} - -#include <KDE5FilePicker.moc> - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index b7c3320344bf..778608e1edb9 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -48,6 +48,7 @@ #include <QtWidgets/QGridLayout> #include <QtWidgets/QWidget> #include <QtWidgets/QApplication> +#include <KFileWidget> #include <fpicker/strings.hrc> #include <strings.hrc> @@ -141,6 +142,12 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) qApp->installEventFilter(this); } +KDE5FilePicker::~KDE5FilePicker() +{ + delete _extraControls; + delete _dialog; +} + void SAL_CALL KDE5FilePicker::addFilePickerListener(const uno::Reference<XFilePickerListener>& xListener) { @@ -687,4 +694,20 @@ void KDE5FilePicker::selectionChanged() m_xListener->fileSelectionChanged(aEvent); } +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(_extraControls); + } + } + return QObject::eventFilter(o, e); +} + +#include <KDE5FilePicker.moc> + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 47b0285d7b37b2f646ae32ca1fe8cf6f1875997a Author: Katarina Behrens <katarina.behr...@cib.de> Date: Fri Jun 15 15:30:16 2018 +0200 Drop winId and KWindowSystem::setMainWindow as fpicker isn't a separate binary anymore Change-Id: I9c9c57a21f5dc79714f37f8bc65b998887c29e78 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 5d9acdcd7a50..19bea46654a3 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -40,8 +40,6 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -void KDE5FilePicker::setWinId(sal_uIntPtr winId) { _winId = winId; } - bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e) { if (e->type() == QEvent::Show && o->isWidgetType()) @@ -49,7 +47,6 @@ bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e) auto* w = static_cast<QWidget*>(o); if (!w->parentWidget() && w->isModal()) { - KWindowSystem::setMainWindow(w, _winId); if (auto* fileWidget = w->findChild<KFileWidget*>({}, Qt::FindDirectChildrenOnly)) fileWidget->setCustomWidget(_extraControls); } diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 4b45052827c4..69d86c5107a9 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -78,8 +78,6 @@ protected: //layout for extra custom controls QGridLayout* _layout; - sal_uIntPtr _winId; - bool allowRemoteUrls; public: @@ -140,8 +138,6 @@ public: // XFilePicker2 functions virtual css::uno::Sequence<OUString> SAL_CALL getSelectedFiles() override; - void setWinId(sal_uIntPtr winId); - // XInitialization virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) override; diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index cebd2ee4f4f9..b7c3320344bf 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -82,7 +82,6 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) , _dialog(new QFileDialog(nullptr, {}, QDir::homePath())) , _extraControls(new QWidget) , _layout(new QGridLayout(_extraControls)) - , _winId(0) , allowRemoteUrls(false) { _dialog->setSupportedSchemes({ commit 2d92d754aeb03da256cc617f15d1ae377aa2b651 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Fri Jun 15 14:35:20 2018 +0200 Fold enableFolderMode into ctor Change-Id: I8674395271b83d9c50477bdf0242cd9f46af7a30 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 7a30359ef580..5d9acdcd7a50 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -34,12 +34,6 @@ // KDE5FilePicker -void KDE5FilePicker::enableFolderMode() -{ - _dialog->setOption(QFileDialog::ShowDirsOnly, true); - _dialog->setFileMode(QFileDialog::Directory); -} - KDE5FilePicker::~KDE5FilePicker() { delete _extraControls; diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 4fae59304fed..4b45052827c4 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -86,8 +86,6 @@ public: explicit KDE5FilePicker(QFileDialog::FileMode); virtual ~KDE5FilePicker() override; - void enableFolderMode(); - // XFilePickerNotifier virtual void SAL_CALL addFilePickerListener( const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) override; diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index bc37f3c02127..cebd2ee4f4f9 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -94,8 +94,15 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) QStringLiteral("webdavs"), QStringLiteral("smb"), }); + _dialog->setFileMode(eMode); + if (eMode == QFileDialog::Directory) + { + _dialog->setOption(QFileDialog::ShowDirsOnly, true); + _dialog->setWindowTitle(toQString(VclResId(STR_FPICKER_FOLDER_DEFAULT_TITLE))); + } + setMultiSelectionMode(false); connect(_dialog, &QFileDialog::filterSelected, this, &KDE5FilePicker::filterChanged); commit d7fc00e1f7ab7a44e6102afdb371c999bda5f34f Author: Katarina Behrens <katarina.behr...@cib.de> Date: Fri Jun 15 13:14:34 2018 +0200 Fix suggesting file name (for new documents) Change-Id: I39eb672f7dd097e12ddb323ce702c6c28235b5d9 diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 72519f656bec..bc37f3c02127 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -190,7 +190,7 @@ void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) return Q_EMIT setDefaultNameSignal(name); } - _dialog->selectUrl(QUrl(toQString(name))); + _dialog->selectFile(toQString(name)); } void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) commit 0527d831a5c49e0a52c7a72040ee1049dc34c3c7 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 14 17:09:45 2018 +0200 Fix copy&pasta Change-Id: I493fa7a14557a919fab6bc6cf9f955507488af6d diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 3a6f2e9b94c4..4fae59304fed 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -197,7 +197,7 @@ private Q_SLOTS: OUString getDisplayDirectorySlot() { return getDisplayDirectory(); } void setValueSlot(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue) { - return setValue(nControlAction, nControlAction, rValue); + return setValue(nControlId, nControlAction, rValue); } css::uno::Any getValueSlot(sal_Int16 nControlId, sal_Int16 nControlAction) commit c9e002799b4aae662265c723853342035e9dced0 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 14 17:08:17 2018 +0200 Implement get|setLabel, signal+slot Change-Id: I0188f7609b7a934949ffdf0a6e64547b08ff03a8 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 95eb6a5c3ba7..7a30359ef580 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,33 +46,6 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -/*void KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label) -{ - if (_customWidgets.contains(controlId)) - { - QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); - if (cb) - cb->setText(label); - } - else - qWarning() << "set label on unknown control" << controlId; -} - -QString KDE5FilePicker::getLabel(sal_Int16 controlId) const -{ - QString label; - if (_customWidgets.contains(controlId)) - { - QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); - if (cb) - label = cb->text(); - } - else - qWarning() << "get label on unknown control" << controlId; - - return label; -}*/ - void KDE5FilePicker::setWinId(sal_uIntPtr winId) { _winId = winId; } bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e) diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index fd0ed95da27a..3a6f2e9b94c4 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -180,6 +180,8 @@ Q_SIGNALS: const css::uno::Any& rValue); css::uno::Any getValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction); void enableControlSignal(sal_Int16 nControlId, sal_Bool bEnable); + void setLabelSignal(sal_Int16 nControlId, const OUString& rLabel); + OUString getLabelSignal(sal_Int16 nControlId); void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); void appendFilterGroupSignal(const OUString& rTitle, const css::uno::Sequence<css::beans::StringPair>& rFilters); @@ -208,6 +210,13 @@ private Q_SLOTS: return enableControl(nControlId, bEnable); } + void setLabelSlot(sal_Int16 nControId, const OUString& rLabel) + { + return setLabel(nControId, rLabel); + } + + OUString getLabelSlot(sal_Int16 nControlId) { return getLabel(nControlId); } + void appendFilterSlot(const OUString& rTitle, const OUString& rFilter) { return appendFilter(rTitle, rFilter); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index ad229c880001..72519f656bec 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -115,6 +115,10 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::getValueSignal, this, &KDE5FilePicker::getValueSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setLabelSignal, this, &KDE5FilePicker::setLabelSlot, + Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::getLabelSignal, this, &KDE5FilePicker::getLabelSlot, + Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::enableControlSignal, this, &KDE5FilePicker::enableControlSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterSignal, this, &KDE5FilePicker::appendFilterSlot, @@ -374,11 +378,42 @@ void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable SAL_WARN("vcl.kde5", "enable on unknown control" << controlId); } -void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label) {} +void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setLabelSignal(controlId, label); + } + + if (_customWidgets.contains(controlId)) + { + QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); + if (cb) + cb->setText(toQString(label)); + } + else + SAL_WARN("vcl.kde5", "set label on unknown control" << controlId); +} OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) { + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT getLabelSignal(controlId); + } + OUString label; + if (_customWidgets.contains(controlId)) + { + QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); + if (cb) + label = toOUString(cb->text()); + } + else + SAL_WARN("vcl.kde5", "get label on unknown control" << controlId); + return label; } commit 6b052ccff871cac50a63119fe324930ace86f190 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 14 14:21:35 2018 +0200 Implement enableControl, signal+slot Change-Id: I84f81f689167ec332772c706b0d0c6d7562b5ac8 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index f69eb3435aa0..95eb6a5c3ba7 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,15 +46,7 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -/*void KDE5FilePicker::enableControl(sal_Int16 controlId, bool enable) -{ - if (_customWidgets.contains(controlId)) - _customWidgets.value(controlId)->setEnabled(enable); - else - qWarning() << "enable on unknown control" << controlId; -} - -void KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label) +/*void KDE5FilePicker::setLabel(sal_Int16 controlId, const QString& label) { if (_customWidgets.contains(controlId)) { diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index da2dd7a09d16..fd0ed95da27a 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -179,6 +179,7 @@ Q_SIGNALS: void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue); css::uno::Any getValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction); + void enableControlSignal(sal_Int16 nControlId, sal_Bool bEnable); void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); void appendFilterGroupSignal(const OUString& rTitle, const css::uno::Sequence<css::beans::StringPair>& rFilters); @@ -202,6 +203,11 @@ private Q_SLOTS: return getValue(nControlId, nControlAction); } + void enableControlSlot(sal_Int16 nControlId, sal_Bool bEnable) + { + return enableControl(nControlId, bEnable); + } + void appendFilterSlot(const OUString& rTitle, const OUString& rFilter) { return appendFilter(rTitle, rFilter); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 75488e88041b..ad229c880001 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -115,6 +115,8 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::getValueSignal, this, &KDE5FilePicker::getValueSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::enableControlSignal, this, &KDE5FilePicker::enableControlSlot, + Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterSignal, this, &KDE5FilePicker::appendFilterSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterGroupSignal, this, @@ -358,7 +360,19 @@ uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nContr return uno::Any(value); } -void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable) {} +void SAL_CALL KDE5FilePicker::enableControl(sal_Int16 controlId, sal_Bool enable) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT enableControlSignal(controlId, enable); + } + + if (_customWidgets.contains(controlId)) + _customWidgets.value(controlId)->setEnabled(enable); + else + SAL_WARN("vcl.kde5", "enable on unknown control" << controlId); +} void SAL_CALL KDE5FilePicker::setLabel(sal_Int16 controlId, const OUString& label) {} commit 4add71a161bde3870934d754ab397ec7c0e22a92 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 14 12:36:48 2018 +0200 Implement getValue, signal+slot Change-Id: Ic009ea5dc3ca3bf791d3348fce8d007022598c49 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 231e045f4ef5..f69eb3435aa0 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,22 +46,7 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -/*bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const -{ - bool ret = false; - if (_customWidgets.contains(controlId)) - { - QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); - if (cb) - ret = cb->isChecked(); - } - else - qWarning() << "get value on unknown control" << controlId; - - return ret; -} - -void KDE5FilePicker::enableControl(sal_Int16 controlId, bool enable) +/*void KDE5FilePicker::enableControl(sal_Int16 controlId, bool enable) { if (_customWidgets.contains(controlId)) _customWidgets.value(controlId)->setEnabled(enable); diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 8fbc24f73a63..da2dd7a09d16 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -178,6 +178,7 @@ Q_SIGNALS: OUString getDisplayDirectorySignal(); void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue); + css::uno::Any getValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction); void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); void appendFilterGroupSignal(const OUString& rTitle, const css::uno::Sequence<css::beans::StringPair>& rFilters); @@ -196,6 +197,11 @@ private Q_SLOTS: return setValue(nControlAction, nControlAction, rValue); } + css::uno::Any getValueSlot(sal_Int16 nControlId, sal_Int16 nControlAction) + { + return getValue(nControlId, nControlAction); + } + void appendFilterSlot(const OUString& rTitle, const OUString& rFilter) { return appendFilter(rTitle, rFilter); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 87119f9e6bc9..75488e88041b 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -113,6 +113,8 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) &KDE5FilePicker::setMultiSelectionSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setValueSignal, this, &KDE5FilePicker::setValueSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::getValueSignal, this, &KDE5FilePicker::getValueSlot, + Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterSignal, this, &KDE5FilePicker::appendFilterSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterGroupSignal, this, @@ -329,6 +331,12 @@ void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAc uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) { + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT getValueSignal(controlId, nControlAction); + } + 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 @@ -338,6 +346,14 @@ uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nContr return uno::Any(false); bool value = false; + if (_customWidgets.contains(controlId)) + { + QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); + if (cb) + value = cb->isChecked(); + } + else + SAL_WARN("vcl.kde5", "get value on unknown control" << controlId); return uno::Any(value); } commit 29e5096f9979dcc258e063232255591963146417 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Wed Jun 13 13:51:46 2018 +0200 Add 2 more file/dir methods, signal+slot Change-Id: I0152e4e0fa72e27a144ca96f83fe6a282b272cbe diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 5d87022e36fb..231e045f4ef5 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,11 +46,7 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -/*void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); } - -QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); } - -bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const +/*bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const { bool ret = false; if (_customWidgets.contains(controlId)) diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index f1bbcf7545df..8fbc24f73a63 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -173,7 +173,9 @@ protected: Q_SIGNALS: void setTitleSignal(const OUString& rTitle); + void setDefaultNameSignal(const OUString& rName); void setDisplayDirectorySignal(const OUString& rDir); + OUString getDisplayDirectorySignal(); void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue); void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); @@ -186,7 +188,9 @@ Q_SIGNALS: private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } + void setDefaultNameSlot(const OUString& rName) { return setDefaultName(rName); } void setDisplayDirectorySlot(const OUString& rDir) { return setDisplayDirectory(rDir); } + OUString getDisplayDirectorySlot() { return getDisplayDirectory(); } void setValueSlot(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue) { return setValue(nControlAction, nControlAction, rValue); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index fd0fedd7c7ac..87119f9e6bc9 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -102,9 +102,13 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, &KDE5FilePicker::setTitleSlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setDefaultNameSignal, this, &KDE5FilePicker::setDefaultNameSlot, + Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setDisplayDirectorySignal /*(const OUString&)*/, this, &KDE5FilePicker::setDisplayDirectorySlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::getDisplayDirectorySignal, this, + &KDE5FilePicker::getDisplayDirectorySlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setMultiSelectionSignal, this, &KDE5FilePicker::setMultiSelectionSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setValueSignal, this, &KDE5FilePicker::setValueSlot, @@ -170,7 +174,16 @@ void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); } -void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) {} +void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setDefaultNameSignal(name); + } + + _dialog->selectUrl(QUrl(toQString(name))); +} void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) { @@ -185,7 +198,13 @@ void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) OUString SAL_CALL KDE5FilePicker::getDisplayDirectory() { - OUString dir; + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT getDisplayDirectorySignal(); + } + + OUString dir = toOUString(_dialog->directoryUrl().url()); return dir; } commit 024f054e2d0473c3ae4e3679948396adba0c9037 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Wed Jun 13 13:09:13 2018 +0200 Implement setMultiSelectionMode, signal+slot Change-Id: Idc411dc87a84b60a22fe7b6e7bba50b2c5302128 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 2e9f3bd66752..5d87022e36fb 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,12 +46,7 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -/*void KDE5FilePicker::setMultiSelectionMode(bool multiSelect) -{ - _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); -} - -void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); } +/*void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); } QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); } diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 36cfb4263a11..f1bbcf7545df 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -182,6 +182,7 @@ Q_SIGNALS: void setCurrentFilterSignal(const OUString& rFilter); OUString getCurrentFilterSignal(); css::uno::Sequence<OUString> getSelectedFilesSignal(); + void setMultiSelectionSignal(bool bMulti); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } @@ -205,6 +206,7 @@ private Q_SLOTS: void setCurrentFilterSlot(const OUString& rFilter) { return setCurrentFilter(rFilter); } OUString getCurrentFilterSlot() { return getCurrentFilter(); } css::uno::Sequence<OUString> getSelectedFilesSlot() { return getFiles(); } + void setMultiSelectionSlot(bool bMulti) { return setMultiSelectionMode(bMulti); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index da068240a502..fd0fedd7c7ac 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -105,6 +105,8 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) connect(this, &KDE5FilePicker::setDisplayDirectorySignal /*(const OUString&)*/, this, &KDE5FilePicker::setDisplayDirectorySlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setMultiSelectionSignal, this, + &KDE5FilePicker::setMultiSelectionSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setValueSignal, this, &KDE5FilePicker::setValueSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterSignal, this, &KDE5FilePicker::appendFilterSlot, @@ -119,7 +121,6 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) &KDE5FilePicker::getSelectedFilesSlot, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); - setMultiSelectionMode(false); } void SAL_CALL @@ -158,7 +159,16 @@ sal_Int16 SAL_CALL KDE5FilePicker::execute() return _dialog->exec() == QFileDialog::Accepted; } -void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) {} +void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setMultiSelectionSignal(multiSelect); + } + + _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); +} void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) {} @@ -170,7 +180,7 @@ void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) return Q_EMIT setDisplayDirectorySignal(dir); } - _dialog->selectUrl(QUrl(toQString(dir))); + _dialog->setDirectory(toQString(dir)); } OUString SAL_CALL KDE5FilePicker::getDisplayDirectory() commit feffef60794a49f5e93ad27996d704538b762324 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Tue Jun 12 16:25:25 2018 +0200 Implement getSelectedFiles, signal+slot this finally makes fpicker usable Change-Id: Iedf7ed8de04947ffbc0e88348c95f2a937a8e69e diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index a8486bbcb6b2..2e9f3bd66752 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -55,8 +55,6 @@ void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QU QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); } -QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); } - bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const { bool ret = false; diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index d4d6cae229cc..36cfb4263a11 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -181,6 +181,7 @@ Q_SIGNALS: const css::uno::Sequence<css::beans::StringPair>& rFilters); void setCurrentFilterSignal(const OUString& rFilter); OUString getCurrentFilterSignal(); + css::uno::Sequence<OUString> getSelectedFilesSignal(); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } @@ -203,6 +204,7 @@ private Q_SLOTS: void setCurrentFilterSlot(const OUString& rFilter) { return setCurrentFilter(rFilter); } OUString getCurrentFilterSlot() { return getCurrentFilter(); } + css::uno::Sequence<OUString> getSelectedFilesSlot() { return getFiles(); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 05e9c61976e2..da068240a502 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -115,6 +115,8 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) &KDE5FilePicker::setCurrentFilterSlot, Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::getCurrentFilterSignal, this, &KDE5FilePicker::getCurrentFilterSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::getSelectedFilesSignal, this, + &KDE5FilePicker::getSelectedFilesSlot, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -187,7 +189,21 @@ uno::Sequence<OUString> SAL_CALL KDE5FilePicker::getFiles() uno::Sequence<OUString> SAL_CALL KDE5FilePicker::getSelectedFiles() { - uno::Sequence<OUString> seq; + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT getSelectedFilesSignal(); + } + + QList<QUrl> aURLs = _dialog->selectedUrls(); + uno::Sequence<OUString> seq(aURLs.size()); + + size_t i = 0; + for (auto& aURL : aURLs) + { + seq[i++] = toOUString(aURL.toString()); + } + return seq; } commit db62a779d7ae9a2a321b6756b72064631af6aa04 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Tue Jun 12 12:54:59 2018 +0200 Implement get|setCurrentFilter, signal+slot Change-Id: I1fb29b673e5cb474de7230407b7924844b1460e0 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index be8a6050426e..a8486bbcb6b2 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -57,22 +57,6 @@ QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryU QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); } -void KDE5FilePicker::setCurrentFilter(const QString& title) -{ - _currentFilter = _titleToFilters.value(title); -} - -QString KDE5FilePicker::getCurrentFilter() const -{ - QString filter = _titleToFilters.key(_dialog->selectedNameFilter()); - - //default if not found - if (filter.isEmpty()) - filter = "ODF Text Document (.odt)"; - - return filter; -} - bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const { bool ret = false; diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index a5ab496a289b..d4d6cae229cc 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -179,6 +179,8 @@ Q_SIGNALS: void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); void appendFilterGroupSignal(const OUString& rTitle, const css::uno::Sequence<css::beans::StringPair>& rFilters); + void setCurrentFilterSignal(const OUString& rFilter); + OUString getCurrentFilterSignal(); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } @@ -198,6 +200,9 @@ private Q_SLOTS: { return appendFilterGroup(rTitle, rFilters); } + + void setCurrentFilterSlot(const OUString& rFilter) { return setCurrentFilter(rFilter); } + OUString getCurrentFilterSlot() { return getCurrentFilter(); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index c75c56c21095..05e9c61976e2 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -111,6 +111,10 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::appendFilterGroupSignal, this, &KDE5FilePicker::appendFilterGroupSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setCurrentFilterSignal, this, + &KDE5FilePicker::setCurrentFilterSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::getCurrentFilterSignal, this, + &KDE5FilePicker::getCurrentFilterSlot, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -211,11 +215,31 @@ void SAL_CALL KDE5FilePicker::appendFilter(const OUString& title, const OUString _titleToFilters[t] = _filters.constLast(); } -void SAL_CALL KDE5FilePicker::setCurrentFilter(const OUString& title) {} +void SAL_CALL KDE5FilePicker::setCurrentFilter(const OUString& title) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setCurrentFilterSignal(title); + } + + _currentFilter = _titleToFilters.value(toQString(title)); +} OUString SAL_CALL KDE5FilePicker::getCurrentFilter() { - OUString filter; + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT getCurrentFilterSignal(); + } + + OUString filter = toOUString(_titleToFilters.key(_dialog->selectedNameFilter())); + + //default if not found + if (filter.isEmpty()) + filter = "ODF Text Document (.odt)"; + return filter; } commit a9d1eb47243ad736b463232b3ede82b3d87c9526 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Jun 11 15:22:07 2018 +0200 Implement appendFilter[Group], signal+slot Change-Id: I0a195de54a8631c2218f6704ca564c0c9f06becf diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index dd5f3c0ecc45..be8a6050426e 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -57,24 +57,6 @@ QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryU QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); } -void KDE5FilePicker::appendFilter(const QString& title, const QString& filter) -{ - QString t = title; - QString f = filter; - // '/' need to be escaped else they are assumed to be mime types by kfiledialog - //see the docs - t.replace("/", "\\/"); - - // openoffice gives us filters separated by ';' qt dialogs just want space separated - f.replace(";", " "); - - // make sure "*.*" is not used as "all files" - f.replace("*.*", "*"); - - _filters << QStringLiteral("%1 (%2)").arg(t, f); - _titleToFilters[t] = _filters.constLast(); -} - void KDE5FilePicker::setCurrentFilter(const QString& title) { _currentFilter = _titleToFilters.value(title); diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 675becf0bf68..a5ab496a289b 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -176,6 +176,9 @@ Q_SIGNALS: void setDisplayDirectorySignal(const OUString& rDir); void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue); + void appendFilterSignal(const OUString& rTitle, const OUString& rFilter); + void appendFilterGroupSignal(const OUString& rTitle, + const css::uno::Sequence<css::beans::StringPair>& rFilters); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } @@ -184,6 +187,17 @@ private Q_SLOTS: { return setValue(nControlAction, nControlAction, rValue); } + + void appendFilterSlot(const OUString& rTitle, const OUString& rFilter) + { + return appendFilter(rTitle, rFilter); + } + + void appendFilterGroupSlot(const OUString& rTitle, + const css::uno::Sequence<css::beans::StringPair>& rFilters) + { + return appendFilterGroup(rTitle, rFilters); + } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index ab3cc61191ed..c75c56c21095 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -107,6 +107,10 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) Qt::BlockingQueuedConnection); connect(this, &KDE5FilePicker::setValueSignal, this, &KDE5FilePicker::setValueSlot, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::appendFilterSignal, this, &KDE5FilePicker::appendFilterSlot, + Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::appendFilterGroupSignal, this, + &KDE5FilePicker::appendFilterGroupSlot, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -183,7 +187,29 @@ uno::Sequence<OUString> SAL_CALL KDE5FilePicker::getSelectedFiles() return seq; } -void SAL_CALL KDE5FilePicker::appendFilter(const OUString& title, const OUString& filter) {} +void SAL_CALL KDE5FilePicker::appendFilter(const OUString& title, const OUString& filter) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT appendFilterSignal(title, filter); + } + + QString t(toQString(title)); + QString f(toQString(filter)); + // '/' need to be escaped else they are assumed to be mime types by kfiledialog + //see the docs + t.replace("/", "\\/"); + + // libreoffice separates by filters by ';' qt dialogs by space + f.replace(";", " "); + + // make sure "*.*" is not used as "all files" + f.replace("*.*", "*"); + + _filters << QStringLiteral("%1 (%2)").arg(t, f); + _titleToFilters[t] = _filters.constLast(); +} void SAL_CALL KDE5FilePicker::setCurrentFilter(const OUString& title) {} @@ -193,9 +219,15 @@ OUString SAL_CALL KDE5FilePicker::getCurrentFilter() return filter; } -void SAL_CALL KDE5FilePicker::appendFilterGroup(const OUString& /*rGroupTitle*/, +void SAL_CALL KDE5FilePicker::appendFilterGroup(const OUString& rGroupTitle, const uno::Sequence<beans::StringPair>& filters) { + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT appendFilterGroupSignal(rGroupTitle, filters); + } + const sal_uInt16 length = filters.getLength(); for (sal_uInt16 i = 0; i < length; ++i) { commit 113b340f2728f8011d2812353f0b511ea2350eb8 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Fri Jun 8 22:49:26 2018 +0200 Distinguish between open vs. save file dialog Change-Id: I1b9dee1a8cd4034f64c2c1b843cee1863a5dc1d9 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 02135eaa4a9a..dd5f3c0ecc45 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -141,21 +141,6 @@ QString KDE5FilePicker::getLabel(sal_Int16 controlId) const return label; }*/ -/*void KDE5FilePicker::initialize(bool saveDialog) -{ - //default is opening - QFileDialog::AcceptMode operationMode - = saveDialog ? QFileDialog::AcceptSave : QFileDialog::AcceptOpen; - - _dialog->setAcceptMode(operationMode); - - if (saveDialog) - { - _dialog->setConfirmOverwrite(true); - _dialog->setFileMode(QFileDialog::AnyFile); - } -}*/ - void KDE5FilePicker::setWinId(sal_uIntPtr winId) { _winId = winId; } bool KDE5FilePicker::eventFilter(QObject* o, QEvent* e) diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index a920b9f3cbb7..ab3cc61191ed 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -452,6 +452,19 @@ void SAL_CALL KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args) OSL_TRACE("Unknown templates %d", templateId); return; } + + //default is opening + QFileDialog::AcceptMode operationMode + = saveDialog ? QFileDialog::AcceptSave : QFileDialog::AcceptOpen; + + _dialog->setAcceptMode(operationMode); + + if (saveDialog) + { + _dialog->setConfirmOverwrite(true); + _dialog->setFileMode(QFileDialog::AnyFile); + } + setTitle(VclResId(saveDialog ? STR_FPICKER_SAVE : STR_FPICKER_OPEN)); } commit c38e49e869c7f16713845e5ce1e71aeab643d2fb Author: Katarina Behrens <katarina.behr...@cib.de> Date: Fri Jun 8 22:40:45 2018 +0200 Implement setValue of fpicker checkboxes, signal+slot Change-Id: I0d75ef9f5584935d05a0526a626145e00761efd9 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index d3939e1d7e1f..02135eaa4a9a 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -91,18 +91,6 @@ QString KDE5FilePicker::getCurrentFilter() const return filter; } -void KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction, bool value) -{ - if (_customWidgets.contains(controlId)) - { - QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); - if (cb) - cb->setChecked(value); - } - else - qWarning() << "set value on unknown control" << controlId; -} - bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const { bool ret = false; diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index d303ba30a6ac..675becf0bf68 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -174,10 +174,16 @@ protected: Q_SIGNALS: void setTitleSignal(const OUString& rTitle); void setDisplayDirectorySignal(const OUString& rDir); + void setValueSignal(sal_Int16 nControlId, sal_Int16 nControlAction, + const css::uno::Any& rValue); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } void setDisplayDirectorySlot(const OUString& rDir) { return setDisplayDirectory(rDir); } + void setValueSlot(sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& rValue) + { + return setValue(nControlAction, nControlAction, rValue); + } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 96b6a0fe3c4f..a920b9f3cbb7 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -105,6 +105,8 @@ KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) connect(this, &KDE5FilePicker::setDisplayDirectorySignal /*(const OUString&)*/, this, &KDE5FilePicker::setDisplayDirectorySlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setValueSignal, this, &KDE5FilePicker::setValueSlot, + Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -205,6 +207,23 @@ void SAL_CALL KDE5FilePicker::appendFilterGroup(const OUString& /*rGroupTitle*/, void SAL_CALL KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction, const uno::Any& value) { + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setValueSignal(controlId, nControlAction, value); + } + + if (_customWidgets.contains(controlId)) + { + bool bChecked = false; + value >>= bChecked; + + QCheckBox* cb = dynamic_cast<QCheckBox*>(_customWidgets.value(controlId)); + if (cb) + cb->setChecked(bChecked); + } + else + SAL_WARN("vcl.kde5", "set value on unknown control " << controlId); } uno::Any SAL_CALL KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) @@ -433,7 +452,6 @@ void SAL_CALL KDE5FilePicker::initialize(const uno::Sequence<uno::Any>& args) OSL_TRACE("Unknown templates %d", templateId); return; } - setTitle(VclResId(saveDialog ? STR_FPICKER_SAVE : STR_FPICKER_OPEN)); } commit d61f5db2129ed6fe0d412d6247be4dc237fee328 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 7 15:48:12 2018 +0200 Show LibO's custom checkboxes in native fpicker Change-Id: I9cd6b0b393024957c3dec1bd7e381db62f711a24 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 9891439ae0ee..d3939e1d7e1f 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -153,20 +153,6 @@ QString KDE5FilePicker::getLabel(sal_Int16 controlId) const return label; }*/ -/*void KDE5FilePicker::addCheckBox(sal_Int16 controlId, const QString& label, bool hidden) -{ - auto resString = label; - resString.replace('~', '&'); - - auto widget = new QCheckBox(resString, _extraControls); - widget->setHidden(hidden); - if (!hidden) - { - _layout->addWidget(widget); - } - _customWidgets.insert(controlId, widget); -}*/ - /*void KDE5FilePicker::initialize(bool saveDialog) { //default is opening diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 759b2fccf790..96b6a0fe3c4f 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -303,6 +303,17 @@ void KDE5FilePicker::addCustomControl(sal_Int16 controlId) // the checkbox is created even for CHECKBOX_AUTOEXTENSION to simplify // code, but the checkbox is hidden and ignored bool hidden = controlId == CHECKBOX_AUTOEXTENSION; + auto resString = toQString(VclResId(resId)); + resString.replace('~', '&'); + + auto widget = new QCheckBox(resString, _extraControls); + widget->setHidden(hidden); + if (!hidden) + { + _layout->addWidget(widget); + } + _customWidgets.insert(controlId, widget); + break; } case PUSHBUTTON_PLAY: commit 611346f3e222a923d2eeafa7cf7e18420fcfee5b Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 7 14:20:07 2018 +0200 Basic native folder picker Change-Id: I1b77d7a1c8a4a3581554fb5c481b7d9039497ced diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 3a02c770eda6..d303ba30a6ac 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -25,6 +25,7 @@ #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> +#include <com/sun/star/ui/dialogs/XFolderPicker2.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <osl/conditn.hxx> @@ -37,13 +38,15 @@ #include <QtCore/QString> #include <QtCore/QStringList> #include <QtCore/QHash> +#include <QtWidgets/QFileDialog> class QFileDialog; class QGridLayout; class QWidget; typedef ::cppu::WeakComponentImplHelper<css::ui::dialogs::XFilePicker3, - css::ui::dialogs::XFilePickerControlAccess + css::ui::dialogs::XFilePickerControlAccess, + css::ui::dialogs::XFolderPicker2 // TODO css::ui::dialogs::XFilePreview , css::lang::XInitialization, css::lang::XServiceInfo> @@ -80,7 +83,7 @@ protected: bool allowRemoteUrls; public: - explicit KDE5FilePicker(const css::uno::Reference<css::uno::XComponentContext>&); + explicit KDE5FilePicker(QFileDialog::FileMode); virtual ~KDE5FilePicker() override; void enableFolderMode(); @@ -121,6 +124,10 @@ public: virtual void SAL_CALL setLabel(sal_Int16 nControlId, const OUString& rLabel) override; virtual OUString SAL_CALL getLabel(sal_Int16 nControlId) override; + // XFolderPicker stuff + virtual OUString SAL_CALL getDirectory() override; + virtual void SAL_CALL setDescription(const OUString& rDescription) override; + /* TODO XFilePreview virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ); diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 93e6d503d32b..759b2fccf790 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -77,7 +77,7 @@ uno::Sequence<OUString> FilePicker_getSupportedServiceNames() // KDE5FilePicker -KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) +KDE5FilePicker::KDE5FilePicker(QFileDialog::FileMode eMode) : KDE5FilePicker_Base(_helperMutex) , _dialog(new QFileDialog(nullptr, {}, QDir::homePath())) , _extraControls(new QWidget) @@ -94,6 +94,7 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) QStringLiteral("webdavs"), QStringLiteral("smb"), }); + _dialog->setFileMode(eMode); setMultiSelectionMode(false); @@ -231,6 +232,10 @@ OUString SAL_CALL KDE5FilePicker::getLabel(sal_Int16 controlId) return label; } +OUString SAL_CALL KDE5FilePicker::getDirectory() { return OUString(); } + +void SAL_CALL KDE5FilePicker::setDescription(const OUString&) {} + void KDE5FilePicker::addCustomControl(sal_Int16 controlId) { const char* resId = nullptr; diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx index ac6173e13550..37021cbe9315 100644 --- a/vcl/unx/kde5/KDE5SalInstance.cxx +++ b/vcl/unx/kde5/KDE5SalInstance.cxx @@ -49,9 +49,15 @@ SalFrame* KDE5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nSt } uno::Reference<ui::dialogs::XFilePicker2> -KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& xMSF) +KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& /*xMSF*/) { - return uno::Reference<ui::dialogs::XFilePicker2>(new KDE5FilePicker(xMSF)); + return uno::Reference<ui::dialogs::XFilePicker2>(new KDE5FilePicker(QFileDialog::ExistingFile)); +} + +uno::Reference<ui::dialogs::XFolderPicker2> +KDE5SalInstance::createFolderPicker(const uno::Reference<uno::XComponentContext>& /*xMSF*/) +{ + return uno::Reference<ui::dialogs::XFolderPicker2>(new KDE5FilePicker(QFileDialog::Directory)); } bool KDE5SalInstance::IsMainThread() const { return qApp->thread() == QThread::currentThread(); } diff --git a/vcl/unx/kde5/KDE5SalInstance.hxx b/vcl/unx/kde5/KDE5SalInstance.hxx index cc7d7ad7cbce..0bf30ab8b235 100644 --- a/vcl/unx/kde5/KDE5SalInstance.hxx +++ b/vcl/unx/kde5/KDE5SalInstance.hxx @@ -36,6 +36,9 @@ public: virtual css::uno::Reference<css::ui::dialogs::XFilePicker2> createFilePicker(const css::uno::Reference<css::uno::XComponentContext>&) override; + virtual css::uno::Reference<css::ui::dialogs::XFolderPicker2> + createFolderPicker(const css::uno::Reference<css::uno::XComponentContext>&) override; + virtual bool IsMainThread() const override; }; commit 14b7477f599fd740ddc62fea8acf3d234dc81234 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 7 13:26:59 2018 +0200 Implement setDisplayDirectory, signal+slot Change-Id: Ieb3fb6bb9afa8cddbfd7f14ddfb36faebd524701 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 3968a0f686a6..9891439ae0ee 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -53,8 +53,6 @@ KDE5FilePicker::~KDE5FilePicker() void KDE5FilePicker::setDefaultName(const QString& name) { _dialog->selectUrl(QUrl(name)); } -void KDE5FilePicker::setDisplayDirectory(const QString& dir) { _dialog->selectUrl(QUrl(dir)); } - QString KDE5FilePicker::getDisplayDirectory() const { return _dialog->directoryUrl().url(); } QList<QUrl> KDE5FilePicker::getSelectedFiles() const { return _dialog->selectedUrls(); } diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index 6078a53b0f98..3a02c770eda6 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -166,9 +166,11 @@ protected: Q_SIGNALS: void setTitleSignal(const OUString& rTitle); + void setDisplayDirectorySignal(const OUString& rDir); private Q_SLOTS: void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } + void setDisplayDirectorySlot(const OUString& rDir) { return setDisplayDirectory(rDir); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 8df045b3aa59..93e6d503d32b 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -101,6 +101,9 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, &KDE5FilePicker::setTitleSlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); + connect(this, &KDE5FilePicker::setDisplayDirectorySignal /*(const OUString&)*/, this, + &KDE5FilePicker::setDisplayDirectorySlot /*(const OUString&)*/, + Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -146,7 +149,16 @@ void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) {} void SAL_CALL KDE5FilePicker::setDefaultName(const OUString& name) {} -void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) {} +void SAL_CALL KDE5FilePicker::setDisplayDirectory(const OUString& dir) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setDisplayDirectorySignal(dir); + } + + _dialog->selectUrl(QUrl(toQString(dir))); +} OUString SAL_CALL KDE5FilePicker::getDisplayDirectory() { commit e8a1115567e3292a8de8b6e26f443b8b2edcba74 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Thu Jun 7 12:47:35 2018 +0200 Add setTitle functionality, signal+slot Change-Id: Ib79837ff08cabf8a27b6d154529399a5965ab148 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index 3e1387da7fd2..3968a0f686a6 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -46,8 +46,6 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -//void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); } - /*void KDE5FilePicker::setMultiSelectionMode(bool multiSelect) { _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index ea18b3298ed4..6078a53b0f98 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -163,6 +163,12 @@ private: protected: bool eventFilter(QObject* watched, QEvent* event) override; + +Q_SIGNALS: + void setTitleSignal(const OUString& rTitle); + +private Q_SLOTS: + void setTitleSlot(const OUString& rTitle) { return setTitle(rTitle); } }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index e505791cad03..8df045b3aa59 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -31,16 +31,15 @@ #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> #include <osl/mutex.hxx> - -#include <fpicker/strings.hrc> - #include "FPServiceInfo.hxx" #undef Region #include <unx/geninst.h> +#include <qt5/Qt5Tools.hxx> #include <QtCore/QDebug> +#include <QtCore/QThread> #include <QtCore/QUrl> #include <QtGui/QClipboard> #include <QtGui/QWindow> @@ -50,6 +49,7 @@ #include <QtWidgets/QWidget> #include <QtWidgets/QApplication> +#include <fpicker/strings.hrc> #include <strings.hrc> using namespace ::com::sun::star; @@ -99,6 +99,8 @@ KDE5FilePicker::KDE5FilePicker(const uno::Reference<uno::XComponentContext>&) connect(_dialog, &QFileDialog::filterSelected, this, &KDE5FilePicker::filterChanged); connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); + connect(this, &KDE5FilePicker::setTitleSignal /*(const OUString&)*/, this, + &KDE5FilePicker::setTitleSlot /*(const OUString&)*/, Qt::BlockingQueuedConnection); qApp->installEventFilter(this); setMultiSelectionMode(false); @@ -117,7 +119,16 @@ void SAL_CALL KDE5FilePicker::removeFilePickerListener(const uno::Reference<XFil m_xListener.clear(); } -void SAL_CALL KDE5FilePicker::setTitle(const OUString& title) {} +void SAL_CALL KDE5FilePicker::setTitle(const OUString& title) +{ + if (qApp->thread() != QThread::currentThread()) + { + SolarMutexReleaser aReleaser; + return Q_EMIT setTitleSignal(title); + } + + _dialog->setWindowTitle(toQString(title)); +} sal_Int16 SAL_CALL KDE5FilePicker::execute() { commit 8c7984a3f93e143772de705555558c6cd1695c3c Author: Katarina Behrens <katarina.behr...@cib.de> Date: Wed Jun 6 15:35:00 2018 +0200 We don't need to link X11 libs either Change-Id: I01b9f897abda67b12ed6f05844dca05dabb185a2 diff --git a/vcl/Library_vclplug_kde5.mk b/vcl/Library_vclplug_kde5.mk index 5e9559c159f1..655ae6b80d96 100644 --- a/vcl/Library_vclplug_kde5.mk +++ b/vcl/Library_vclplug_kde5.mk @@ -61,13 +61,6 @@ $(eval $(call gb_Library_use_externals,vclplug_kde5,\ epoxy \ )) -$(eval $(call gb_Library_add_libs,vclplug_kde5,\ - -lX11 \ - -lXext \ - -lSM \ - -lICE \ -)) - ifneq ($(QT5_HAVE_GLIB),) $(eval $(call gb_Library_add_defs,vclplug_kde5,\ $(QT5_GLIB_CFLAGS) \ commit 3b3c700fabc0e4581f8dceff563cbc1fe3a69972 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Wed Jun 6 13:32:47 2018 +0200 [Try to] get rid of dependency on X11 also kill KDE5SalDisplay with fire, it is not used anywhere anymore Change-Id: I4fe439b01322a6e3a809cf518e32d844c303daca diff --git a/configure.ac b/configure.ac index 724de9449c03..a3bfa9d3e65f 100644 --- a/configure.ac +++ b/configure.ac @@ -11199,7 +11199,7 @@ then PKG_CHECK_MODULES(KF5_XCB,[xcb],,[AC_MSG_ERROR([XCB not installed])]) KF5_CFLAGS="-I$kf5_incdir -I$kf5_incdir/KCoreAddons -I$kf5_incdir/KI18n -I$kf5_incdir/KConfigCore -I$kf5_incdir/KWindowSystem -I$kf5_incdir/KIOCore -I$kf5_incdir/KIOWidgets -I$kf5_incdir/KIOFileWidgets -I$qt5_incdir -I$qt5_incdir/QtCore -I$qt5_incdir/QtGui -I$qt5_incdir/QtWidgets -I$qt5_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT $KF5_XCB_CFLAGS" - KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network -lQt5X11Extras $KF5_XCB_LIBS" + KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network $KF5_XCB_LIBS" KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") AC_LANG_PUSH([C++]) diff --git a/vcl/Library_vclplug_kde5.mk b/vcl/Library_vclplug_kde5.mk index 37a830b068dd..5e9559c159f1 100644 --- a/vcl/Library_vclplug_kde5.mk +++ b/vcl/Library_vclplug_kde5.mk @@ -34,7 +34,6 @@ $(eval $(call gb_Library_add_defs,vclplug_kde5,\ $(eval $(call gb_Library_use_sdk_api,vclplug_kde5)) $(eval $(call gb_Library_use_libraries,vclplug_kde5,\ - vclplug_gen \ vclplug_qt5 \ vcl \ tl \ @@ -90,7 +89,6 @@ $(eval $(call gb_Library_add_exception_objects,vclplug_kde5,\ vcl/unx/kde5/KDE5FilePicker \ vcl/unx/kde5/KDE5FilePicker2 \ vcl/unx/kde5/KDE5SalData \ - vcl/unx/kde5/KDE5SalDisplay \ vcl/unx/kde5/KDE5SalFrame \ vcl/unx/kde5/KDE5SalGraphics \ vcl/unx/kde5/KDE5SalInstance \ diff --git a/vcl/unx/kde5/KDE5SalDisplay.cxx b/vcl/unx/kde5/KDE5SalDisplay.cxx deleted file mode 100644 index fa5e40f56ff9..000000000000 --- a/vcl/unx/kde5/KDE5SalDisplay.cxx +++ /dev/null @@ -1,93 +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 "VCLKDE5Application.hxx" -#include "KDE5SalDisplay.hxx" - -#ifdef Bool -#undef Bool -#endif - -#include <assert.h> - -SalKDE5Display* SalKDE5Display::selfptr = nullptr; - -SalKDE5Display::SalKDE5Display(Display* pDisp) - : SalX11Display(pDisp) -{ - assert(selfptr == nullptr); - selfptr = this; - xim_protocol = XInternAtom(pDisp_, "_XIM_PROTOCOL", False); -} - -SalKDE5Display::~SalKDE5Display() -{ - // in case never a frame opened - // clean up own members - doDestruct(); - selfptr = nullptr; - // prevent SalDisplay from closing KApplication's display - pDisp_ = nullptr; -} - -void SalKDE5Display::Yield() -{ - if (DispatchInternalEvent()) - return; - - // Prevent blocking from Drag'n'Drop events, which may have already have processed the event - if (XEventsQueued(pDisp_, QueuedAfterReading) == 0) - return; - - DBG_ASSERT(GetSalData()->m_pInstance->GetYieldMutex()->IsCurrentThread(), - "will crash soon since solar mutex not locked in SalKDE5Display::Yield"); - - /*XEvent event; - XNextEvent( pDisp_, &event ); - if( checkDirectInputEvent( &event )) - return; - qApp->x11ProcessEvent( &event );*/ -} - -// HACK: When using Qt event loop, input methods (japanese, etc.) will get broken because -// of XFilterEvent() getting called twice, once by Qt, once by LO (bnc#665112). -// This function is therefore called before any XEvent is passed to Qt event handling -// and if it is a keyboard event and no Qt widget is the active window (i.e. we are -// processing events for some LO window), then feed the event only to LO directly and skip Qt -// completely. Skipped events are KeyPress, KeyRelease and also _XIM_PROTOCOL client message -// (seems to be necessary too, hopefully there are not other internal XIM messages that -// would need this handling). -bool SalKDE5Display::checkDirectInputEvent(xcb_generic_event_t* ev) -{ - switch (ev->response_type & ~0x80) - { - case XCB_CLIENT_MESSAGE: - case XCB_KEY_PRESS: - case XCB_KEY_RELEASE: - if (QApplication::activeWindow() == nullptr) - { - // Dispatch(ev); - return true; - } - break; - } - return false; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5SalDisplay.hxx b/vcl/unx/kde5/KDE5SalDisplay.hxx deleted file mode 100644 index 640efdbc1e03..000000000000 --- a/vcl/unx/kde5/KDE5SalDisplay.hxx +++ /dev/null @@ -1,45 +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 <unx/saldisp.hxx> -#include <xcb/xcb.h> - -#ifdef CursorShape -#undef CursorShape -#endif - -class SalKDE5Display : public SalX11Display -{ -public: - explicit SalKDE5Display(Display* pDisp); - virtual ~SalKDE5Display() override; - static SalKDE5Display* self(); - virtual void Yield() override; - bool checkDirectInputEvent(xcb_generic_event_t* ev); - -private: - Atom xim_protocol; - static SalKDE5Display* selfptr; -}; - -inline SalKDE5Display* SalKDE5Display::self() { return selfptr; } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5SalFrame.hxx b/vcl/unx/kde5/KDE5SalFrame.hxx index 11a55b0aae29..58bdcd82f4c0 100644 --- a/vcl/unx/kde5/KDE5SalFrame.hxx +++ b/vcl/unx/kde5/KDE5SalFrame.hxx @@ -24,8 +24,6 @@ #undef Status #include <qt5/Qt5Frame.hxx> -#include <unx/saldisp.hxx> -#include <unx/salgdi.h> #include "KDE5SalGraphics.hxx" diff --git a/vcl/unx/kde5/KDE5SalGraphics.hxx b/vcl/unx/kde5/KDE5SalGraphics.hxx index 60870dd9d4af..77121459e8be 100644 --- a/vcl/unx/kde5/KDE5SalGraphics.hxx +++ b/vcl/unx/kde5/KDE5SalGraphics.hxx @@ -22,8 +22,6 @@ #include <memory> #include <rtl/string.hxx> -#include <unx/saldisp.hxx> -#include <unx/salgdi.h> #include <headless/svpgdi.hxx> #include <QtGui/QImage> diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx index b4e2b68e8045..ac6173e13550 100644 --- a/vcl/unx/kde5/KDE5SalInstance.cxx +++ b/vcl/unx/kde5/KDE5SalInstance.cxx @@ -30,7 +30,6 @@ #include "KDE5SalData.hxx" #include "KDE5SalInstance.hxx" #include "KDE5SalFrame.hxx" -#include "KDE5SalDisplay.hxx" using namespace com::sun::star; diff --git a/vcl/unx/kde5/VCLKDE5Application.cxx b/vcl/unx/kde5/VCLKDE5Application.cxx index 7ae9b5a4ee28..2d9532f1def9 100644 --- a/vcl/unx/kde5/VCLKDE5Application.cxx +++ b/vcl/unx/kde5/VCLKDE5Application.cxx @@ -21,8 +21,7 @@ #include <QtGui/QClipboard> #include <QtCore/QEvent> - -#include "KDE5SalDisplay.hxx" +#include <assert.h> VCLKDE5Application::VCLKDE5Application(int argc, char** argv) : QApplication(argc, argv) commit 9199f5d4e971df0b2666226bb14845738bb4d266 Author: Katarina Behrens <katarina.behr...@cib.de> Date: Wed Jun 6 12:20:13 2018 +0200 Basic KDE5 native file picker opens now Change-Id: I3bb5d45f3337fbe26d80acb1fac7a433de904546 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index bfbe56304d0d..3e1387da7fd2 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -48,19 +48,7 @@ KDE5FilePicker::~KDE5FilePicker() //void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); } -/*bool KDE5FilePicker::execute() -{ - if (!_filters.isEmpty()) - _dialog->setNameFilters(_filters); - if (!_currentFilter.isEmpty()) - _dialog->selectNameFilter(_currentFilter); - - _dialog->show(); - //block and wait for user input - return _dialog->exec() == QFileDialog::Accepted; -} - -void KDE5FilePicker::setMultiSelectionMode(bool multiSelect) +/*void KDE5FilePicker::setMultiSelectionMode(bool multiSelect) { _dialog->setFileMode(multiSelect ? QFileDialog::ExistingFiles : QFileDialog::ExistingFile); } diff --git a/vcl/unx/kde5/KDE5FilePicker2.cxx b/vcl/unx/kde5/KDE5FilePicker2.cxx index 12a29c8d4d29..e505791cad03 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -119,7 +119,17 @@ void SAL_CALL KDE5FilePicker::removeFilePickerListener(const uno::Reference<XFil void SAL_CALL KDE5FilePicker::setTitle(const OUString& title) {} -sal_Int16 SAL_CALL KDE5FilePicker::execute() { return 0; } +sal_Int16 SAL_CALL KDE5FilePicker::execute() +{ + if (!_filters.isEmpty()) + _dialog->setNameFilters(_filters); + if (!_currentFilter.isEmpty()) + _dialog->selectNameFilter(_currentFilter); + + _dialog->show(); + //block and wait for user input + return _dialog->exec() == QFileDialog::Accepted; +} void SAL_CALL KDE5FilePicker::setMultiSelectionMode(sal_Bool multiSelect) {} diff --git a/vcl/unx/kde5/KDE5SalInstance.cxx b/vcl/unx/kde5/KDE5SalInstance.cxx index 120bf409b36c..b4e2b68e8045 100644 --- a/vcl/unx/kde5/KDE5SalInstance.cxx +++ b/vcl/unx/kde5/KDE5SalInstance.cxx @@ -26,6 +26,7 @@ #include <osl/process.h> +#include "KDE5FilePicker.hxx" #include "KDE5SalData.hxx" #include "KDE5SalInstance.hxx" #include "KDE5SalFrame.hxx" @@ -51,7 +52,7 @@ SalFrame* KDE5SalInstance::CreateFrame(SalFrame* pParent, SalFrameStyleFlags nSt uno::Reference<ui::dialogs::XFilePicker2> KDE5SalInstance::createFilePicker(const uno::Reference<uno::XComponentContext>& xMSF) { - return SalInstance::createFilePicker(xMSF); + return uno::Reference<ui::dialogs::XFilePicker2>(new KDE5FilePicker(xMSF)); } bool KDE5SalInstance::IsMainThread() const { return qApp->thread() == QThread::currentThread(); } commit 6b8c90a370c197190491c1075a4e1a3f2967d48b Author: Katarina Behrens <katarina.behr...@cib.de> Date: Mon Jun 4 18:49:45 2018 +0200 Start folding KDE5FilePicker2 into KDE5FilePicker Change-Id: I1004ccba52fb23549dd85c20068da5c62d7bc964 diff --git a/vcl/unx/kde5/KDE5FilePicker.cxx b/vcl/unx/kde5/KDE5FilePicker.cxx index bda9de9b9ae3..bfbe56304d0d 100644 --- a/vcl/unx/kde5/KDE5FilePicker.cxx +++ b/vcl/unx/kde5/KDE5FilePicker.cxx @@ -34,32 +34,6 @@ // KDE5FilePicker -KDE5FilePicker::KDE5FilePicker(QObject* parent) - : QObject(parent) - , _dialog(new QFileDialog(nullptr, {}, QDir::homePath())) - , _extraControls(new QWidget) - , _layout(new QGridLayout(_extraControls)) - , _winId(0) - , allowRemoteUrls(false) -{ - _dialog->setSupportedSchemes({ - QStringLiteral("file"), - QStringLiteral("ftp"), - QStringLiteral("http"), - QStringLiteral("https"), - QStringLiteral("webdav"), - QStringLiteral("webdavs"), - QStringLiteral("smb"), - }); - - setMultiSelectionMode(false); - - connect(_dialog, &QFileDialog::filterSelected, this, &KDE5FilePicker::filterChanged); - connect(_dialog, &QFileDialog::fileSelected, this, &KDE5FilePicker::selectionChanged); - - qApp->installEventFilter(this); -} - void KDE5FilePicker::enableFolderMode() { _dialog->setOption(QFileDialog::ShowDirsOnly, true); @@ -72,9 +46,9 @@ KDE5FilePicker::~KDE5FilePicker() delete _dialog; } -void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); } +//void KDE5FilePicker::setTitle(const QString& title) { _dialog->setWindowTitle(title); } -bool KDE5FilePicker::execute() +/*bool KDE5FilePicker::execute() { if (!_filters.isEmpty()) _dialog->setNameFilters(_filters); @@ -133,7 +107,7 @@ QString KDE5FilePicker::getCurrentFilter() const return filter; } -void KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/, bool value) +void KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 nControlAction, bool value) { if (_customWidgets.contains(controlId)) { @@ -145,7 +119,7 @@ void KDE5FilePicker::setValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/, qWarning() << "set value on unknown control" << controlId; } -bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 /*nControlAction*/) const +bool KDE5FilePicker::getValue(sal_Int16 controlId, sal_Int16 nControlAction) const { bool ret = false; if (_customWidgets.contains(controlId)) @@ -193,9 +167,9 @@ QString KDE5FilePicker::getLabel(sal_Int16 controlId) const qWarning() << "get label on unknown control" << controlId; return label; -} +}*/ -void KDE5FilePicker::addCheckBox(sal_Int16 controlId, const QString& label, bool hidden) +/*void KDE5FilePicker::addCheckBox(sal_Int16 controlId, const QString& label, bool hidden) { auto resString = label; resString.replace('~', '&'); @@ -207,9 +181,9 @@ void KDE5FilePicker::addCheckBox(sal_Int16 controlId, const QString& label, bool _layout->addWidget(widget); } _customWidgets.insert(controlId, widget); -} +}*/ -void KDE5FilePicker::initialize(bool saveDialog) +/*void KDE5FilePicker::initialize(bool saveDialog) { //default is opening QFileDialog::AcceptMode operationMode @@ -222,7 +196,7 @@ void KDE5FilePicker::initialize(bool saveDialog) _dialog->setConfirmOverwrite(true); _dialog->setFileMode(QFileDialog::AnyFile); } -} +}*/ void KDE5FilePicker::setWinId(sal_uIntPtr winId) { _winId = winId; } diff --git a/vcl/unx/kde5/KDE5FilePicker.hxx b/vcl/unx/kde5/KDE5FilePicker.hxx index d999f7bf7a09..ea18b3298ed4 100644 --- a/vcl/unx/kde5/KDE5FilePicker.hxx +++ b/vcl/unx/kde5/KDE5FilePicker.hxx @@ -19,21 +19,43 @@ #pragma once +#include <cppuhelper/compbase.hxx> + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/ui/dialogs/XFilePicker3.hpp> +#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> + +#include <osl/conditn.hxx> +#include <osl/mutex.hxx> +#include <rtl/ustrbuf.hxx> + +#include <functional> + #include <QtCore/QObject> #include <QtCore/QString> #include <QtCore/QStringList> #include <QtCore/QHash> -#include <sal/types.h> - class QFileDialog; -class QWidget; class QGridLayout; +class QWidget; + +typedef ::cppu::WeakComponentImplHelper<css::ui::dialogs::XFilePicker3, + css::ui::dialogs::XFilePickerControlAccess + // TODO css::ui::dialogs::XFilePreview + , + css::lang::XInitialization, css::lang::XServiceInfo> + KDE5FilePicker_Base; -class KDE5FilePicker : public QObject +class KDE5FilePicker : public QObject, public KDE5FilePicker_Base { Q_OBJECT protected: + css::uno::Reference<css::ui::dialogs::XFilePickerListener> m_xListener; + osl::Mutex _helperMutex; + //the dialog to display QFileDialog* _dialog; @@ -58,53 +80,89 @@ protected: bool allowRemoteUrls; public: - explicit KDE5FilePicker(QObject* parent = nullptr); - ~KDE5FilePicker() override; + explicit KDE5FilePicker(const css::uno::Reference<css::uno::XComponentContext>&); + virtual ~KDE5FilePicker() override; void enableFolderMode(); + // XFilePickerNotifier + virtual void SAL_CALL addFilePickerListener( + const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) override; + virtual void SAL_CALL removeFilePickerListener( + const css::uno::Reference<css::ui::dialogs::XFilePickerListener>& xListener) override; + // XExecutableDialog functions - void setTitle(const QString& rTitle); - bool execute(); + virtual void SAL_CALL setTitle(const OUString& rTitle) override; + virtual sal_Int16 SAL_CALL execute() override; // XFilePicker functions - void setMultiSelectionMode(bool bMode); - void setDefaultName(const QString& rName); - void setDisplayDirectory(const QString& rDirectory); - QString getDisplayDirectory() const; + virtual void SAL_CALL setMultiSelectionMode(sal_Bool bMode) override; + virtual void SAL_CALL setDefaultName(const OUString& rName) override; + virtual void SAL_CALL setDisplayDirectory(const OUString& rDirectory) override; + virtual OUString SAL_CALL getDisplayDirectory() override; + virtual css::uno::Sequence<OUString> SAL_CALL getFiles() override; // XFilterManager functions - void appendFilter(const QString& rTitle, const QString& rFilter); - void setCurrentFilter(const QString& rTitle); - QString getCurrentFilter() const; + virtual void SAL_CALL appendFilter(const OUString& rTitle, const OUString& rFilter) override; + virtual void SAL_CALL setCurrentFilter(const OUString& rTitle) override; + virtual OUString SAL_CALL getCurrentFilter() override; + + // XFilterGroupManager functions + virtual void SAL_CALL + appendFilterGroup(const OUString& rGroupTitle, + const css::uno::Sequence<css::beans::StringPair>& rFilters) override; // XFilePickerControlAccess functions - void setValue(sal_Int16 nControlId, sal_Int16 nControlAction, bool rValue); - bool getValue(sal_Int16 nControlId, sal_Int16 nControlAction) const; - void enableControl(sal_Int16 nControlId, bool bEnable); - void setLabel(sal_Int16 nControlId, const QString& rLabel); - QString getLabel(sal_Int16 nControlId) const; + 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; + + /* TODO XFilePreview + + virtual css::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats( ); + virtual sal_Int32 SAL_CALL getTargetColorDepth( ); + virtual sal_Int32 SAL_CALL getAvailableWidth( ); + virtual sal_Int32 SAL_CALL getAvailableHeight( ); + virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const css::uno::Any &rImage ); + virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState ); + virtual sal_Bool SAL_CALL getShowState( ); + */ // XFilePicker2 functions - QList<QUrl> getSelectedFiles() const; + virtual css::uno::Sequence<OUString> SAL_CALL getSelectedFiles() override; + + void setWinId(sal_uIntPtr winId); // XInitialization - void initialize(bool saveDialog); + virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) override; - //add a custom control widget to the file dialog - void addCheckBox(sal_Int16 nControlId, const QString& label, bool hidden); + // XCancellable + virtual void SAL_CALL cancel() override; - void setWinId(sal_uIntPtr winId); + // XEventListener + virtual void disposing(const css::lang::EventObject& rEvent); + using cppu::WeakComponentImplHelperBase::disposing; -private: - Q_DISABLE_COPY(KDE5FilePicker) + // 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; -protected: - bool eventFilter(QObject* watched, QEvent* event) override; +private: + //add a custom control widget to the file dialog + void addCustomControl(sal_Int16 controlId); -Q_SIGNALS: + // emit XFilePickerListener controlStateChanged event void filterChanged(); + // emit XFilePickerListener fileSelectionChanged event void selectionChanged(); + +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 index b2bafcdda95b..12a29c8d4d29 100644 --- a/vcl/unx/kde5/KDE5FilePicker2.cxx +++ b/vcl/unx/kde5/KDE5FilePicker2.cxx @@ -17,7 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include "KDE5FilePicker2.hxx" +#include "KDE5FilePicker.hxx" #include <com/sun/star/lang/DisposedException.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> @@ -40,6 +40,16 @@ #include <unx/geninst.h> +#include <QtCore/QDebug> +#include <QtCore/QUrl> +#include <QtGui/QClipboard> +#include <QtGui/QWindow> +#include <QtWidgets/QCheckBox> +#include <QtWidgets/QFileDialog> +#include <QtWidgets/QGridLayout> +#include <QtWidgets/QWidget> +#include <QtWidgets/QApplication> + #include <strings.hrc> using namespace ::com::sun::star; @@ -60,51 +70,70 @@ uno::Sequence<OUString> FilePicker_getSupportedServiceNames() uno::Sequence<OUString> aRet(3); aRet[0] = "com.sun.star.ui.dialogs.FilePicker"; aRet[1] = "com.sun.star.ui.dialogs.SystemFilePicker"; - aRet[2] = "com.sun.star.ui.dialogs.KDE5FilePicker2"; + aRet[2] = "com.sun.star.ui.dialogs.KDE5FilePicker"; return aRet; } } -// KDE5FilePicker2 +// KDE5FilePicker ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits