diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 70e26f941ac..db6a1f24471 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -2528,7 +2528,7 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::_SetFocus(LPTOOLBARITEM ptbi, HWND hwnd HRESULT STDMETHODCALLTYPE CShellBrowser::v_MayTranslateAccelerator(MSG *pmsg) { - return E_NOTIMPL; + return fCurrentShellView->TranslateAcceleratorW(pmsg); } HRESULT STDMETHODCALLTYPE CShellBrowser::_GetBorderDWHelper(IUnknown *punkSrc, LPRECT lprectBorder, BOOL bUseHmonitor) @@ -3272,56 +3272,59 @@ LRESULT CShellBrowser::RelayCommands(UINT uMsg, WPARAM wParam, LPARAM lParam, BO return 0; } -//static LRESULT CALLBACK ExplorerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -//{ -// return DefWindowProc(hwnd, uMsg, wParam, lParam); -//} - -static void ExplorerMessageLoop() -{ - MSG Msg; - BOOL Ret; - - while (1) - { - Ret = (GetMessage(&Msg, NULL, 0, 0) != 0); - - if (Ret != -1) - { - if (!Ret) - break; - - TranslateMessage(&Msg); - DispatchMessage(&Msg); - - if (Msg.message == WM_QUIT) - break; - } - } -} - -DWORD WINAPI BrowserThreadProc(LPVOID lpThreadParameter) +static HRESULT ExplorerMessageLoop(IEThreadParamBlock * parameters) { CComPtr shellBrowser; CComObject *theCabinet; - IEThreadParamBlock *parameters; HRESULT hResult; + MSG Msg; + BOOL Ret; - parameters = (IEThreadParamBlock *)lpThreadParameter; OleInitialize(NULL); - ATLTRY (theCabinet = new CComObject); + + ATLTRY(theCabinet = new CComObject); if (theCabinet == NULL) - return E_OUTOFMEMORY; + { + hResult = E_OUTOFMEMORY; + goto uninitialize; + } + hResult = theCabinet->QueryInterface(IID_PPV_ARG(IShellBrowser, &shellBrowser)); if (FAILED(hResult)) { delete theCabinet; - return hResult; + goto uninitialize; } + hResult = theCabinet->Initialize(parameters->directoryPIDL, 0, 0, 0); if (FAILED(hResult)) - return hResult; - ExplorerMessageLoop(); + goto uninitialize; + + while (Ret = GetMessage(&Msg, NULL, 0, 0)) + { + if (Ret == -1) + { + // Error: continue or exit? + break; + } + + if (theCabinet->v_MayTranslateAccelerator(&Msg) != S_OK) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + + if (Msg.message == WM_QUIT) + break; + } + +uninitialize: OleUninitialize(); - return 0; + return hResult; +} + +DWORD WINAPI BrowserThreadProc(LPVOID lpThreadParameter) +{ + IEThreadParamBlock * parameters = (IEThreadParamBlock *) lpThreadParameter; + return ExplorerMessageLoop(parameters); } diff --git a/dll/win32/shell32/shlview.cpp b/dll/win32/shell32/shlview.cpp index f1b4b4a0c88..f8bcd8603f7 100644 --- a/dll/win32/shell32/shlview.cpp +++ b/dll/win32/shell32/shlview.cpp @@ -1925,6 +1925,8 @@ HRESULT WINAPI CDefView::TranslateAccelerator(LPMSG lpmsg) /* FIXME: should call TranslateAcceleratorSB */ + return m_pShellBrowser->TranslateAcceleratorSB(lpmsg, 0); + TRACE("-- key=0x04%lx\n", lpmsg->wParam) ; }