// Allocates a new CClipTypes CClipTypes* CCP_MainApp::LoadTypesFromDB() { CClipTypes* pTypes = new CClipTypes; try { CppSQLite3Query q = theApp.m_db.execQuery(_T("SELECT TypeText FROM Types")); while(q.eof() == false) { pTypes->Add(GetFormatID(q.getStringField(_T("TypeText")))); q.nextRow(); } } CATCH_SQLITE_EXCEPTION if(pTypes->GetSize() <= 0) { pTypes->Add(CF_TEXT); pTypes->Add(RegisterClipboardFormat(CF_RTF)); pTypes->Add(CF_UNICODETEXT); pTypes->Add(CF_HDROP); if(g_Opt.m_bU3 == false) { pTypes->Add(CF_DIB); } } return pTypes; }
// Called within Copy Thread: void CCopyThread::OnClipboardChange() { Log(_T("OnClipboardChange - Start")); SyncConfig(); // synchronize with the main thread's copy configuration // if we are told not to copy on change, then we have nothing to do. if(!m_LocalConfig.m_bCopyOnChange) return; CClip* pClip = new CClip; CClipTypes* pSupportedTypes = m_LocalConfig.m_pSupportedTypes; bool bDeleteMemory = false; //If we are copying from a Ditto Buffer then save all to the database, so when we paste this it will paste //just like you were using Ctrl-V if(theApp.m_CopyBuffer.Active()) { Log(_T("LoadFromClipboard - Copy buffer Active Start")); pSupportedTypes = new CClipTypes; if(pSupportedTypes) { bDeleteMemory = true; COleDataObject oleData; if(oleData.AttachClipboard()) { oleData.BeginEnumFormats(); FORMATETC format; while(oleData.GetNextFormat(&format)) { pSupportedTypes->Add(format.cfFormat); } oleData.Release(); } } else { pSupportedTypes = m_LocalConfig.m_pSupportedTypes; } Log(_T("LoadFromClipboard - Copy buffer Active End")); } Log(_T("LoadFromClipboard - Before")); bool bResult = pClip->LoadFromClipboard(pSupportedTypes); Log(_T("LoadFromClipboard - After")); if(!bResult) { DWORD delay = CGetSetOptions::GetNoFormatsRetryDelay(); if(delay > 0) { Log(StrF(_T("LoadFromClipboard didn't find any clips to save, sleeping %dms, then trying again"), delay)); Sleep(delay); Log(_T("LoadFromClipboard #2 - Before")); bResult = pClip->LoadFromClipboard(pSupportedTypes); Log(_T("LoadFromClipboard #2 - After")); } else { Log(_T("LoadFromClipboard didn't find any clips to save, retry setting is not set, not retrying")); } } if(bDeleteMemory) { delete pSupportedTypes; pSupportedTypes = NULL; } if(!bResult) { delete pClip; return; // error } if(m_LocalConfig.m_bAsyncCopy) ::PostMessage(m_LocalConfig.m_hClipHandler, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0); else ::SendMessage(m_LocalConfig.m_hClipHandler, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0); Log(_T("OnClipboardChange - End")); }