Browse Source

Text only global hot key optimizations

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@728 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden 11 years ago
parent
commit
82b044910b
8 changed files with 40 additions and 37 deletions
  1. 18 13
      ClipboardSaveRestore.cpp
  2. 1 1
      ClipboardSaveRestore.h
  3. 2 2
      DittoCopyBuffer.cpp
  4. 4 5
      ExternalWindowTracker.cpp
  5. 5 14
      MainFrm.cpp
  6. 0 1
      MainFrm.h
  7. 9 0
      Misc.cpp
  8. 1 1
      Options.cpp

+ 18 - 13
ClipboardSaveRestore.cpp

@@ -10,7 +10,7 @@ CClipboardSaveRestore::~CClipboardSaveRestore(void)
 {
 }
 
-bool CClipboardSaveRestore::Save()
+bool CClipboardSaveRestore::Save(BOOL textOnly)
 {
 	m_Clipboard.RemoveAll();
 
@@ -23,23 +23,28 @@ bool CClipboardSaveRestore::Save()
 		int nFormat = EnumClipboardFormats(0);
 		while(nFormat != 0)
 		{
-			HGLOBAL hGlobal = ::GetClipboardData(nFormat);
-			LPVOID pvData = GlobalLock(hGlobal);
-			if(pvData)
+			if(textOnly == false || (nFormat == CF_TEXT || nFormat == CF_UNICODETEXT))
 			{
-				INT_PTR size = GlobalSize(hGlobal);
-				if(size > 0)
+				HGLOBAL hGlobal = ::GetClipboardData(nFormat);
+				LPVOID pvData = GlobalLock(hGlobal);
+				if(pvData)
 				{
-					//Copy the data locally
-					cf.m_hgData = NewGlobalP(pvData, size);	
-					cf.m_cfType = nFormat;
+					INT_PTR size = GlobalSize(hGlobal);
+					if(size > 0)
+					{
+						//Copy the data locally
+						cf.m_hgData = NewGlobalP(pvData, size);	
+						cf.m_cfType = nFormat;
 
-					m_Clipboard.Add(cf);
-				}
+						m_Clipboard.Add(cf);
 
-				GlobalUnlock(hGlobal);
-			}
+						//m_Clipboard owns the data now
+						cf.m_hgData = NULL;
+					}
 
+					GlobalUnlock(hGlobal);
+				}
+			}
 			nFormat = EnumClipboardFormats(nFormat);
 		}
 

+ 1 - 1
ClipboardSaveRestore.h

@@ -8,7 +8,7 @@ public:
 	CClipboardSaveRestore(void);
 	~CClipboardSaveRestore(void);
 
-	bool Save();
+	bool Save(BOOL textOnly);
 	bool Restore();
 	void Clear()	{ m_Clipboard.RemoveAll(); }
 	bool RestoreTextOnly();

+ 2 - 2
DittoCopyBuffer.cpp

@@ -27,7 +27,7 @@ bool CDittoCopyBuffer::StartCopy(long lCopyBuffer, bool bCut)
 	//Make sure the end copy thread has exited
 	EndRestoreThread();
 
-	if(m_SavedClipboard.Save())
+	if(m_SavedClipboard.Save(FALSE))
 	{
 		if(bCut)
 		{
@@ -168,7 +168,7 @@ bool CDittoCopyBuffer::PastCopyBuffer(long lCopyBuffer)
 				//then put the new data on the clipboard
 				//then send a paste
 				//then wait a little and restore the original clipboard data
-				if(m_pClipboard->Save())
+				if(m_pClipboard->Save(false))
 				{
 					theApp.m_pMainFrame->PasteOrShowGroup(q.getIntField(_T("lID")), -1, FALSE, TRUE);
 

+ 4 - 5
ExternalWindowTracker.cpp

@@ -234,10 +234,6 @@ void ExternalWindowTracker::SendPaste(bool activateTarget)
 		theApp.PumpMessageEx();
 		WaitForActiveWnd(activeWnd, max(25, g_Opt.WaitForActiveWndTimeout()));
 	}
-	else
-	{
-		theApp.PumpMessageEx();
-	}
 
 	DWORD endTick = GetTickCount();
 	if((endTick-startTick) > 150)
@@ -265,7 +261,10 @@ void ExternalWindowTracker::SendPaste(bool activateTarget)
 	
 	if (pasteAsAdmin == false)
 	{
-		Sleep(delay);
+		if(activateTarget)
+		{
+			Sleep(delay);
+		}
 		send.SetKeyDownDelay(max(50, delay));
 		send.SendKeys(csPasteString, true);
 	}

+ 5 - 14
MainFrm.cpp

@@ -371,14 +371,15 @@ LRESULT CMainFrame::OnHotKey(WPARAM wParam, LPARAM lParam)
 
 void CMainFrame::DoTextOnlyPaste()
 {
+	CClipboardSaveRestore textOnlyPaste;
+
 	Log(_T("Text Only paste, saving clipboard to be restored later"));
-	m_textOnlyPaste.Save();
+	textOnlyPaste.Save(TRUE);
 
 	Log(_T("Text Only paste, Add cf_text or cf_unicodetext to clipboard"));
-	m_textOnlyPaste.RestoreTextOnly();
+	textOnlyPaste.RestoreTextOnly();
 
 	DWORD pasteDelay = g_Opt.GetTextOnlyPasteDelay();
-	DWORD restoreDelay = g_Opt.GetTextOnlyRestoreDelay();
 
 	Log(StrF(_T("Text Only paste, delaying %d ms before sending paste"), pasteDelay));
 
@@ -387,8 +388,7 @@ void CMainFrame::DoTextOnlyPaste()
 	Log(_T("Text Only paste, Sending paste"));
 	theApp.m_activeWnd.SendPaste(false);
 
-	Log(StrF(_T("Text Only paste, delaying %d ms before restoring clipboard to original state"), restoreDelay));
-	SetTimer(TEXT_ONLY_PASTE, restoreDelay, 0);
+	Log(_T("Text Only paste, Post sending paste"));
 }
 
 void CMainFrame::DoFirstTenPositionsPaste(int nPos)
@@ -563,15 +563,6 @@ void CMainFrame::OnTimer(UINT_PTR nIDEvent)
 				}
 			}
 			break;
-
-		case TEXT_ONLY_PASTE:
-			{
-				KillTimer(TEXT_ONLY_PASTE);
-
-				Log(_T("Text Only Paste, restoring original clipboard data"));
-				m_textOnlyPaste.Restore();
-			}
-			break;
     }
 
     CFrameWnd::OnTimer(nIDEvent);

+ 0 - 1
MainFrm.h

@@ -59,7 +59,6 @@ public:
     short m_keyModifiersTimerCount;
     HWND m_tempFocusWnd;
     CMainFrmThread m_thread;
-	CClipboardSaveRestore m_textOnlyPaste;
 	CDialog *m_pGlobalClips;
 	CDialog *m_pDeleteClips;
 	CPropertySheet *m_pOptions;

+ 9 - 0
Misc.cpp

@@ -857,6 +857,8 @@ __int64 GetLastWriteTime(const CString &csFile)
 
 CString GetProcessName(HWND hWnd) 
 {
+	DWORD startTick = GetTickCount();
+
 	DWORD Id;
 	CString	strProcessName ;
 	GetWindowThreadProcessId(hWnd, &Id);
@@ -880,6 +882,13 @@ CString GetProcessName(HWND hWnd)
 
 	CloseHandle(hSnapShot);
 
+	DWORD endTick = GetTickCount();
+	DWORD diff = endTick - startTick;
+	if(diff > 5)
+	{
+		Log(StrF(_T("GetProcessName Time (ms): %d"), endTick-startTick));
+	}
+
 	return strProcessName;
 }
 

+ 1 - 1
Options.cpp

@@ -1921,7 +1921,7 @@ DWORD CGetSetOptions::GetTextOnlyRestoreDelay()
 
 DWORD CGetSetOptions::GetTextOnlyPasteDelay()
 {
-	return (DWORD)GetProfileLong(_T("TextOnlyPasteDelay"), 500);
+	return (DWORD)GetProfileLong(_T("TextOnlyPasteDelay"), 0);
 }
 
 BOOL CGetSetOptions::GetSetFocusToApp(CString csAppName)