summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fpicker/Library_fps.mk1
-rw-r--r--fpicker/source/win32/VistaFilePicker.cxx212
-rw-r--r--fpicker/source/win32/VistaFilePicker.hxx10
-rw-r--r--fpicker/source/win32/VistaFilePickerEventHandler.cxx36
-rw-r--r--fpicker/source/win32/VistaFilePickerImpl.cxx307
-rw-r--r--fpicker/source/win32/VistaFilePickerImpl.hxx66
-rw-r--r--fpicker/source/win32/asyncrequests.cxx227
-rw-r--r--fpicker/source/win32/asyncrequests.hxx211
-rw-r--r--fpicker/source/win32/requests.hxx76
9 files changed, 334 insertions, 812 deletions
diff --git a/fpicker/Library_fps.mk b/fpicker/Library_fps.mk
index e41a8a40a081..047e888e3954 100644
--- a/fpicker/Library_fps.mk
+++ b/fpicker/Library_fps.mk
@@ -54,7 +54,6 @@ $(eval $(call gb_Library_add_libs,fps,\
endif
$(eval $(call gb_Library_add_exception_objects,fps,\
- fpicker/source/win32/asyncrequests \
fpicker/source/win32/FilterContainer \
fpicker/source/win32/VistaFilePicker \
fpicker/source/win32/VistaFilePickerEventHandler \
diff --git a/fpicker/source/win32/VistaFilePicker.cxx b/fpicker/source/win32/VistaFilePicker.cxx
index e391bcf53c58..367f938dd3a6 100644
--- a/fpicker/source/win32/VistaFilePicker.cxx
+++ b/fpicker/source/win32/VistaFilePicker.cxx
@@ -19,8 +19,6 @@
#include <sal/config.h>
-#include <memory>
-
#include "VistaFilePicker.hxx"
#include "WinImplHelper.hxx"
@@ -36,7 +34,6 @@
#include <cppuhelper/interfacecontainer.h>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/processfactory.hxx>
-#include <osl/mutex.hxx>
#include <osl/file.hxx>
#include <officecfg/Office/Common.hxx>
@@ -48,9 +45,6 @@ namespace vista{
VistaFilePicker::VistaFilePicker(bool bFolderPicker)
: TVistaFilePickerBase (m_aMutex )
- , m_rDialog (std::make_shared<VistaFilePickerImpl>())
- , m_aAsyncExecute (m_rDialog )
- , m_nFilePickerThreadId (0 )
, m_bInitialized (false )
, m_bFolderPicker (bFolderPicker )
{
@@ -62,20 +56,20 @@ VistaFilePicker::~VistaFilePicker()
void SAL_CALL VistaFilePicker::addFilePickerListener(const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_ADD_PICKER_LISTENER);
- rRequest->setArgument(PROP_PICKER_LISTENER, xListener);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_ADD_PICKER_LISTENER);
+ rRequest.setArgument(PROP_PICKER_LISTENER, xListener);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::removeFilePickerListener(const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener )
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_REMOVE_PICKER_LISTENER);
- rRequest->setArgument(PROP_PICKER_LISTENER, xListener);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_REMOVE_PICKER_LISTENER);
+ rRequest.setArgument(PROP_PICKER_LISTENER, xListener);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void VistaFilePicker::disposing(const css::lang::EventObject& /*aEvent*/)
@@ -86,95 +80,95 @@ void SAL_CALL VistaFilePicker::setMultiSelectionMode(sal_Bool bMode)
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_MULTISELECTION_MODE);
- rRequest->setArgument(PROP_MULTISELECTION_MODE, bMode);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_MULTISELECTION_MODE);
+ rRequest.setArgument(PROP_MULTISELECTION_MODE, bMode);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::setTitle(const OUString& sTitle)
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_TITLE);
- rRequest->setArgument(PROP_TITLE, sTitle);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_TITLE);
+ rRequest.setArgument(PROP_TITLE, sTitle);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::appendFilter(const OUString& sTitle ,
const OUString& sFilter)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_APPEND_FILTER);
- rRequest->setArgument(PROP_FILTER_TITLE, sTitle );
- rRequest->setArgument(PROP_FILTER_VALUE, sFilter);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_APPEND_FILTER);
+ rRequest.setArgument(PROP_FILTER_TITLE, sTitle );
+ rRequest.setArgument(PROP_FILTER_VALUE, sFilter);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::setCurrentFilter(const OUString& sTitle)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_CURRENT_FILTER);
- rRequest->setArgument(PROP_FILTER_TITLE, sTitle);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_CURRENT_FILTER);
+ rRequest.setArgument(PROP_FILTER_TITLE, sTitle);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
OUString SAL_CALL VistaFilePicker::getCurrentFilter()
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_GET_CURRENT_FILTER);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_GET_CURRENT_FILTER);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED);
+ m_rDialog.doRequest(rRequest);
- const OUString sTitle = rRequest->getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
+ const OUString sTitle = rRequest.getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
return sTitle;
}
void SAL_CALL VistaFilePicker::appendFilterGroup(const OUString& /*sGroupTitle*/,
const css::uno::Sequence< css::beans::StringPair >& rFilters )
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_APPEND_FILTERGROUP);
- rRequest->setArgument(PROP_FILTER_GROUP, rFilters);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_APPEND_FILTERGROUP);
+ rRequest.setArgument(PROP_FILTER_GROUP, rFilters);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::setDefaultName(const OUString& sName )
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_DEFAULT_NAME);
- rRequest->setArgument(PROP_FILENAME, sName);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_DEFAULT_NAME);
+ rRequest.setArgument(PROP_FILENAME, sName);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::setDisplayDirectory(const OUString& sDirectory)
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_DIRECTORY);
- rRequest->setArgument(PROP_DIRECTORY, sDirectory);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_DIRECTORY);
+ rRequest.setArgument(PROP_DIRECTORY, sDirectory);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
OUString SAL_CALL VistaFilePicker::getDisplayDirectory()
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_GET_DIRECTORY);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED);
- const OUString sDirectory = rRequest->getArgumentOrDefault(PROP_DIRECTORY, OUString());
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_GET_DIRECTORY);
+ m_rDialog.doRequest(rRequest);
+ const OUString sDirectory = rRequest.getArgumentOrDefault(PROP_DIRECTORY, OUString());
return sDirectory;
}
@@ -193,37 +187,26 @@ css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getFiles()
css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getSelectedFiles()
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_GET_SELECTED_FILES);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_GET_SELECTED_FILES);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED);
+ m_rDialog.doRequest(rRequest);
- const css::uno::Sequence< OUString > lFiles = rRequest->getArgumentOrDefault(PROP_SELECTED_FILES, css::uno::Sequence< OUString >());
+ const css::uno::Sequence< OUString > lFiles = rRequest.getArgumentOrDefault(PROP_SELECTED_FILES, css::uno::Sequence< OUString >());
m_lLastFiles = lFiles;
return lFiles;
}
void VistaFilePicker::ensureInit()
{
- bool bInitialized(false);
- {
- osl::MutexGuard aGuard(m_aMutex);
- bInitialized = m_bInitialized;
- }
-
- if ( !bInitialized )
+ if ( !m_bInitialized )
{
if (m_bFolderPicker)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_CREATE_FOLDER_PICKER);
- if ( ! m_aAsyncExecute.isRunning())
- m_aAsyncExecute.create();
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
- {
- osl::MutexGuard aGuard(m_aMutex);
- m_bInitialized = true;
- }
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_CREATE_FOLDER_PICKER);
+ m_rDialog.doRequest(rRequest);
+ m_bInitialized = true;
}
else
{
@@ -238,14 +221,14 @@ void VistaFilePicker::ensureInit()
{
ensureInit();
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SHOW_DIALOG_MODAL);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SHOW_DIALOG_MODAL);
- // if we want to show a modal window, the calling thread needs to process messages
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::PROCESS_MESSAGES);
+ // show a modal window
+ m_rDialog.doRequest(rRequest);
- const bool bOK = rRequest->getArgumentOrDefault(PROP_DIALOG_SHOW_RESULT, false );
- m_lLastFiles = rRequest->getArgumentOrDefault(PROP_SELECTED_FILES , css::uno::Sequence< OUString >());
+ const bool bOK = rRequest.getArgumentOrDefault(PROP_DIALOG_SHOW_RESULT, false );
+ m_lLastFiles = rRequest.getArgumentOrDefault(PROP_SELECTED_FILES , css::uno::Sequence< OUString >());
::sal_Int16 nResult = css::ui::dialogs::ExecutableDialogResults::CANCEL;
if (bOK)
@@ -259,57 +242,57 @@ void SAL_CALL VistaFilePicker::setValue( ::sal_Int16 nControlId ,
::sal_Int16 nControlAction,
const css::uno::Any& aValue )
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_CONTROL_VALUE);
- rRequest->setArgument(PROP_CONTROL_ID , nControlId );
- rRequest->setArgument(PROP_CONTROL_ACTION, nControlAction);
- rRequest->setArgument(PROP_CONTROL_VALUE , aValue );
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_CONTROL_VALUE);
+ rRequest.setArgument(PROP_CONTROL_ID , nControlId );
+ rRequest.setArgument(PROP_CONTROL_ACTION, nControlAction);
+ rRequest.setArgument(PROP_CONTROL_VALUE , aValue );
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
css::uno::Any SAL_CALL VistaFilePicker::getValue(::sal_Int16 nControlId ,
::sal_Int16 nControlAction)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_GET_CONTROL_VALUE);
- rRequest->setArgument(PROP_CONTROL_ID , nControlId );
- rRequest->setArgument(PROP_CONTROL_ACTION, nControlAction);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_GET_CONTROL_VALUE);
+ rRequest.setArgument(PROP_CONTROL_ID , nControlId );
+ rRequest.setArgument(PROP_CONTROL_ACTION, nControlAction);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED);
- return rRequest->getValue(PROP_CONTROL_VALUE);
+ m_rDialog.doRequest(rRequest);
+ return rRequest.getValue(PROP_CONTROL_VALUE);
}
void SAL_CALL VistaFilePicker::enableControl(::sal_Int16 nControlId,
sal_Bool bEnable )
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_ENABLE_CONTROL);
- rRequest->setArgument(PROP_CONTROL_ID , nControlId);
- rRequest->setArgument(PROP_CONTROL_ENABLE, bEnable );
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_ENABLE_CONTROL);
+ rRequest.setArgument(PROP_CONTROL_ID , nControlId);
+ rRequest.setArgument(PROP_CONTROL_ENABLE, bEnable );
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
void SAL_CALL VistaFilePicker::setLabel( ::sal_Int16 nControlId,
const OUString& sLabel )
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_SET_CONTROL_LABEL);
- rRequest->setArgument(PROP_CONTROL_ID , nControlId);
- rRequest->setArgument(PROP_CONTROL_LABEL, sLabel );
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_SET_CONTROL_LABEL);
+ rRequest.setArgument(PROP_CONTROL_ID , nControlId);
+ rRequest.setArgument(PROP_CONTROL_LABEL, sLabel );
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ m_rDialog.doRequest(rRequest);
}
OUString SAL_CALL VistaFilePicker::getLabel(::sal_Int16 nControlId)
{
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (VistaFilePickerImpl::E_GET_CONTROL_LABEL);
- rRequest->setArgument(PROP_CONTROL_ID, nControlId);
+ Request rRequest;
+ rRequest.setRequest (VistaFilePickerImpl::E_GET_CONTROL_LABEL);
+ rRequest.setArgument(PROP_CONTROL_ID, nControlId);
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED);
- const OUString sLabel = rRequest->getArgumentOrDefault(PROP_CONTROL_LABEL, OUString());
+ m_rDialog.doRequest(rRequest);
+ const OUString sLabel = rRequest.getArgumentOrDefault(PROP_CONTROL_LABEL, OUString());
return sLabel;
}
@@ -479,23 +462,18 @@ void SAL_CALL VistaFilePicker::initialize(const css::uno::Sequence< css::uno::An
{
lArguments[1] >>= xParentWindow;
}
- RequestRef rRequest = std::make_shared<Request>();
+ Request rRequest;
if (bFileOpenDialog)
- rRequest->setRequest (VistaFilePickerImpl::E_CREATE_OPEN_DIALOG);
+ rRequest.setRequest (VistaFilePickerImpl::E_CREATE_OPEN_DIALOG);
else
- rRequest->setRequest (VistaFilePickerImpl::E_CREATE_SAVE_DIALOG);
- rRequest->setArgument(PROP_FEATURES, nFeatures);
- rRequest->setArgument(PROP_TEMPLATE_DESCR, nTemplate);
+ rRequest.setRequest (VistaFilePickerImpl::E_CREATE_SAVE_DIALOG);
+ rRequest.setArgument(PROP_FEATURES, nFeatures);
+ rRequest.setArgument(PROP_TEMPLATE_DESCR, nTemplate);
if(xParentWindow.is())
- rRequest->setArgument(PROP_PARENT_WINDOW, xParentWindow);
- if ( ! m_aAsyncExecute.isRunning())
- m_aAsyncExecute.create();
- m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ rRequest.setArgument(PROP_PARENT_WINDOW, xParentWindow);
+ m_rDialog.doRequest(rRequest);
- {
- osl::MutexGuard aGuard(m_aMutex);
- m_bInitialized = true;
- }
+ m_bInitialized = true;
}
void SAL_CALL VistaFilePicker::cancel()
diff --git a/fpicker/source/win32/VistaFilePicker.hxx b/fpicker/source/win32/VistaFilePicker.hxx
index 026c0e859c09..db4235a1dc5f 100644
--- a/fpicker/source/win32/VistaFilePicker.hxx
+++ b/fpicker/source/win32/VistaFilePicker.hxx
@@ -19,7 +19,7 @@
#pragma once
-#include "asyncrequests.hxx"
+#include "requests.hxx"
#include "VistaFilePickerImpl.hxx"
#include "VistaFilePickerEventHandler.hxx"
@@ -211,13 +211,7 @@ public:
css::uno::Sequence< OUString > m_lLastFiles;
- /** execute the COM dialog within a STA thread
- * Must be used on the heap ... because it's implemented as OSL thread .-)
- */
- RequestHandlerRef m_rDialog;
- AsyncRequests m_aAsyncExecute;
-
- oslThreadIdentifier m_nFilePickerThreadId;
+ VistaFilePickerImpl m_rDialog;
bool m_bInitialized;
const bool m_bFolderPicker;
diff --git a/fpicker/source/win32/VistaFilePickerEventHandler.cxx b/fpicker/source/win32/VistaFilePickerEventHandler.cxx
index c4a231164ef8..74e7682392c4 100644
--- a/fpicker/source/win32/VistaFilePickerEventHandler.cxx
+++ b/fpicker/source/win32/VistaFilePickerEventHandler.cxx
@@ -19,11 +19,9 @@
#include <sal/config.h>
-#include <memory>
-
#include "VistaFilePickerEventHandler.hxx"
-#include "asyncrequests.hxx"
+#include "requests.hxx"
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/embed/XStorage.hpp>
@@ -238,21 +236,18 @@ const OUStringLiteral PROP_PICKER_LISTENER = u"picker_listener";
namespace {
-class AsyncPickerEvents : public RequestHandler
+class PickerEvents
{
public:
- AsyncPickerEvents()
- {}
-
- virtual void before() override
+ PickerEvents()
{}
- virtual void doRequest(const RequestRef& rRequest) override
+ void doRequest(Request& rRequest)
{
- const ::sal_Int32 nEventID = rRequest->getRequest();
- const ::sal_Int16 nControlID = rRequest->getArgumentOrDefault(PROP_CONTROL_ID, ::sal_Int16(0));
- const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest->getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
+ const ::sal_Int32 nEventID = rRequest.getRequest();
+ const ::sal_Int16 nControlID = rRequest.getArgumentOrDefault(PROP_CONTROL_ID, ::sal_Int16(0));
+ const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest.getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
if ( ! xListener.is())
return;
@@ -285,9 +280,6 @@ public:
// no default here. Let compiler detect changes on enum set !
}
}
-
- virtual void after() override
- {}
};
}
@@ -295,8 +287,7 @@ public:
void VistaFilePickerEventHandler::impl_sendEvent( EEventType eEventType,
::sal_Int16 nControlID)
{
- // See special handling in ~AsyncRequests for this static
- static AsyncRequests aNotify(std::make_shared<AsyncPickerEvents>());
+ static PickerEvents aNotify;
::cppu::OInterfaceContainerHelper* pContainer = m_lListener.getContainer( cppu::UnoType<css::ui::dialogs::XFilePickerListener>::get());
if ( ! pContainer)
@@ -309,14 +300,13 @@ void VistaFilePickerEventHandler::impl_sendEvent( EEventType eEventType,
{
css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener (pIterator.next(), css::uno::UNO_QUERY);
- RequestRef rRequest = std::make_shared<Request>();
- rRequest->setRequest (eEventType);
- rRequest->setArgument(PROP_PICKER_LISTENER, xListener);
+ Request rRequest;
+ rRequest.setRequest (eEventType);
+ rRequest.setArgument(PROP_PICKER_LISTENER, xListener);
if ( nControlID )
- rRequest->setArgument(PROP_CONTROL_ID, nControlID);
+ rRequest.setArgument(PROP_CONTROL_ID, nControlID);
- aNotify.triggerRequestDirectly(rRequest);
- //aNotify.triggerRequestNonBlocked(rRequest);
+ aNotify.doRequest(rRequest);
}
catch(const css::uno::RuntimeException&)
{
diff --git a/fpicker/source/win32/VistaFilePickerImpl.cxx b/fpicker/source/win32/VistaFilePickerImpl.cxx
index 5e275e4657c8..0c1518b9527c 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.cxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.cxx
@@ -34,7 +34,6 @@
#include <fpicker/strings.hrc>
#include <fpsofficeResMgr.hxx>
#include <osl/file.hxx>
-#include <osl/mutex.hxx>
#include <rtl/process.h>
#include <o3tl/char16_t2wchar_t.hxx>
#include "WinImplHelper.hxx"
@@ -112,10 +111,13 @@ public:
virtual sal::systools::COMReference<IShellItemArray> getResult(bool bInExecute)
{
sal::systools::COMReference<IShellItem> iItem;
- if (bInExecute)
- m_iDialog->GetCurrentSelection(&iItem);
- else
- m_iDialog->GetResult(&iItem);
+ if (m_iDialog.is())
+ {
+ if (bInExecute)
+ m_iDialog->GetCurrentSelection(&iItem);
+ else
+ m_iDialog->GetResult(&iItem);
+ }
void* iItems = nullptr;
if (iItem.is())
SHCreateShellItemArrayFromShellItem(iItem.get(), IID_IShellItemArray, &iItems);
@@ -144,8 +146,15 @@ public:
{
sal::systools::COMReference<IShellItemArray> iItems;
TFileOpenDialog iDialog(getComPtr(), sal::systools::COM_QUERY_THROW);
- if (FAILED(bInExecute ? iDialog->GetSelectedItems(&iItems) : iDialog->GetResults(&iItems)))
+ bool bGetResult = false;
+ if (!iDialog.is())
+ bGetResult = true;
+ else if (FAILED(bInExecute ? iDialog->GetSelectedItems(&iItems) : iDialog->GetResults(&iItems)))
+ bGetResult = true;
+
+ if (bGetResult)
iItems = TDialogImplBase::getResult(bInExecute);
+
return iItems;
}
};
@@ -249,7 +258,6 @@ VistaFilePickerImpl::VistaFilePickerImpl()
, m_hParentWindow(nullptr)
, m_sDirectory ()
, m_sFilename ()
- , mnNbCallCoInitializeExForReinit(0)
{
}
@@ -259,24 +267,11 @@ VistaFilePickerImpl::~VistaFilePickerImpl()
}
-void VistaFilePickerImpl::before()
-{
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
-
- // TRICKY .-)
- // osl::Thread class initializes COm already in MTA mode because it's needed
- // by VCL and UNO so. There is no way to change that from outside...
- // but we need a STA environment...
- o3tl::safeCoInitializeEx(COINIT_APARTMENTTHREADED, mnNbCallCoInitializeExForReinit);
-}
-
-
-void VistaFilePickerImpl::doRequest(const RequestRef& rRequest)
+void VistaFilePickerImpl::doRequest(Request& rRequest)
{
try
{
- switch(rRequest->getRequest())
+ switch(rRequest.getRequest())
{
case E_ADD_PICKER_LISTENER :
impl_sta_addFilePickerListener(rRequest);
@@ -374,73 +369,47 @@ void VistaFilePickerImpl::doRequest(const RequestRef& rRequest)
}
-void VistaFilePickerImpl::after()
-{
- o3tl::safeCoUninitializeReinit(COINIT_MULTITHREADED, mnNbCallCoInitializeExForReinit);
-}
-
-
-void VistaFilePickerImpl::impl_sta_addFilePickerListener(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_addFilePickerListener(Request& rRequest)
{
- // SYNCHRONIZED outside !
- const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest->getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
+ const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest.getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
if ( ! xListener.is())
return;
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
- TFileDialogEvents iHandler = m_iEventHandler;
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (iHandler.is())
+ if (m_iEventHandler.is())
{
- auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(iHandler.get());
+ auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(m_iEventHandler.get());
pHandlerImpl->addFilePickerListener(xListener);
}
}
-void VistaFilePickerImpl::impl_sta_removeFilePickerListener(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_removeFilePickerListener(Request& rRequest)
{
- // SYNCHRONIZED outside !
- const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest->getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
+ const css::uno::Reference< css::ui::dialogs::XFilePickerListener > xListener = rRequest.getArgumentOrDefault(PROP_PICKER_LISTENER, css::uno::Reference< css::ui::dialogs::XFilePickerListener >());
if ( ! xListener.is())
return;
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
- TFileDialogEvents iHandler = m_iEventHandler;
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (iHandler.is())
+ if (m_iEventHandler.is())
{
- auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(iHandler.get());
+ auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(m_iEventHandler.get());
pHandlerImpl->removeFilePickerListener(xListener);
}
}
-void VistaFilePickerImpl::impl_sta_appendFilter(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_appendFilter(Request& rRequest)
{
- const OUString sTitle = rRequest->getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
- const OUString sFilter = rRequest->getArgumentOrDefault(PROP_FILTER_VALUE, OUString());
-
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
+ const OUString sTitle = rRequest.getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
+ const OUString sFilter = rRequest.getArgumentOrDefault(PROP_FILTER_VALUE, OUString());
m_lFilters.addFilter(sTitle, sFilter);
}
-void VistaFilePickerImpl::impl_sta_appendFilterGroup(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_appendFilterGroup(Request& rRequest)
{
const css::uno::Sequence< css::beans::StringPair > aFilterGroup =
- rRequest->getArgumentOrDefault(PROP_FILTER_GROUP, css::uno::Sequence< css::beans::StringPair >());
-
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
+ rRequest.getArgumentOrDefault(PROP_FILTER_GROUP, css::uno::Sequence< css::beans::StringPair >());
if ( m_lFilters.numFilter() > 0 && aFilterGroup.getLength() > 0 )
m_lFilters.addFilter( STRING_SEPARATOR, "", true );
@@ -455,20 +424,20 @@ void VistaFilePickerImpl::impl_sta_appendFilterGroup(const RequestRef& rRequest)
}
-void VistaFilePickerImpl::impl_sta_setCurrentFilter(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_setCurrentFilter(Request& rRequest)
{
- const OUString sTitle = rRequest->getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
-
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
+ const OUString sTitle = rRequest.getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
m_lFilters.setCurrentFilter(sTitle);
}
-void VistaFilePickerImpl::impl_sta_getCurrentFilter(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_getCurrentFilter(Request& rRequest)
{
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return;
+
UINT nIndex = UINT_MAX;
HRESULT hResult = iDialog->GetFileTypeIndex(&nIndex);
if (
@@ -477,43 +446,32 @@ void VistaFilePickerImpl::impl_sta_getCurrentFilter(const RequestRef& rRequest)
)
return;
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
-
OUString sTitle;
::sal_Int32 nRealIndex = nIndex-1; // COM dialog base on 1 ... filter container on 0 .-)
if (
(nRealIndex >= 0 ) &&
(m_lFilters.getFilterNameByIndex(nRealIndex, sTitle))
)
- rRequest->setArgument(PROP_FILTER_TITLE, sTitle);
+ rRequest.setArgument(PROP_FILTER_TITLE, sTitle);
else if ( nRealIndex == -1 ) // Dialog not visible yet
{
sTitle = m_lFilters.getCurrentFilter();
- rRequest->setArgument(PROP_FILTER_TITLE, sTitle);
+ rRequest.setArgument(PROP_FILTER_TITLE, sTitle);
}
- // <- SYNCHRONIZED
}
template <class TDialogImplClass> void VistaFilePickerImpl::impl_sta_CreateDialog()
{
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
m_pDialog = std::make_shared<TDialogImplClass>();
}
-void VistaFilePickerImpl::impl_sta_InitDialog(const RequestRef& rRequest, DWORD nOrFlags)
+void VistaFilePickerImpl::impl_sta_InitDialog(Request& rRequest, DWORD nOrFlags)
{
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
-
TFileDialog iDialog = impl_getBaseDialogInterface();
- TFileDialogEvents iHandler = m_iEventHandler;
-
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
DWORD nFlags = 0;
iDialog->GetOptions ( &nFlags );
@@ -525,7 +483,7 @@ void VistaFilePickerImpl::impl_sta_InitDialog(const RequestRef& rRequest, DWORD
iDialog->SetOptions ( nFlags );
- css::uno::Reference<css::awt::XWindow> xWindow = rRequest->getArgumentOrDefault(PROP_PARENT_WINDOW, css::uno::Reference<css::awt::XWindow>());
+ css::uno::Reference<css::awt::XWindow> xWindow = rRequest.getArgumentOrDefault(PROP_PARENT_WINDOW, css::uno::Reference<css::awt::XWindow>());
if(xWindow.is())
{
css::uno::Reference<css::awt::XSystemDependentWindowPeer> xSysDepWin(xWindow,css::uno::UNO_QUERY);
@@ -537,39 +495,38 @@ void VistaFilePickerImpl::impl_sta_InitDialog(const RequestRef& rRequest, DWORD
aAny >>= tmp;
if(tmp != 0)
{
- osl::MutexGuard aLock2(m_aMutex);
m_hParentWindow = reinterpret_cast<HWND>(tmp);
}
}
}
- ::sal_Int32 nFeatures = rRequest->getArgumentOrDefault(PROP_FEATURES, ::sal_Int32(0));
- ::sal_Int32 nTemplate = rRequest->getArgumentOrDefault(PROP_TEMPLATE_DESCR, ::sal_Int32(0));
+ ::sal_Int32 nFeatures = rRequest.getArgumentOrDefault(PROP_FEATURES, ::sal_Int32(0));
+ ::sal_Int32 nTemplate = rRequest.getArgumentOrDefault(PROP_TEMPLATE_DESCR, ::sal_Int32(0));
impl_sta_enableFeatures(nFeatures, nTemplate);
- if (iHandler.is())
+ if (m_iEventHandler.is())
{
- auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(iHandler.get());
+ auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(m_iEventHandler.get());
pHandlerImpl->startListening(iDialog);
}
}
-void VistaFilePickerImpl::impl_sta_CreateOpenDialog(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_CreateOpenDialog(Request& rRequest)
{
impl_sta_CreateDialog<TOpenDialogImpl>();
impl_sta_InitDialog(rRequest, FOS_FILEMUSTEXIST | FOS_OVERWRITEPROMPT);
}
-void VistaFilePickerImpl::impl_sta_CreateSaveDialog(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_CreateSaveDialog(Request& rRequest)
{
impl_sta_CreateDialog<TSaveDialogImpl>();
impl_sta_InitDialog(rRequest, FOS_FILEMUSTEXIST | FOS_OVERWRITEPROMPT);
}
-void VistaFilePickerImpl::impl_sta_CreateFolderPicker(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_CreateFolderPicker(Request& rRequest)
{
impl_sta_CreateDialog<TFolderPickerDialogImpl>();
impl_sta_InitDialog(rRequest, FOS_PICKFOLDERS);
@@ -638,9 +595,12 @@ void VistaFilePickerImpl::impl_sta_enableFeatures(::sal_Int32 nFeatures, ::sal_I
break;
}
TFileDialog iDialog = impl_getBaseDialogInterface();
- iDialog->SetClientGuid ( aGUID );
+ if (iDialog.is())
+ iDialog->SetClientGuid ( aGUID );
TFileDialogCustomize iCustom = impl_getCustomizeInterface();
+ if (!iCustom.is())
+ return;
if ((nFeatures & FEATURE_VERSION) == FEATURE_VERSION)
{
@@ -739,15 +699,13 @@ void VistaFilePickerImpl::impl_sta_enableFeatures(::sal_Int32 nFeatures, ::sal_I
}
-void VistaFilePickerImpl::impl_sta_SetMultiSelectionMode(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetMultiSelectionMode(Request& rRequest)
{
- const bool bMultiSelection = rRequest->getArgumentOrDefault(PROP_MULTISELECTION_MODE, true);
+ const bool bMultiSelection = rRequest.getArgumentOrDefault(PROP_MULTISELECTION_MODE, true);
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
TFileDialog iDialog = impl_getBaseDialogInterface();
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
DWORD nFlags = 0;
iDialog->GetOptions(&nFlags);
@@ -761,37 +719,33 @@ void VistaFilePickerImpl::impl_sta_SetMultiSelectionMode(const RequestRef& rRequ
}
-void VistaFilePickerImpl::impl_sta_SetTitle(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetTitle(Request& rRequest)
{
- OUString sTitle = rRequest->getArgumentOrDefault(PROP_TITLE, OUString());
+ OUString sTitle = rRequest.getArgumentOrDefault(PROP_TITLE, OUString());
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
TFileDialog iDialog = impl_getBaseDialogInterface();
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
iDialog->SetTitle(o3tl::toW(sTitle.getStr()));
}
-void VistaFilePickerImpl::impl_sta_SetFileName(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetFileName(Request& rRequest)
{
- OUString sFileName = rRequest->getArgumentOrDefault(PROP_FILENAME, OUString());
+ OUString sFileName = rRequest.getArgumentOrDefault(PROP_FILENAME, OUString());
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
TFileDialog iDialog = impl_getBaseDialogInterface();
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
iDialog->SetFileName(o3tl::toW(sFileName.getStr()));
}
-void VistaFilePickerImpl::impl_sta_SetDirectory(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetDirectory(Request& rRequest)
{
- OUString sDirectory = rRequest->getArgumentOrDefault(PROP_DIRECTORY, OUString());
+ OUString sDirectory = rRequest.getArgumentOrDefault(PROP_DIRECTORY, OUString());
if( !m_bInExecute)
{
@@ -803,11 +757,9 @@ void VistaFilePickerImpl::impl_sta_SetDirectory(const RequestRef& rRequest)
m_sDirectory = sDirectory;
}
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
TFileDialog iDialog = impl_getBaseDialogInterface();
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
sal::systools::COMReference<IShellItem> pFolder;
if ( !createFolderItem(sDirectory, pFolder) )
@@ -819,6 +771,8 @@ void VistaFilePickerImpl::impl_sta_SetDirectory(const RequestRef& rRequest)
OUString VistaFilePickerImpl::GetDirectory()
{
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return OUString();
sal::systools::COMReference<IShellItem> pFolder;
HRESULT hResult = iDialog->GetFolder( &pFolder );
if ( FAILED(hResult) )
@@ -826,17 +780,19 @@ OUString VistaFilePickerImpl::GetDirectory()
return lcl_getURLFromShellItem(pFolder.get());
}
-void VistaFilePickerImpl::impl_sta_GetDirectory(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_GetDirectory(Request& rRequest)
{
const OUString sFolder = m_sDirectory.isEmpty() ? GetDirectory() : m_sDirectory;
if (!sFolder.isEmpty())
- rRequest->setArgument(PROP_DIRECTORY, sFolder);
+ rRequest.setArgument(PROP_DIRECTORY, sFolder);
}
-void VistaFilePickerImpl::impl_sta_SetDefaultName(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetDefaultName(Request& rRequest)
{
- OUString sFilename = rRequest->getArgumentOrDefault(PROP_FILENAME, OUString());
+ OUString sFilename = rRequest.getArgumentOrDefault(PROP_FILENAME, OUString());
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return;
TFileDialogCustomize iCustom = impl_getCustomizeInterface();
if ( ! iCustom.is())
@@ -862,19 +818,17 @@ void VistaFilePickerImpl::impl_sta_SetDefaultName(const RequestRef& rRequest)
void VistaFilePickerImpl::impl_sta_setFiltersOnDialog()
{
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
-
std::vector<OUString> vStrings; // to hold the adjusted filter names, pointers to which will be
// stored in lFilters
::std::vector< COMDLG_FILTERSPEC > lFilters = lcl_buildFilterList(m_lFilters, vStrings);
OUString sCurrentFilter = m_lFilters.getCurrentFilter();
sal_Int32 nCurrentFilter = m_lFilters.getFilterPos(sCurrentFilter);
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return;
TFileDialogCustomize iCustomize = impl_getCustomizeInterface();
-
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iCustomize.is())
+ return;
if (lFilters.empty())
return;
@@ -901,23 +855,14 @@ void VistaFilePickerImpl::impl_sta_setFiltersOnDialog()
}
-void VistaFilePickerImpl::impl_sta_getSelectedFiles(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_getSelectedFiles(Request& rRequest)
{
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
-
- std::shared_ptr<TDialogImplBase> pDialog(m_pDialog);
- bool bInExecute = m_bInExecute;
-
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (!pDialog)
+ if (m_pDialog == nullptr)
return;
// ask dialog for results
// we must react different if dialog is in execute or not .-(
- sal::systools::COMReference<IShellItemArray> iItems = pDialog->getResult(bInExecute);
+ sal::systools::COMReference<IShellItemArray> iItems = m_pDialog->getResult(m_bInExecute);
if (!iItems.is())
return;
@@ -936,18 +881,17 @@ void VistaFilePickerImpl::impl_sta_getSelectedFiles(const RequestRef& rRequest)
}
}
- rRequest->setArgument(PROP_SELECTED_FILES, comphelper::containerToSequence(lFiles));
+ rRequest.setArgument(PROP_SELECTED_FILES, comphelper::containerToSequence(lFiles));
}
-void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_ShowDialogModal(Request& rRequest)
{
impl_sta_setFiltersOnDialog();
- // SYNCHRONIZED->
- ::osl::ResettableMutexGuard aLock(m_aMutex);
-
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return;
// it's important to know if we are showing the dialog.
// Some dialog interface methods can't be called then or some
@@ -956,9 +900,6 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
m_bWasExecuted = true;
- aLock.clear();
- // <- SYNCHRONIZED
-
// we set the directory only if we have a save dialog and a filename
// for the other cases, the file dialog remembers its last location
// according to its client guid.
@@ -976,6 +917,8 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
aFileURL += m_sFilename;
TFileDialogCustomize iCustom = impl_getCustomizeInterface();
+ if (!iCustom.is())
+ return;
BOOL bValue = FALSE;
HRESULT hResult = iCustom->GetCheckButtonState( css::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &bValue);
@@ -1016,32 +959,28 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
}
HRESULT hResult = E_FAIL;
- HWND hParentWindow;
- {
- osl::MutexGuard aLock2(m_aMutex);
- // Note that there is a potential race between retrieving and
- // using parent window (window might get destroyed)
- hParentWindow = m_hParentWindow ? m_hParentWindow : choose_parent_window();
- }
try
{
// show dialog and wait for user decision
- hResult = iDialog->Show(hParentWindow); // parent window needed
+ hResult = iDialog->Show(m_hParentWindow ? m_hParentWindow
+ : choose_parent_window()); // parent window needed
}
catch(...)
{}
- // SYNCHRONIZED->
- aLock.reset();
m_bInExecute = false;
- aLock.clear();
- // <- SYNCHRONIZED
+
+ if (m_iEventHandler.is())
+ {
+ auto* pHandlerImpl = static_cast<VistaFilePickerEventHandler*>(m_iEventHandler.get());
+ pHandlerImpl->stopListening();
+ }
if ( FAILED(hResult) )
return;
impl_sta_getSelectedFiles(rRequest);
- rRequest->setArgument(PROP_DIALOG_SHOW_RESULT, true);
+ rRequest.setArgument(PROP_DIALOG_SHOW_RESULT, true);
}
@@ -1049,9 +988,7 @@ TFileDialog VistaFilePickerImpl::impl_getBaseDialogInterface()
{
TFileDialog iDialog;
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
- if (m_pDialog)
+ if (m_pDialog != nullptr)
iDialog = m_pDialog->getComPtr();
return iDialog;
@@ -1060,10 +997,7 @@ TFileDialog VistaFilePickerImpl::impl_getBaseDialogInterface()
TFileDialogCustomize VistaFilePickerImpl::impl_getCustomizeInterface()
{
- // SYNCHRONIZED->
- osl::MutexGuard aLock(m_aMutex);
-
- if (m_pDialog)
+ if (m_pDialog != nullptr)
return { m_pDialog->getComPtr(), sal::systools::COM_QUERY_THROW };
return {};
@@ -1081,11 +1015,11 @@ static void lcl_removeControlItemsWorkaround(const TFileDialogCustomize& iCustom
}
-void VistaFilePickerImpl::impl_sta_SetControlValue(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetControlValue(Request& rRequest)
{
- ::sal_Int16 nId = rRequest->getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
- ::sal_Int16 nAction = rRequest->getArgumentOrDefault(PROP_CONTROL_ACTION, INVALID_CONTROL_ACTION);
- css::uno::Any aValue = rRequest->getValue(PROP_CONTROL_VALUE);
+ ::sal_Int16 nId = rRequest.getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
+ ::sal_Int16 nAction = rRequest.getArgumentOrDefault(PROP_CONTROL_ACTION, INVALID_CONTROL_ACTION);
+ css::uno::Any aValue = rRequest.getValue(PROP_CONTROL_VALUE);
// don't check for right values here ...
// most parameters are optional !
@@ -1156,9 +1090,9 @@ void VistaFilePickerImpl::impl_sta_SetControlValue(const RequestRef& rRequest)
}
-void VistaFilePickerImpl::impl_sta_GetControlValue(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_GetControlValue(Request& rRequest)
{
- ::sal_Int16 nId = rRequest->getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
+ ::sal_Int16 nId = rRequest.getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
// don't check for right values here ...
// most parameters are optional !
@@ -1202,14 +1136,14 @@ void VistaFilePickerImpl::impl_sta_GetControlValue(const RequestRef& rRequest)
}
if (aValue.hasValue())
- rRequest->setArgument(PROP_CONTROL_VALUE, aValue);
+ rRequest.setArgument(PROP_CONTROL_VALUE, aValue);
}
-void VistaFilePickerImpl::impl_sta_SetControlLabel(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_SetControlLabel(Request& rRequest)
{
- ::sal_Int16 nId = rRequest->getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
- OUString sLabel = rRequest->getArgumentOrDefault(PROP_CONTROL_LABEL, OUString() );
+ ::sal_Int16 nId = rRequest.getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
+ OUString sLabel = rRequest.getArgumentOrDefault(PROP_CONTROL_LABEL, OUString() );
// don't check for right values here ...
// most parameters are optional !
@@ -1221,15 +1155,15 @@ void VistaFilePickerImpl::impl_sta_SetControlLabel(const RequestRef& rRequest)
}
-void VistaFilePickerImpl::impl_sta_GetControlLabel(const RequestRef& /*rRequest*/)
+void VistaFilePickerImpl::impl_sta_GetControlLabel(Request& /*rRequest*/)
{
}
-void VistaFilePickerImpl::impl_sta_EnableControl(const RequestRef& rRequest)
+void VistaFilePickerImpl::impl_sta_EnableControl(Request& rRequest)
{
- ::sal_Int16 nId = rRequest->getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
- bool bEnabled = rRequest->getArgumentOrDefault(PROP_CONTROL_ENABLE, true);
+ ::sal_Int16 nId = rRequest.getArgumentOrDefault(PROP_CONTROL_ID , INVALID_CONTROL_ID );
+ bool bEnabled = rRequest.getArgumentOrDefault(PROP_CONTROL_ENABLE, true);
// don't check for right values here ...
// most parameters are optional !
@@ -1250,6 +1184,9 @@ void VistaFilePickerImpl::impl_sta_EnableControl(const RequestRef& rRequest)
void VistaFilePickerImpl::impl_SetDefaultExtension( const OUString& currentFilter )
{
TFileDialog iDialog = impl_getBaseDialogInterface();
+ if (!iDialog.is())
+ return;
+
if (currentFilter.getLength())
{
OUString FilterExt;
@@ -1269,18 +1206,14 @@ void VistaFilePickerImpl::impl_SetDefaultExtension( const OUString& currentFilte
void VistaFilePickerImpl::onAutoExtensionChanged (bool bChecked)
{
- // SYNCHRONIZED->
- osl::ClearableMutexGuard aLock(m_aMutex);
-
const OUString sFilter = m_lFilters.getCurrentFilter ();
OUString sExt ;
if (!m_lFilters.getFilterByName(sFilter, sExt))
return;
TFileDialog iDialog = impl_getBaseDialogInterface();
-
- aLock.clear();
- // <- SYNCHRONIZED
+ if (!iDialog.is())
+ return;
PCWSTR pExt = nullptr;
if ( bChecked )
diff --git a/fpicker/source/win32/VistaFilePickerImpl.hxx b/fpicker/source/win32/VistaFilePickerImpl.hxx
index ec7d1e2cddf6..d0eb8e112efa 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.hxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.hxx
@@ -23,7 +23,7 @@
#include <shobjidl.h>
-#include "asyncrequests.hxx"
+#include "requests.hxx"
#include "vistatypes.h"
#include "FilterContainer.hxx"
#include "VistaFilePickerEventHandler.hxx"
@@ -31,10 +31,8 @@
#include "resourceprovider.hxx"
#include <cppuhelper/interfacecontainer.h>
-#include <cppuhelper/basemutex.hxx>
#include <osl/thread.hxx>
#include <osl/conditn.hxx>
-#include <o3tl/safeCoInitUninit.hxx>
#include <rtl/ustring.hxx>
namespace fpicker{
@@ -84,12 +82,10 @@ class TDialogImplBase;
/** native implementation of the file picker on Vista and upcoming windows versions.
* This dialog uses COM internally. Further it marshall every request so it will
- * be executed within its own STA thread !
+ * be executed on the main thread which is an STA thread !
*/
-class VistaFilePickerImpl : private ::cppu::BaseMutex
- , public RequestHandler
- , public IVistaFilePickerInternalNotify
+class VistaFilePickerImpl : public IVistaFilePickerInternalNotify
{
public:
@@ -131,15 +127,12 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
// ctor/dtor - nothing special
VistaFilePickerImpl();
- virtual ~VistaFilePickerImpl() override;
+ ~VistaFilePickerImpl();
// RequestHandler
-
- virtual void before() override;
- virtual void doRequest(const RequestRef& rRequest) override;
- virtual void after() override;
+ void doRequest(Request& rRequest);
// IVistaFilePickerInternalNotify
@@ -152,91 +145,91 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
OUString GetDirectory();
/// implementation of request E_ADD_FILEPICKER_LISTENER
- void impl_sta_addFilePickerListener(const RequestRef& rRequest);
+ void impl_sta_addFilePickerListener(Request& rRequest);
/// implementation of request E_REMOVE_FILEPICKER_LISTENER
- void impl_sta_removeFilePickerListener(const RequestRef& rRequest);
+ void impl_sta_removeFilePickerListener(Request& rRequest);
/// implementation of request E_APPEND_FILTER
- void impl_sta_appendFilter(const RequestRef& rRequest);
+ void impl_sta_appendFilter(Request& rRequest);
/// implementation of request E_APPEND_FILTERGROUP
- void impl_sta_appendFilterGroup(const RequestRef& rRequest);
+ void impl_sta_appendFilterGroup(Request& rRequest);
/// implementation of request E_SET_CURRENT_FILTER
- void impl_sta_setCurrentFilter(const RequestRef& rRequest);
+ void impl_sta_setCurrentFilter(Request& rRequest);
/// implementation of request E_GET_CURRENT_FILTER
- void impl_sta_getCurrentFilter(const RequestRef& rRequest);
+ void impl_sta_getCurrentFilter(Request& rRequest);
/// implementation of request E_CREATE_OPEN_DIALOG
- void impl_sta_CreateOpenDialog(const RequestRef& rRequest);
+ void impl_sta_CreateOpenDialog(Request& rRequest);
/// implementation of request E_CREATE_SAVE_DIALOG
- void impl_sta_CreateSaveDialog(const RequestRef& rRequest);
+ void impl_sta_CreateSaveDialog(Request& rRequest);
/// implementation of request E_CREATE_FOLDER_PICKER
- void impl_sta_CreateFolderPicker(const RequestRef& rRequest);
+ void impl_sta_CreateFolderPicker(Request& rRequest);
/// implementation of request E_SET_MULTISELECTION_MODE
- void impl_sta_SetMultiSelectionMode(const RequestRef& rRequest);
+ void impl_sta_SetMultiSelectionMode(Request& rRequest);
/// implementation of request E_SET_TITLE
- void impl_sta_SetTitle(const RequestRef& rRequest);
+ void impl_sta_SetTitle(Request& rRequest);
/// implementation of request E_SET_FILENAME
- void impl_sta_SetFileName(const RequestRef& rRequest);
+ void impl_sta_SetFileName(Request& rRequest);
/// implementation of request E_SET_DIRECTORY
- void impl_sta_SetDirectory(const RequestRef& rRequest);
+ void impl_sta_SetDirectory(Request& rRequest);
/// implementation of request E_GET_DIRECTORY
- void impl_sta_GetDirectory(const RequestRef& rRequest);
+ void impl_sta_GetDirectory(Request& rRequest);
/// implementation of request E_SET_DEFAULT_NAME
- void impl_sta_SetDefaultName(const RequestRef& rRequest);
+ void impl_sta_SetDefaultName(Request& rRequest);
/// implementation of request E_GET_SELECTED_FILES
- void impl_sta_getSelectedFiles(const RequestRef& rRequest);
+ void impl_sta_getSelectedFiles(Request& rRequest);
/// implementation of request E_SHOW_DIALOG_MODAL
- void impl_sta_ShowDialogModal(const RequestRef& rRequest);
+ void impl_sta_ShowDialogModal(Request& rRequest);
/// implementation of request E_SET_CONTROL_VALUE
- void impl_sta_SetControlValue(const RequestRef& rRequest);
+ void impl_sta_SetControlValue(Request& rRequest);
/// implementation of request E_GET_CONTROL_VALUE
- void impl_sta_GetControlValue(const RequestRef& rRequest);
+ void impl_sta_GetControlValue(Request& rRequest);
/// implementation of request E_SET_CONTROL_LABEL
- void impl_sta_SetControlLabel(const RequestRef& rRequest);
+ void impl_sta_SetControlLabel(Request& rRequest);
/// implementation of request E_GET_CONTROL_LABEL
- static void impl_sta_GetControlLabel(const RequestRef& rRequest);
+ static void impl_sta_GetControlLabel(Request& rRequest);
/// implementation of request E_ENABLE_CONTROL
- void impl_sta_EnableControl(const RequestRef& rRequest);
+ void impl_sta_EnableControl(Request& rRequest);
/** create all needed (optional!) UI controls addressed by the field nFeatures.
* The given number nFeatures is used as a flag field. Use const values FEATURE_XXX
@@ -278,7 +271,7 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
private:
template <class TDialogImplClass> void impl_sta_CreateDialog();
- void impl_sta_InitDialog(const RequestRef& rRequest, DWORD nOrFlags);
+ void impl_sta_InitDialog(Request& rRequest, DWORD nOrFlags);
/// object representing a file dialog
@@ -308,9 +301,6 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
OUString m_sFilename;
-
- // to put back all the inits with COINIT_MULTITHREADED if needed
- int mnNbCallCoInitializeExForReinit;
};
} // namespace vista
diff --git a/fpicker/source/win32/asyncrequests.cxx b/fpicker/source/win32/asyncrequests.cxx
deleted file mode 100644
index bfecc42125a3..000000000000
--- a/fpicker/source/win32/asyncrequests.cxx
+++ /dev/null
@@ -1,227 +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 "asyncrequests.hxx"
-#include <vcl/svapp.hxx>
-#include <vcl/winscheduler.hxx>
-#include <osl/mutex.hxx>
-
-namespace fpicker{
-namespace win32{
-namespace vista{
-
-static void lcl_sleep( ::osl::Condition& aCondition,
- ::sal_Int32 nMilliSeconds )
-{
- if (nMilliSeconds < 1)
- aCondition.wait();
- else
- {
- TimeValue aTime;
- aTime.Seconds = (nMilliSeconds / 1000);
- aTime.Nanosec = (nMilliSeconds % 1000) * 1000000;
- aCondition.wait(&aTime);
- }
-}
-
-void Request::wait( ::sal_Int32 nMilliSeconds )
-{
- SolarMutexReleaser aReleaser;
-
- lcl_sleep( m_aJoiner, nMilliSeconds );
-}
-
-void Request::waitProcessMessages()
-{
- SolarMutexGuard aGuard;
- while ( !m_aJoiner.check() && !Application::IsQuit())
- Application::Yield();
-}
-
-void Request::notify()
-{
- m_aJoiner.set();
- // Make sure that main loop receives at least this message to return from GetMessage and recheck
- // the condition, even in case when there's no visible application windows present, and thus no
- // other messages might arrive to the main loop.
- WinScheduler::PostDummyMessage();
-}
-
-AsyncRequests::AsyncRequests(const RequestHandlerRef& rHandler)
- : ::cppu::BaseMutex( )
- , ::osl::Thread ( )
- , m_bFinish (false)
- , m_rHandler (rHandler )
- , m_lRequests ( )
-{
-}
-
-AsyncRequests::~AsyncRequests()
-{
- // SYNCHRONIZED ->
- {
- osl::MutexGuard aLock(m_aMutex);
- m_bFinish = true;
- }
- // <- SYNCHRONIZED
-
- // The static AsyncRequests aNotify in VistaFilePickerEventHandler::impl_sendEvent
- // is destructed at DLL atexit. But it won't run, so needs no join and release of
- // the already destructed SolarMutex, which would crash LO on exit.
- if (isRunning())
- {
- // tdf#123502: make sure we actually hold the mutex before releasing it
- // UNO directly destroys the VistaFilePicker object, so we need GUI protection in there.
- // But since we redirect GUI stuff to the async thread we also have to release it, so we
- // can join it, if the thread currently blocks on the SolarMutex.
- SolarMutexGuard aGuard;
- SolarMutexReleaser aReleaser;
- join();
- }
-}
-
-void AsyncRequests::triggerJobExecution()
-{
- if ( ! isRunning())
- create();
- else
- maWait.set();
-}
-
-void AsyncRequests::triggerRequestProcessMessages (const RequestRef& rRequest)
-{
- // SYNCHRONIZED ->
- {
- osl::MutexGuard aLock(m_aMutex);
- m_lRequests.push(rRequest);
- }
- // <- SYNCHRONIZED
-
- rRequest->waitProcessMessages();
-}
-
-void AsyncRequests::triggerRequestBlocked(const RequestRef& rRequest)
-{
- // SYNCHRONIZED ->
- {
- osl::MutexGuard aLock(m_aMutex);
- m_lRequests.push(rRequest);
- }
- // <- SYNCHRONIZED
-
- triggerJobExecution();
-
- rRequest->wait();
-}
-
-void AsyncRequests::triggerRequestNonBlocked(const RequestRef& rRequest)
-{
- // SYNCHRONIZED ->
- {
- osl::MutexGuard aLock(m_aMutex);
- m_lRequests.push(rRequest);
- }
- // <- SYNCHRONIZED
-
- triggerJobExecution();
-}
-
-void AsyncRequests::triggerRequestDirectly(const RequestRef& rRequest)
-{
- // SYNCHRONIZED ->
- osl::ClearableMutexGuard aLock(m_aMutex);
- RequestHandlerRef rHandler = m_rHandler;
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (rHandler != nullptr)
- rHandler->doRequest(rRequest);
-}
-
-void AsyncRequests::triggerRequestThreadAware(const RequestRef& rRequest,
- ::sal_Int16 nWait )
-{
- oslThreadIdentifier nOurThreadId = getIdentifier();
- oslThreadIdentifier nCallerThreadId = ::osl::Thread::getCurrentIdentifier();
- SolarMutexGuard aGuard;
- if (nOurThreadId == nCallerThreadId)
- triggerRequestDirectly(rRequest);
- else if (nWait == BLOCKED)
- triggerRequestBlocked(rRequest);
- else if (nWait == PROCESS_MESSAGES)
- triggerRequestProcessMessages(rRequest);
- else
- triggerRequestNonBlocked(rRequest);
-}
-
-void SAL_CALL AsyncRequests::run()
-{
- osl_setThreadName("fpicker::win32::vista::AsyncRequests");
-
- static const ::sal_Int32 TIME_TO_WAIT_FOR_NEW_REQUESTS = 250;
-
- // SYNCHRONIZED ->
- ::osl::ResettableMutexGuard aLock(m_aMutex);
- RequestHandlerRef rHandler = m_rHandler;
- bool bFinished = m_bFinish;
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (rHandler != nullptr)
- rHandler->before();
-
- while ( ! bFinished)
- {
- // SYNCHRONIZED ->
- aLock.reset();
-
- RequestRef rRequest;
- if ( ! m_lRequests.empty())
- {
- rRequest = m_lRequests.front();
- m_lRequests.pop();
- }
- bFinished = m_bFinish;
-
- aLock.clear();
- // <- SYNCHRONIZED
-
- if (rRequest == nullptr)
- {
- lcl_sleep(maWait, TIME_TO_WAIT_FOR_NEW_REQUESTS);
- maWait.reset();
- continue;
- }
-
- if (rHandler != nullptr)
- {
- rHandler->doRequest(rRequest);
- rRequest->notify();
- }
- }
-
- if (rHandler != nullptr)
- rHandler->after();
-}
-
-} // namespace vista
-} // namespace win32
-} // namespace fpicker
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/win32/asyncrequests.hxx b/fpicker/source/win32/asyncrequests.hxx
deleted file mode 100644
index 410d4241311e..000000000000
--- a/fpicker/source/win32/asyncrequests.hxx
+++ /dev/null
@@ -1,211 +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 <cppuhelper/basemutex.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-#include <osl/conditn.hxx>
-#include <osl/thread.hxx>
-#include <osl/time.h>
-#include <queue>
-#include <memory>
-
-namespace fpicker{
-namespace win32{
-namespace vista{
-
-
-/** @todo document me
- */
-class Request
-{
-
- public:
-
- static const ::sal_Int32 WAIT_INFINITE = 0;
-
-
- // interface
-
-
- public:
-
-
- explicit Request()
- : m_aJoiner ( )
- , m_nRequest (-1)
- , m_lArguments( )
- {
- m_aJoiner.reset();
- }
-
-
- virtual ~Request() {};
-
-
- void setRequest(::sal_Int32 nRequest)
- {
- m_nRequest = nRequest;
- }
-
-
- ::sal_Int32 getRequest()
- {
- return m_nRequest;
- }
-
-
- void clearArguments()
- {
- m_lArguments.clear();
- }
-
-
- template< class TArgumentType >
- void setArgument(const OUString& sName ,
- const TArgumentType& aValue)
- {
- m_lArguments[sName] = css::uno::toAny(aValue);
- }
-
-
- template< class TArgumentType >
- TArgumentType getArgumentOrDefault(const OUString& sName ,
- const TArgumentType& aDefault)
- {
- return m_lArguments.getUnpackedValueOrDefault(sName, aDefault);
- }
-
- css::uno::Any getValue(OUString const & key) const
- {
- return m_lArguments.getValue(key);
- }
-
- void wait(::sal_Int32 nMilliSeconds = WAIT_INFINITE);
-
- void waitProcessMessages();
-
-
- void notify();
-
-
- // member
-
-
- private:
-
- ::osl::Condition m_aJoiner;
- ::sal_Int32 m_nRequest;
- ::comphelper::SequenceAsHashMap m_lArguments;
-};
-
-typedef std::shared_ptr< Request > RequestRef;
-typedef std::queue< RequestRef > RequestQueue;
-
-
-class RequestHandler
-{
- public:
- virtual ~RequestHandler() {}
- virtual void before() = 0;
- virtual void doRequest(const RequestRef& rRequest) = 0;
- virtual void after() = 0;
-};
-
-typedef std::shared_ptr< RequestHandler > RequestHandlerRef;
-
-
-/** @todo document me
- */
-class AsyncRequests final: private ::cppu::BaseMutex
- , public ::osl::Thread
-{
- public:
- static const ::sal_Int16 PROCESS_MESSAGES = 2;
- static const ::sal_Int16 BLOCKED = 1;
- static const ::sal_Int16 NON_BLOCKED = 0;
-
-
- /** creates the new asynchronous request executor.
- */
- explicit AsyncRequests(const RequestHandlerRef& rHandler);
-
- void setHandler(const RequestHandlerRef& rHandler)
- {
- m_rHandler = rHandler;
- }
-
- /// ensure the execution thread gets going.
- void triggerJobExecution();
-
-
- /** does nothing special / excepting to make sure our class won't be inline .-)
- */
- virtual ~AsyncRequests() override;
-
-
- /** @todo document me
- */
- void triggerRequestProcessMessages (const RequestRef& rRequest);
-
-
- /** @todo document me
- */
- void triggerRequestBlocked(const RequestRef& rRequest);
-
-
- /** @todo document me
- */
- void triggerRequestNonBlocked(const RequestRef& rRequest);
-
-
- /** @todo document me
- */
- void triggerRequestDirectly(const RequestRef& rRequest);
-
-
- /** @todo document me
- */
- void triggerRequestThreadAware(const RequestRef& rRequest,
- ::sal_Int16 nWait );
-
- private:
-
-
- /** our STA .-)
- * Will run between start() & finish(). Internally it runs a loop ...
- * waiting for requests. Every request will be executed synchronously
- * in blocked mode.
- */
- virtual void SAL_CALL run() override;
-
- private:
-
- bool m_bFinish;
- RequestHandlerRef m_rHandler;
- RequestQueue m_lRequests;
- osl::Condition maWait;
-};
-
-} // namespace vista
-} // namespace win32
-} // namespace fpicker
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/fpicker/source/win32/requests.hxx b/fpicker/source/win32/requests.hxx
new file mode 100644
index 000000000000..a12f61ad8df7
--- /dev/null
+++ b/fpicker/source/win32/requests.hxx
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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 <comphelper/sequenceashashmap.hxx>
+
+namespace fpicker
+{
+namespace win32
+{
+namespace vista
+{
+/** @todo document me
+ */
+class Request
+{
+ // interface
+
+public:
+ explicit Request()
+ : m_nRequest(-1)
+ , m_lArguments()
+ {
+ }
+
+ virtual ~Request(){};
+
+ void setRequest(::sal_Int32 nRequest) { m_nRequest = nRequest; }
+
+ ::sal_Int32 getRequest() { return m_nRequest; }
+
+ void clearArguments() { m_lArguments.clear(); }
+
+ template <class TArgumentType>
+ void setArgument(const OUString& sName, const TArgumentType& aValue)
+ {
+ m_lArguments[sName] = css::uno::toAny(aValue);
+ }
+
+ template <class TArgumentType>
+ TArgumentType getArgumentOrDefault(const OUString& sName, const TArgumentType& aDefault)
+ {
+ return m_lArguments.getUnpackedValueOrDefault(sName, aDefault);
+ }
+
+ css::uno::Any getValue(OUString const& key) const { return m_lArguments.getValue(key); }
+
+ // member
+
+private:
+ ::sal_Int32 m_nRequest;
+ ::comphelper::SequenceAsHashMap m_lArguments;
+};
+
+} // namespace vista
+} // namespace win32
+} // namespace fpicker
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */