summaryrefslogtreecommitdiff
path: root/fpicker/source/win32/VistaFilePickerImpl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'fpicker/source/win32/VistaFilePickerImpl.cxx')
-rw-r--r--fpicker/source/win32/VistaFilePickerImpl.cxx307
1 files changed, 120 insertions, 187 deletions
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 )