static LRESULT BrsFolder_OnNotify( browse_info *info, UINT CtlID, LPNMHDR lpnmh ) { NMTREEVIEWW *pnmtv = (NMTREEVIEWW *)lpnmh; TRACE("%p %x %p msg=%x\n", info, CtlID, lpnmh, pnmtv->hdr.code); if (pnmtv->hdr.idFrom != IDD_TREEVIEW) return 0; switch (pnmtv->hdr.code) { case TVN_DELETEITEMA: case TVN_DELETEITEMW: return BrsFolder_Treeview_Delete( info, pnmtv ); case TVN_ITEMEXPANDINGA: case TVN_ITEMEXPANDINGW: return BrsFolder_Treeview_Expand( info, pnmtv ); case TVN_SELCHANGEDA: case TVN_SELCHANGEDW: return BrsFolder_Treeview_Changed( info, pnmtv ); default: WARN("unhandled (%d)\n", pnmtv->hdr.code); break; } return 0; }
static LRESULT BrsFolder_Treeview_Rename(browse_info *info, NMTVDISPINFOW *pnmtv) { LPTV_ITEMDATA item_data; WCHAR old_path[MAX_PATH], new_path[MAX_PATH], *p; NMTREEVIEWW nmtv; TVITEMW item; if(!pnmtv->item.pszText) return 0; item.mask = TVIF_HANDLE|TVIF_PARAM; item.hItem = (HTREEITEM)SendMessageW(info->hwndTreeView, TVM_GETNEXTITEM, TVGN_CARET, 0); SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item); item_data = (LPTV_ITEMDATA)item.lParam; SHGetPathFromIDListW(item_data->lpifq, old_path); if(!(p = strrchrW(old_path, '\\'))) return 0; p = new_path+(p-old_path+1); memcpy(new_path, old_path, (p-new_path)*sizeof(WCHAR)); strcpyW(p, pnmtv->item.pszText); if(!MoveFileW(old_path, new_path)) return 0; SHFree(item_data->lpifq); SHFree(item_data->lpi); item_data->lpifq = SHSimpleIDListFromPathW(new_path); IShellFolder_ParseDisplayName(item_data->lpsfParent, NULL, NULL, pnmtv->item.pszText, NULL, &item_data->lpi, NULL); item.mask = TVIF_HANDLE|TVIF_TEXT; item.pszText = pnmtv->item.pszText; SendMessageW(info->hwndTreeView, TVM_SETITEMW, 0, (LPARAM)&item); nmtv.itemNew.lParam = item.lParam; BrsFolder_Treeview_Changed(info, &nmtv); return 0; }