@@ -2585,7 +2585,7 @@ LRESULT CALLBACK TELVProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UIN
25852585 static HWND hwndEdit = NULL ;
25862586 static FolderItem *pidEdit = NULL ;
25872587
2588- CteShellBrowser *pSB = (CteShellBrowser *)GetWindowLongPtr (hwnd, GWLP_USERDATA) ;
2588+ CteShellBrowser *pSB = (CteShellBrowser *)dwRefData ;
25892589 try {
25902590 BOOL bDoCallProc = TRUE ;
25912591 LRESULT lResult = S_FALSE;
@@ -2976,7 +2976,7 @@ LRESULT CALLBACK TELVProc2(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UI
29762976{
29772977 HWND hTree;
29782978 try {
2979- CteShellBrowser *pSB = (CteShellBrowser *)GetWindowLongPtr (hwnd, GWLP_USERDATA) ;
2979+ CteShellBrowser *pSB = (CteShellBrowser *)dwRefData ;
29802980 switch (msg)
29812981 {
29822982 case LVM_SETTEXTCOLOR:
@@ -6348,7 +6348,7 @@ VOID CteShellBrowser::FocusItem()
63486348 if (GetFolderViewAndItemCount (&pFV, SVGIO_ALLVIEW)) {
63496349 int nTop = -1 ;
63506350 if (SUCCEEDED (pFV->GetFocusedItem (&nTop)) && nTop < 0 ) {
6351- pFV-> SelectItem (0 , SVSI_FOCUSED | SVSI_ENSUREVISIBLE | SVSI_NOTAKEFOCUS | SVSI_SELECTIONMARK);
6351+ SelectItemNum (0 , SVSI_FOCUSED | SVSI_ENSUREVISIBLE | SVSI_NOTAKEFOCUS | SVSI_SELECTIONMARK);
63526352 }
63536353 pFV->Release ();
63546354 }
@@ -8653,8 +8653,9 @@ STDMETHODIMP CteShellBrowser::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid
86538653 return S_OK;
86548654#endif
86558655 case TE_METHOD + 0xf300 :// Notify
8656+ {
8657+ long lEvent = GetIntFromVariant (&pDispParams->rgvarg [nArg]);
86568658 if (nArg >= 2 ) {
8657- long lEvent = GetIntFromVariant (&pDispParams->rgvarg [nArg]);
86588659 BOOL bTFS = (nArg >= 3 && GetBoolFromVariant (&pDispParams->rgvarg [nArg - 3 ]));
86598660 for (int i = 1 ; i < (lEvent & (SHCNE_RENAMEITEM | SHCNE_RENAMEFOLDER) ? 3 : 2 ); ++i) {
86608661 LPITEMIDLIST pidl;
@@ -8666,7 +8667,8 @@ STDMETHODIMP CteShellBrowser::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid
86668667 if (bTFS) {
86678668 WCHAR szBuf[MAX_COLUMN_NAME_LEN];
86688669 SetFolderSize (pSF2, pidlLast, szBuf, _countof (szBuf));
8669- } else {
8670+ }
8671+ else {
86708672 BSTR bsPath;
86718673 if SUCCEEDED (teGetDisplayNameBSTR (pSF2, pidl, SHGDN_FORPARSING, &bsPath)) {
86728674 if SUCCEEDED (teDelProperty (m_ppDispatch[SB_TotalFileSize], bsPath)) {
@@ -8685,7 +8687,7 @@ STDMETHODIMP CteShellBrowser::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid
86858687 }
86868688 }
86878689 return S_OK;
8688-
8690+ }
86898691 case TE_METHOD + 0xf400 :// NavigateComplete
86908692 m_bBeforeNavigate = FALSE ;
86918693 if (m_bVisible && !IsWindowVisible (m_hwnd)) {
@@ -8914,7 +8916,7 @@ STDMETHODIMP CteShellBrowser::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid
89148916 }
89158917 IFolderView *pFV;
89168918 if (GetFolderViewAndItemCount (&pFV,SVGIO_SELECTION) == 0 ) {
8917- pFV-> SelectItem (0 , SVSI_FOCUSED | SVSI_NOTAKEFOCUS);
8919+ SelectItemNum (0 , SVSI_FOCUSED | SVSI_NOTAKEFOCUS);
89188920 }
89198921 SafeRelease (&pFV);
89208922 return DoFunc (TE_OnSort, this , S_OK);
@@ -9310,23 +9312,8 @@ STDMETHODIMP CteShellBrowser::SelectItem(VARIANT *pvfi, int dwFlags)
93109312 if (m_pShellView) {
93119313 teFixListState (m_hwndLV, dwFlags);
93129314 if (teVarIsNumber (pvfi) && pvfi->vt != VT_BSTR) {
9313- IFolderView *pFV = NULL ;
93149315 int nIndex = GetIntFromVariant (pvfi);
9315- int nCount = GetFolderViewAndItemCount (&pFV, SVGIO_ALLVIEW);
9316- if (nIndex < nCount) {
9317- if (m_hwndLV && !(dwFlags & (SVSI_SELECT | SVSI_DESELECTOTHERS))) {// 21.12.15
9318- if (nIndex == ListView_GetNextItem (m_hwndLV, -1 , LVNI_SELECTED)) {
9319- if (ListView_GetNextItem (m_hwndLV, nIndex, LVNI_SELECTED) < 0 ) {
9320- dwFlags |= SVSI_DESELECTOTHERS;
9321- }
9322- }
9323- }
9324- if (dwFlags & (SVSI_SELECTIONMARK | (SVSI_KEYBOARDSELECT & ~SVSI_SELECT))) {// 21.4.7
9325- pFV->SelectItem (nIndex, dwFlags & (SVSI_SELECTIONMARK | SVSI_KEYBOARDSELECT | SVSI_NOTAKEFOCUS));
9326- }
9327- hr = pFV->SelectItem (nIndex, dwFlags & ~(SVSI_SELECTIONMARK | (SVSI_KEYBOARDSELECT & ~SVSI_SELECT)));
9328- }
9329- SafeRelease (&pFV);
9316+ hr = SelectItemNum (nIndex, dwFlags);
93309317 } else {
93319318 IDataObject *pDataObj;
93329319 if (GetDataObjFromVariant (&pDataObj, pvfi)) {
@@ -9350,7 +9337,6 @@ STDMETHODIMP CteShellBrowser::SelectItem(VARIANT *pvfi, int dwFlags)
93509337 teCoTaskMemFree (pidl);
93519338 }
93529339 }
9353- CteFolderItem *pid1 = NULL ;
93549340 if (m_pFolderItem) {
93559341 teILFreeClear (&m_pFolderItem->m_pidlFocused );
93569342 }
@@ -9380,17 +9366,43 @@ HRESULT CteShellBrowser::SelectItemEx(LPITEMIDLIST pidl, int dwFlags)
93809366 SafeRelease (&pFV);
93819367 }
93829368 }
9369+ BOOL bRedraw = m_hwndLV && (dwFlags & SVSI_ENSUREVISIBLE);
9370+ if (bRedraw) {
9371+ m_dwRedraw |= 2 ;
9372+ SendMessage (m_hwnd, WM_SETREDRAW, FALSE , 0 );
9373+ }
93839374 if (dwFlags & (SVSI_SELECTIONMARK | (SVSI_KEYBOARDSELECT & ~SVSI_SELECT))) {// 21.4.7
93849375 m_pShellView->SelectItem (pidlLast, dwFlags & (SVSI_SELECTIONMARK | SVSI_KEYBOARDSELECT | SVSI_NOTAKEFOCUS));
93859376 }
93869377 hr = m_pShellView->SelectItem (pidlLast, dwFlags & ~(SVSI_SELECTIONMARK | (SVSI_KEYBOARDSELECT & ~SVSI_SELECT)));
9378+
93879379 if (FAILED (hr) && (dwFlags & SVSI_DESELECTOTHERS)) {
93889380 hr = m_pShellView->SelectItem (pidlLast, SVSI_DESELECTOTHERS);
93899381 }
9382+ if (bRedraw) {
9383+ RedrawUpdate ();
9384+ }
9385+
93909386 }
93919387 return hr;
93929388}
93939389
9390+ HRESULT CteShellBrowser::SelectItemNum (int nIndex, int dwFlags)
9391+ {
9392+ HRESULT hr = E_NOTIMPL;
9393+ IFolderView *pFV = NULL ;
9394+ int nCount = GetFolderViewAndItemCount (&pFV, SVGIO_ALLVIEW);
9395+ if (nIndex < nCount) {
9396+ LPITEMIDLIST pidl;
9397+ if SUCCEEDED (pFV->Item (nIndex, &pidl)) {
9398+ SelectItemEx (pidl, dwFlags);
9399+ teILFreeClear (&pidl);
9400+ }
9401+ }
9402+ SafeRelease (&pFV);
9403+ return hr;
9404+ }
9405+
93949406STDMETHODIMP CteShellBrowser::PopupItemMenu (FolderItem *pfi, VARIANT vx, VARIANT vy, BSTR *pbs)
93959407{
93969408 HRESULT hr = E_NOTIMPL;
@@ -10034,7 +10046,7 @@ VOID CteShellBrowser::AddItem(LPITEMIDLIST pidl)
1003410046 LPITEMIDLIST pidlChild = NULL ;
1003510047 if (IncludeObject2 (pSF, pidlPart, pidl) == S_OK) {
1003610048 m_dwRedraw |= 2 ;
10037- SetRedraw ( FALSE );
10049+ SendMessage (m_hwnd, WM_SETREDRAW, FALSE , 0 );
1003810050 try {
1003910051 IResultsFolder *pRF;
1004010052 if (SUCCEEDED (m_pShellView->QueryInterface (IID_PPV_ARGS (&pFV))) && SUCCEEDED (pFV->GetFolder (IID_PPV_ARGS (&pRF)))) {
@@ -10535,7 +10547,7 @@ VOID CteShellBrowser::SetPropEx()
1053510547{
1053610548 if (IUnknown_GetWindow (m_pShellView, &m_hwndDV) == S_OK) {
1053710549 if (SetWindowLongPtr (m_hwndDV, GWLP_USERDATA, (LONG_PTR)this ) != (LONG_PTR)this ) {
10538- SetWindowSubclass (m_hwndDV, TELVProc, (UINT_PTR)TELVProc, 0 );
10550+ SetWindowSubclass (m_hwndDV, TELVProc, (UINT_PTR)TELVProc, (DWORD_PTR) this );
1053910551 for (int i = WM_USER + 173 ; i <= WM_USER + 175 ; ++i) {
1054010552 teChangeWindowMessageFilterEx (m_hwndDV, i, MSGFLT_ALLOW, NULL );
1054110553 }
@@ -10565,7 +10577,7 @@ VOID CteShellBrowser::SetPropEx()
1056510577 }
1056610578 SendMessage (m_hwndLV, WM_CHANGEUISTATE, MAKELONG (UIS_SET, UISF_HIDEFOCUS), 0 );
1056710579 if (SetWindowLongPtr (m_hwndLV, GWLP_USERDATA, (LONG_PTR)this ) != (LONG_PTR)this ) {
10568- SetWindowSubclass (m_hwndLV, TELVProc2, (UINT_PTR)TELVProc2, 0 );
10580+ SetWindowSubclass (m_hwndLV, TELVProc2, (UINT_PTR)TELVProc2, (LONG_PTR) this );
1056910581 }
1057010582 FixColumnEmphasis ();
1057110583 } else {
0 commit comments