Index: src/ch/ClipboardMonitor.cpp =================================================================== diff -u -N -r4cd45795025411a82006a94d9c7f7f2d9ecda421 -r044d0e17cdedf3055202486a2235e1a3c8dd6e56 --- src/ch/ClipboardMonitor.cpp (.../ClipboardMonitor.cpp) (revision 4cd45795025411a82006a94d9c7f7f2d9ecda421) +++ src/ch/ClipboardMonitor.cpp (.../ClipboardMonitor.cpp) (revision 044d0e17cdedf3055202486a2235e1a3c8dd6e56) @@ -70,9 +70,6 @@ // bufor TCHAR path[_MAX_PATH]; - CTaskPtr spTask; // ptr to a task - CClipboardEntryPtr spEntry; - // register clipboard format UINT nFormat=RegisterClipboardFormat(_T("Preferred DropEffect")); UINT uiCounter=0, uiShutCounter=0; @@ -88,19 +85,20 @@ UINT nCount=DragQueryFile(static_cast(handle), 0xffffffff, NULL, 0); - spTask = pData->m_pTasks->CreateTask(); + TTaskDefinition tTaskDefinition; - for (UINT i=0;i(handle), i, path, _MAX_PATH); - spEntry.reset(new CClipboardEntry); - spEntry->SetPath(path); - spTask->AddClipboardData(spEntry); + DragQueryFile(static_cast(handle), stIndex, path, _MAX_PATH); + + tTaskDefinition.AddSourcePath(path); } + // operation type EOperationType eOperation = eOperation_Copy; - if (IsClipboardFormatAvailable(nFormat)) + if(IsClipboardFormatAvailable(nFormat)) { handle=GetClipboardData(nFormat); LPVOID addr=GlobalLock(handle); @@ -116,22 +114,11 @@ else eOperation = eOperation_Copy; // default - copy - spTask->SetOperationType(eOperation); // copy + tTaskDefinition.SetOperationType(eOperation); // copy EmptyClipboard(); CloseClipboard(); - BUFFERSIZES bs; - bs.m_bOnlyDefault=rConfig.get_bool(PP_BFUSEONLYDEFAULT); - bs.m_uiDefaultSize=(UINT)rConfig.get_signed_num(PP_BFDEFAULT); - bs.m_uiOneDiskSize=(UINT)rConfig.get_signed_num(PP_BFONEDISK); - bs.m_uiTwoDisksSize=(UINT)rConfig.get_signed_num(PP_BFTWODISKS); - bs.m_uiCDSize=(UINT)rConfig.get_signed_num(PP_BFCD); - bs.m_uiLANSize=(UINT)rConfig.get_signed_num(PP_BFLAN); - - spTask->SetBufferSizes(&bs); - spTask->SetPriority(boost::numeric_cast(rConfig.get_signed_num(PP_CMDEFAULTPRIORITY))); - // get dest folder CFolderDialog dlg; @@ -169,11 +156,11 @@ dlg.m_bdData.strText = GetResManager().LoadString(IDS_MAINBROWSETEXT_STRING); // set count of data to display - size_t stClipboardSize = spTask->GetClipboardDataSize(); + size_t stClipboardSize = tTaskDefinition.GetSourcePathCount(); size_t stEntries = (stClipboardSize > 3) ? 2 : stClipboardSize; - for(size_t i = 0; i < stEntries; i++) + for(size_t stIndex = 0; stIndex < stEntries; stIndex++) { - dlg.m_bdData.strText += spTask->GetClipboardData(i)->GetPath() + _T("\n"); + dlg.m_bdData.strText += tTaskDefinition.GetSourcePathNameAt(stIndex) + _T("\n"); } // add ... @@ -203,15 +190,27 @@ rConfig.set_bool(PP_FDIGNORESHELLDIALOGS, dlg.m_bdData.bIgnoreDialogs); rConfig.write(NULL); - if(iResult != IDOK) - spTask.reset(); - else + if(iResult == IDOK) { // get dest path CString strData; dlg.GetPath(strData); - spTask->SetDestPath(strData); + tTaskDefinition.SetDestinationPath(strData); + CTaskPtr spTask = pData->m_pTasks->CreateTask(); + spTask->SetTaskDefinition(tTaskDefinition); + + BUFFERSIZES bs; + bs.m_bOnlyDefault=rConfig.get_bool(PP_BFUSEONLYDEFAULT); + bs.m_uiDefaultSize=(UINT)rConfig.get_signed_num(PP_BFDEFAULT); + bs.m_uiOneDiskSize=(UINT)rConfig.get_signed_num(PP_BFONEDISK); + bs.m_uiTwoDisksSize=(UINT)rConfig.get_signed_num(PP_BFTWODISKS); + bs.m_uiCDSize=(UINT)rConfig.get_signed_num(PP_BFCD); + bs.m_uiLANSize=(UINT)rConfig.get_signed_num(PP_BFLAN); + + spTask->SetBufferSizes(&bs); + spTask->SetPriority(boost::numeric_cast(rConfig.get_signed_num(PP_CMDEFAULTPRIORITY))); + // add task to a list of tasks and start pData->m_pTasks->Add(spTask);