Author: dquintana
Date: Tue Oct  7 14:40:33 2014
New Revision: 64578

URL: http://svn.reactos.org/svn/reactos?rev=64578&view=rev
Log:
[FILEBROWSER]
* Always open separate.

[BROWSEUI]
* Use the threadref IUnknown for reference counting in the browser threads.

Modified:
    branches/shell-experiments/base/shell/filebrowser/filebrowser.c
    branches/shell-experiments/dll/win32/browseui/desktopipc.cpp
    branches/shell-experiments/dll/win32/browseui/shellbrowser.cpp

Modified: branches/shell-experiments/base/shell/filebrowser/filebrowser.c
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/filebrowser/filebrowser.c?rev=64578&r1=64577&r2=64578&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/filebrowser/filebrowser.c     
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/filebrowser/filebrowser.c     
[iso-8859-1] Tue Oct  7 14:40:33 2014
@@ -27,14 +27,15 @@
 #include <shlwapi_undoc.h>
 #include <stdio.h>
 
-typedef HRESULT (WINAPI *SH_OPEN_NEW_FRAME)(LPITEMIDLIST pidl, IUnknown 
*paramC, long param10, long param14);
-
 int _tmain(int argc, _TCHAR* argv[])
 {
     EXPLORER_CMDLINE_PARSE_RESULTS parseResults = { 0 };
 
     if (SHExplorerParseCmdLine(&parseResults))
+    {
+        parseResults.dwFlags |= SH_EXPLORER_CMDLINE_FLAG_SEPARATE;
         return SHCreateFromDesktop(&parseResults);
+    }
 
     return 0;
 }

Modified: branches/shell-experiments/dll/win32/browseui/desktopipc.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/browseui/desktopipc.cpp?rev=64578&r1=64577&r2=64578&view=diff
==============================================================================
--- branches/shell-experiments/dll/win32/browseui/desktopipc.cpp        
[iso-8859-1] (original)
+++ branches/shell-experiments/dll/win32/browseui/desktopipc.cpp        
[iso-8859-1] Tue Oct  7 14:40:33 2014
@@ -450,15 +450,21 @@
     HANDLE                                  threadHandle;
     DWORD                                   threadID;
 
-    DbgPrint("SHOpenFolderWindow\n");
-
-    threadHandle = CreateThread(NULL, 0x10000, BrowserThreadProc, parameters, 
0, &threadID);
+    WCHAR debugStr[MAX_PATH + 1];
+    SHGetPathFromIDListW(parameters->directoryPIDL, debugStr);
+
+    DbgPrint("SHOpenFolderWindow %p(%S)\n", parameters->directoryPIDL, 
debugStr);
+
+    PIE_THREAD_PARAM_BLOCK paramsCopy = SHCloneIETHREADPARAM(parameters);
+
+    SHGetInstanceExplorer(&(paramsCopy->offsetF8));
+    threadHandle = CreateThread(NULL, 0x10000, BrowserThreadProc, paramsCopy, 
0, &threadID);
     if (threadHandle != NULL)
     {
         CloseHandle(threadHandle);
         return S_OK;
     }
-    SHDestroyIETHREADPARAM(parameters);
+    SHDestroyIETHREADPARAM(paramsCopy);
     return E_FAIL;
 }
 
@@ -485,8 +491,12 @@
         parameters->offset10 = param10;
     parameters->directoryPIDL = pidl;
     parameters->dwFlags = dwFlags;
-
-    return SHOpenFolderWindow(parameters);
+    
+    HRESULT hr = SHOpenFolderWindow(parameters);
+    
+    SHDestroyIETHREADPARAM(parameters);
+    
+    return hr;
 }
 
 /*************************************************************************

Modified: branches/shell-experiments/dll/win32/browseui/shellbrowser.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/browseui/shellbrowser.cpp?rev=64578&r1=64577&r2=64578&view=diff
==============================================================================
--- branches/shell-experiments/dll/win32/browseui/shellbrowser.cpp      
[iso-8859-1] (original)
+++ branches/shell-experiments/dll/win32/browseui/shellbrowser.cpp      
[iso-8859-1] Tue Oct  7 14:40:33 2014
@@ -3399,6 +3399,9 @@
     HRESULT                   hResult;
     MSG Msg;
     BOOL Ret;
+
+    // Tell the thread ref we are using it.
+    parameters->offsetF8->AddRef();
     
     ATLTRY(theCabinet = new CComObject<CShellBrowser>);
     if (theCabinet == NULL)
@@ -3440,6 +3443,9 @@
 
     theCabinet.Detach();
 
+    // Tell the thread ref we are not using it anymore.
+    parameters->offsetF8->Release();
+
     return hResult;
 }
 
@@ -3454,5 +3460,7 @@
 
     OleUninitialize();
 
+    SHDestroyIETHREADPARAM(parameters);
+
     return hr;
 }


Reply via email to