瀏覽代碼

save if we are connected to the clipboard and reload in that state, also accpect the command line -connect and -disconnect for initial clipboard state

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@481 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden 16 年之前
父節點
當前提交
57f33c2a94
共有 9 個文件被更改,包括 63 次插入21 次删除
  1. 29 13
      CP_Main.cpp
  2. 1 1
      CP_Main.h
  3. 1 1
      Clip.cpp
  4. 10 3
      ClipboardViewer.cpp
  5. 1 0
      ClipboardViewer.h
  6. 7 3
      CopyThread.cpp
  7. 1 0
      CopyThread.h
  8. 10 0
      Options.cpp
  9. 3 0
      Options.h

+ 29 - 13
CP_Main.cpp

@@ -81,7 +81,7 @@ CCP_MainApp::CCP_MainApp()
 {
 	m_bAppRunning = false;
 	m_bAppExiting = false;
-	m_bStartupDisconnected = false;
+	m_connectOnStartup = -1;
 	m_MainhWnd = NULL;
 	m_pMainFrame = NULL;
 
@@ -166,6 +166,11 @@ BOOL CCP_MainApp::InitInstance()
 	}
 	else if(cmdInfo.m_bConnect || cmdInfo.m_bDisconnect)
 	{
+		//First get the saved hwnd and send it a message
+		//If ditt is running then this will return 1, meening the running ditto process
+		//handled this message
+		//If it didn't handle the message(ditto is not running) then startup this processes of ditto 
+		//disconnected from the clipboard
 		int ret = 0;
 		HWND hWnd = (HWND)CGetSetOptions::GetMainHWND();
 		if(hWnd)
@@ -173,12 +178,20 @@ BOOL CCP_MainApp::InitInstance()
 			ret = ::SendMessage(hWnd, WM_SET_CONNECTED, cmdInfo.m_bConnect, cmdInfo.m_bDisconnect);
 		}
 
+		//passed off to the running instance of ditto, exit this instance
 		if(ret == 1)
 		{
 			return FALSE;
 		}
 		
-		m_bStartupDisconnected = true;
+		if(cmdInfo.m_bConnect)
+		{
+			m_connectOnStartup = TRUE;
+		}
+		else if(cmdInfo.m_bDisconnect)
+		{
+			m_connectOnStartup = FALSE;
+		}
 	}
 
 	CInternetUpdate update;
@@ -246,8 +259,6 @@ BOOL CCP_MainApp::InitInstance()
 	pFrame->ShowWindow(SW_SHOW);
 	pFrame->UpdateWindow();
 
-	//m_Addins.LoadAll();
-
 	return TRUE;
 }
 
@@ -337,16 +348,21 @@ void CCP_MainApp::StartCopyThread()
 	// - true = enable copying on clipboard changes
 	// - pTypes = the supported types to use
 	m_CopyThread.Init(CCopyConfig(m_MainhWnd, true, true, pTypes));
-
-	VERIFY(m_CopyThread.CreateThread(CREATE_SUSPENDED));
-	m_CopyThread.ResumeThread();
 	
-	if(m_bStartupDisconnected)
+	if(m_connectOnStartup == FALSE || g_Opt.GetConnectedToClipboard() == FALSE)
 	{
-		Sleep(2000);
-		Log(_T("Starting Ditto up disconnected from the clipboard"));
+		m_CopyThread.m_connectOnStartup = false;
+		Log(StrF(_T("Starting Ditto up disconnected from the clipboard, commandLine: %d, saved value: %d"), m_connectOnStartup, g_Opt.GetConnectedToClipboard()));
 		SetConnectCV(false);
 	}
+	else if(m_connectOnStartup == TRUE)
+	{
+		SetConnectCV(true);
+		Log(_T("Starting Ditto up connected from the clipboard, passed in true from command line to start connected"));
+	}
+
+	VERIFY(m_CopyThread.CreateThread(CREATE_SUSPENDED));
+	m_CopyThread.ResumeThread();
 }
 
 void CCP_MainApp::StopCopyThread()
@@ -374,8 +390,7 @@ void CCP_MainApp::UpdateMenuConnectCV(CMenu* pMenu, UINT nMenuID)
 	if(pMenu == NULL)
 		return;
 
-	bool bConnect = false;
-	bool b = theApp.GetConnectCV();
+	bool bConnect = theApp.GetConnectCV();
 	CString cs;
 
 	if(bConnect)
@@ -678,7 +693,8 @@ BOOL CCP_MainApp::OnIdle(LONG lCount)
 void CCP_MainApp::SetConnectCV(bool bConnect)
 { 
 	m_CopyThread.SetConnectCV(bConnect); 
-	
+	g_Opt.SetConnectedToClipboard(bConnect == true);
+
 	if(bConnect)
 	{
 		m_pMainFrame->m_TrayIcon.SetIcon(IDR_MAINFRAME);

+ 1 - 1
CP_Main.h

@@ -35,7 +35,7 @@ public:
 	// track stages of startup / shutdown
 	bool	m_bAppRunning;
 	bool	m_bAppExiting;
-	bool 	m_bStartupDisconnected;
+	int 	m_connectOnStartup;
 
 	bool	m_bExitServerThread;
 

+ 1 - 1
Clip.cpp

@@ -681,7 +681,7 @@ bool CClip::AddToDataTable()
 			stmt.execDML();
 			stmt.reset();
 
-			pCF->m_lDBID = theApp.m_db.lastRowId();
+			pCF->m_lDBID = (long)theApp.m_db.lastRowId();
 		}
 	}
 	CATCH_SQLITE_EXCEPTION_AND_RETURN(false)

+ 10 - 3
ClipboardViewer.cpp

@@ -22,7 +22,8 @@ CClipboardViewer::CClipboardViewer(CCopyThread* pHandler) :
 	m_bHandlingClipChange(false),
 	m_bIsConnected(false),
 	m_bConnect(false),
-	m_dwLastCopy(0)
+	m_dwLastCopy(0),
+	m_connectOnStartup(true)
 {
 
 }
@@ -51,7 +52,10 @@ void CClipboardViewer::Create()
 	CString strParentClass = AfxRegisterWndClass(0);
 	CWnd::CreateEx(0, strParentClass, _T("Ditto Clipboard Viewer"), 0, -1, -1, 0, 0, 0, 0);
 
-	SetConnect(true);
+	if(m_connectOnStartup)
+	{
+		SetConnect(true);
+	}
 }
 
 // connects as a clipboard viewer
@@ -145,7 +149,10 @@ int CClipboardViewer::OnCreate(LPCREATESTRUCT lpCreateStruct)
 		return -1;
 	
 	//Set up the clip board viewer
-	Connect();
+	if(m_connectOnStartup)
+	{
+		Connect();
+	}
 	
 	return 0;
 }

+ 1 - 0
ClipboardViewer.h

@@ -31,6 +31,7 @@ public:
 	bool	m_bPinging;
 	bool	m_bConnect;
 	bool	m_bIsConnected;
+	bool	m_connectOnStartup;
 
 	// m_pHandler->OnClipboardChange is called when the clipboard changes.
 	CCopyThread*	m_pHandler;

+ 7 - 3
CopyThread.cpp

@@ -19,7 +19,8 @@ IMPLEMENT_DYNCREATE(CCopyThread, CWinThread)
 CCopyThread::CCopyThread():
 	m_bQuit(false),
 	m_bConfigChanged(false),
-	m_pClipboardViewer(NULL)
+	m_pClipboardViewer(NULL),
+	m_connectOnStartup(true)
 {
 	m_bAutoDelete = false;
 }
@@ -34,6 +35,7 @@ CCopyThread::~CCopyThread()
 BOOL CCopyThread::InitInstance()
 {
 	m_pClipboardViewer = new CClipboardViewer(this);
+	m_pClipboardViewer->m_connectOnStartup = m_connectOnStartup;
 
 	// the window is created within this thread and therefore uses its message queue
 	m_pClipboardViewer->Create();
@@ -163,8 +165,10 @@ bool CCopyThread::GetConnectCV()
 
 void CCopyThread::SetConnectCV(bool bConnect)
 {
-	ASSERT( m_pClipboardViewer && m_pClipboardViewer->m_hWnd );
-	::SendMessage( m_pClipboardViewer->m_hWnd, WM_SETCONNECT, bConnect, 0 );
+	if(m_pClipboardViewer != NULL && m_pClipboardViewer->m_hWnd != NULL)
+	{
+		::SendMessage( m_pClipboardViewer->m_hWnd, WM_SETCONNECT, bConnect, 0 );
+	}
 }
 
 void CCopyThread::SetSupportedTypes( CClipTypes* pTypes )

+ 1 - 0
CopyThread.h

@@ -52,6 +52,7 @@ public:
 public:
 
 	bool m_bQuit;
+	bool m_connectOnStartup;
 
 	CCriticalSection m_cs;
 

+ 10 - 0
Options.cpp

@@ -1913,4 +1913,14 @@ DWORD CGetSetOptions::FocusChangedDelay()
 DWORD CGetSetOptions::FocusWndTimerTimeout()
 {
 	return (DWORD)GetProfileLong(_T("FocusWndTimerTimeout"), 2000);
+}
+
+BOOL CGetSetOptions::GetConnectedToClipboard()
+{
+	return GetProfileLong("ConnectedToClipboard", TRUE);
+}
+
+void CGetSetOptions::SetConnectedToClipboard(BOOL val)
+{
+	SetProfileLong("ConnectedToClipboard", val);
 }

+ 3 - 0
Options.h

@@ -388,6 +388,9 @@ public:
 	static DWORD	WaitForActiveWndTimeout();
 	static DWORD	FocusChangedDelay();
 	static DWORD	FocusWndTimerTimeout();
+
+	static BOOL		GetConnectedToClipboard();
+	static void		SetConnectedToClipboard(BOOL val);
 };
 
 // global for easy access and for initialization of fast access variables