diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2009-07-28 16:11:04 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2009-07-28 16:11:04 +0000 |
commit | 29da2639353762a64673d6ae5b32a36045caa7d3 (patch) | |
tree | 566ace5cd576d6890a8ddc2b353e98e9970c71dc /fpicker | |
parent | 302383a919561946ac02473bdda8c425a7ca685e (diff) |
CWS-TOOLING: integrate CWS filepicker01
2009-07-03 13:21:25 +0200 cd r273690 : #i102319# Use GetSelectedFiles() instead of GetMPath() to retrieve a set of selected files
2009-07-01 14:27:56 +0200 cd r273582 : #i64800# Use ParseDisplayName correctly and don't allocate memory for an output parameter
2009-07-01 10:47:47 +0200 cd r273553 : #i102701# Make P1 fix for CWS filepicker01, too.
2009-06-29 11:58:09 +0200 cd r273463 : i102319# File picker should NOT set multi selection as a default.
2009-06-29 11:49:10 +0200 cd r273461 : #i102319# Use XFilePicker2 interface to retrieve files from multi selection
2009-06-26 15:42:43 +0200 cd r273423 : #i99759# Release solar mutex before blocking on execute() when using system file picker
2009-06-26 15:35:50 +0200 cd r273422 : #i99759# Don't release solar mutex in shutdown(). Must be done before calling execute()
2009-06-23 11:40:02 +0200 cd r273267 : #i95425# Fixed wrong initialization of TimeValue members
2009-06-23 10:35:20 +0200 cd r273262 : #i99759# Fix deadlock on Windows XP/2000 because of removing Picker Thread from sfx2. Now CAsyncEventNotifierThread releases the solar mutex before blocking
2009-06-22 11:59:15 +0200 cd r273209 : #i102948# Remove links from toolbar object when using lazy delete as the toolbar manager is now destroyed before the toolbar
2009-06-22 11:22:14 +0200 cd r273204 : #i99759# Don't use a new thread to call the file picker. As a consequence this thread is also calling Application::Yield() and therefore is fighting with the main thread for messages
2009-06-22 11:13:32 +0200 cd r273203 : #i99759# Solar mutex must be locked before calling Application::Yield()
2009-06-19 15:23:01 +0200 cd r273161 : #i102948# Remove/add decorated window from/into old/new parent decorated window list
2009-06-19 12:49:37 +0200 cd r273156 : #i101843# Use new COM based dialog implementation from Windows Vista on
Diffstat (limited to 'fpicker')
-rw-r--r-- | fpicker/source/win32/filepicker/FPentry.cxx | 4 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/SolarMutex.cxx | 58 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/SolarMutex.hxx | 33 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx | 1 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/asynceventnotifier.cxx | 5 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/asyncrequests.cxx | 2 | ||||
-rw-r--r-- | fpicker/source/win32/filepicker/makefile.mk | 3 | ||||
-rw-r--r-- | fpicker/source/win32/folderpicker/MtaFop.cxx | 34 | ||||
-rw-r--r-- | fpicker/source/win32/misc/WinImplHelper.cxx | 46 | ||||
-rw-r--r-- | fpicker/source/win32/misc/WinImplHelper.hxx | 2 |
10 files changed, 153 insertions, 35 deletions
diff --git a/fpicker/source/win32/filepicker/FPentry.cxx b/fpicker/source/win32/filepicker/FPentry.cxx index 48cc3cc53a50..bc3d020baaad 100644 --- a/fpicker/source/win32/filepicker/FPentry.cxx +++ b/fpicker/source/win32/filepicker/FPentry.cxx @@ -66,9 +66,9 @@ static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager ) { Reference< XInterface > xDlg; - bool bVista = IsWindowsVista(); + bool bVistaOrNewer = IsWindowsVistaOrNewer(); - if (bVista) + if (bVistaOrNewer) { fprintf(stdout, "use special (vista) system file picker ...\n"); xDlg.set( diff --git a/fpicker/source/win32/filepicker/SolarMutex.cxx b/fpicker/source/win32/filepicker/SolarMutex.cxx new file mode 100644 index 000000000000..3c446f412e46 --- /dev/null +++ b/fpicker/source/win32/filepicker/SolarMutex.cxx @@ -0,0 +1,58 @@ +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: asynceventnotifier.cxx,v $
+ * $Revision: 1.16 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_fpicker.hxx"
+
+#include <vcl/svapp.hxx>
+#include <vos/mutex.hxx>
+#include <osl/thread.hxx>
+
+int ReleaseSolarMutexOnMainThreadContext(unsigned nThreadId)
+{
+ int nAcquireCount = 0;
+ vos::IMutex& rSolarMutex = Application::GetSolarMutex();
+ vos::OThread::TThreadIdentifier nMainThreadId = Application::GetMainThreadIdentifier();
+
+ if ( nMainThreadId == nThreadId )
+ {
+ ::vos::IMutex& rMutex = Application::GetSolarMutex();
+ if ( rMutex.tryToAcquire() )
+ nAcquireCount = Application::ReleaseSolarMutex() - 1;
+ }
+
+ return nAcquireCount;
+}
+
+void AcquireSolarMutex(int nAcquireCount)
+{
+ if ( nAcquireCount )
+ Application::AcquireSolarMutex( nAcquireCount );
+}
diff --git a/fpicker/source/win32/filepicker/SolarMutex.hxx b/fpicker/source/win32/filepicker/SolarMutex.hxx new file mode 100644 index 000000000000..95dcf13ecc3b --- /dev/null +++ b/fpicker/source/win32/filepicker/SolarMutex.hxx @@ -0,0 +1,33 @@ +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: asynceventnotifier.cxx,v $
+ * $Revision: 1.16 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+int ReleaseSolarMutexOnMainThreadContext(unsigned nThreadId);
+
+void AcquireSolarMutex(int nAcquireCount);
diff --git a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx index a22ef2bea143..38ca768da08b 100644 --- a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx +++ b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx @@ -401,7 +401,6 @@ void VistaFilePickerImpl::impl_sta_CreateOpenDialog(const RequestRef& rRequest) nFlags |= FOS_FILEMUSTEXIST; nFlags |= FOS_OVERWRITEPROMPT; nFlags |= FOS_DONTADDTORECENT; - nFlags |= FOS_ALLOWMULTISELECT; iDialog->SetOptions ( nFlags ); diff --git a/fpicker/source/win32/filepicker/asynceventnotifier.cxx b/fpicker/source/win32/filepicker/asynceventnotifier.cxx index a780eeaea52d..b715457b76dd 100644 --- a/fpicker/source/win32/filepicker/asynceventnotifier.cxx +++ b/fpicker/source/win32/filepicker/asynceventnotifier.cxx @@ -41,6 +41,7 @@ #include <process.h> #include <memory> +#include "SolarMutex.hxx" //------------------------------------------------ // @@ -159,7 +160,9 @@ bool SAL_CALL CAsyncEventNotifier::startup(bool bCreateSuspended) void SAL_CALL CAsyncEventNotifier::shutdown() { - OSL_PRECOND(GetCurrentThreadId() != m_ThreadId, "Method called in wrong thread context!"); + unsigned nThreadId = GetCurrentThreadId(); + + OSL_PRECOND(nThreadId != m_ThreadId, "Method called in wrong thread context!"); osl::ResettableMutexGuard aGuard(m_Mutex); diff --git a/fpicker/source/win32/filepicker/asyncrequests.cxx b/fpicker/source/win32/filepicker/asyncrequests.cxx index 17352345eb2b..dad19a629f7f 100644 --- a/fpicker/source/win32/filepicker/asyncrequests.cxx +++ b/fpicker/source/win32/filepicker/asyncrequests.cxx @@ -30,6 +30,7 @@ #include "asyncrequests.hxx" #include <vcl/svapp.hxx> +#include <vos/mutex.hxx> //----------------------------------------------------------------------------- // namespace @@ -68,6 +69,7 @@ void Request::wait(::sal_Int32 nMilliSeconds) void Request::waitProcessMessages() { + ::vos::OGuard aGuard( Application::GetSolarMutex() ); while (!m_aJoiner.check()) Application::Yield(); } diff --git a/fpicker/source/win32/filepicker/makefile.mk b/fpicker/source/win32/filepicker/makefile.mk index c23c08108e42..de192879b629 100644 --- a/fpicker/source/win32/filepicker/makefile.mk +++ b/fpicker/source/win32/filepicker/makefile.mk @@ -79,7 +79,8 @@ SLOFILES=$(SLO)$/FileOpenDlg.obj\ $(SLO)$/asyncrequests.obj\ $(SLO)$/VistaFilePickerEventHandler.obj\ $(SLO)$/VistaFilePickerImpl.obj\ - $(SLO)$/VistaFilePicker.obj + $(SLO)$/VistaFilePicker.obj\ + $(SLO)$/SolarMutex.obj # --- Targets ------------------------------------------------------ diff --git a/fpicker/source/win32/folderpicker/MtaFop.cxx b/fpicker/source/win32/folderpicker/MtaFop.cxx index 573036c74252..147e0ef09cdd 100644 --- a/fpicker/source/win32/folderpicker/MtaFop.cxx +++ b/fpicker/source/win32/folderpicker/MtaFop.cxx @@ -448,34 +448,22 @@ LPITEMIDLIST SAL_CALL CMtaFolderPicker::getItemIdListFromPath( const rtl::OUStri if ( !aDirectory.getLength( ) ) return NULL; - IMallocPtr pIMalloc; - SHGetMalloc(&pIMalloc); + LPITEMIDLIST lpItemIdList(NULL); - LPITEMIDLIST lpItemIdList = static_cast<LPITEMIDLIST>( - pIMalloc->Alloc(sizeof(ITEMIDLIST))); + IShellFolderPtr pIShellFolder; + SHGetDesktopFolder(&pIShellFolder); - if (lpItemIdList) + if (pIShellFolder.is()) { - IShellFolderPtr pIShellFolder; - SHGetDesktopFolder(&pIShellFolder); - - if (pIShellFolder.is()) - { - pIShellFolder->ParseDisplayName( - NULL, - NULL, - reinterpret_cast<LPOLESTR>(const_cast< sal_Unicode* >( aDirectory.getStr( ) )), - NULL, - &lpItemIdList, - NULL ); - } + pIShellFolder->ParseDisplayName( + NULL, + NULL, + reinterpret_cast<LPWSTR>(const_cast< sal_Unicode* >( aDirectory.getStr( ) )), + NULL, + &lpItemIdList, + NULL ); } - if (pIMalloc.is()) - pIMalloc->Free(lpItemIdList); - - lpItemIdList = NULL; - return lpItemIdList; } diff --git a/fpicker/source/win32/misc/WinImplHelper.cxx b/fpicker/source/win32/misc/WinImplHelper.cxx index befd02352243..e253385a3c3d 100644 --- a/fpicker/source/win32/misc/WinImplHelper.cxx +++ b/fpicker/source/win32/misc/WinImplHelper.cxx @@ -69,6 +69,7 @@ const sal_Unicode AMPERSAND_SIGN = L'&'; // Windows 2000 VER_PLATFORM_WIN32_NT 5 0 // Windows XP VER_PLATFORM_WIN32_NT 5 1 // Windows Vista VER_PLATFORM_WIN32_NT 6 0 +// Windows 7 VER_PLATFORM_WIN32_NT 6 1 // Windows 95 VER_PLATFORM_WIN32_WINDOWS 4 0 // Windows 98 VER_PLATFORM_WIN32_WINDOWS 4 10 // Windows ME VER_PLATFORM_WIN32_WINDOWS 4 90 @@ -94,25 +95,47 @@ bool SAL_CALL IsWindowsVersion(unsigned int PlatformId, unsigned int MajorVersio } //------------------------------------------------------------ -// determine if we are running under Win2000 +// determine if we are running under Vista or newer OS //------------------------------------------------------------ -bool SAL_CALL IsWindowsVista() +bool SAL_CALL IsWindowsVistaOrNewer() { - return IsWindowsVersion(VER_PLATFORM_WIN32_NT, 6, 0); + OSVERSIONINFO osvi; + osvi.dwOSVersionInfoSize = sizeof(osvi); + + if(!GetVersionEx(&osvi)) + return false; + + bool bRet = (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId) && + (osvi.dwMajorVersion >= 6); + + bRet = bRet && + (osvi.dwMinorVersion >= + sal::static_int_cast< unsigned int >(0)); + + return bRet; } //------------------------------------------------------------ -// determine if we are running under Win2000 +// determine if we are running under Windows 7 //------------------------------------------------------------ -bool SAL_CALL IsWindows2000() +bool SAL_CALL IsWindows7() { - return IsWindowsVersion(VER_PLATFORM_WIN32_NT, 5, 0); + return IsWindowsVersion(VER_PLATFORM_WIN32_NT, 6, 1); } //------------------------------------------------------------ -// +// determine if we are running under Windows Vista +//------------------------------------------------------------ + +bool SAL_CALL IsWindowsVista() +{ + return IsWindowsVersion(VER_PLATFORM_WIN32_NT, 6, 0); +} + +//------------------------------------------------------------ +// determine if we are running under Windows XP //------------------------------------------------------------ bool SAL_CALL IsWindowsXP() @@ -121,6 +144,15 @@ bool SAL_CALL IsWindowsXP() } //------------------------------------------------------------ +// determine if we are running under Windows 2000 +//------------------------------------------------------------ + +bool SAL_CALL IsWindows2000() +{ + return IsWindowsVersion(VER_PLATFORM_WIN32_NT, 5, 0); +} + +//------------------------------------------------------------ // //------------------------------------------------------------ diff --git a/fpicker/source/win32/misc/WinImplHelper.hxx b/fpicker/source/win32/misc/WinImplHelper.hxx index 3a8bd3179c81..6f29a2bb1226 100644 --- a/fpicker/source/win32/misc/WinImplHelper.hxx +++ b/fpicker/source/win32/misc/WinImplHelper.hxx @@ -53,6 +53,8 @@ // deklarations //------------------------------------------------------------------------ +bool SAL_CALL IsWindowsVistaOrNewer(); +bool SAL_CALL IsWindows7(); bool SAL_CALL IsWindowsVista(); bool SAL_CALL IsWindows2000(); bool SAL_CALL IsWindowsXP(); |