Explorar o código

improve pasting when always on top is set, set selected item on fill

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@554 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden %!s(int64=14) %!d(string=hai) anos
pai
achega
04c8456ca5
Modificáronse 6 ficheiros con 48 adicións e 49 borrados
  1. 0 2
      MainFrmThread.cpp
  2. 5 0
      Options.cpp
  3. 2 0
      Options.h
  4. 38 39
      QPasteWnd.cpp
  5. 3 5
      QPasteWnd.h
  6. 0 3
      QPasteWndThread.cpp

+ 0 - 2
MainFrmThread.cpp

@@ -160,8 +160,6 @@ void CMainFrmThread::OnSaveRemoteClips()
 	CClip *pLastClip = pLocalClips->GetTail();
 	if(pLastClip && pLastClip->m_param1 == TRUE)
 	{
-		theApp.m_FocusID = pLastClip->m_ID;
-
 		LogSendRecieveInfo("---------OnSaveRemoteClips - Before Posting msg to main thread to set clipboard");
 
 		//set the clipboard on the main thread, i was having a problem with setting the clipboard on a thread

+ 5 - 0
Options.cpp

@@ -1941,4 +1941,9 @@ BOOL CGetSetOptions::GetSetFocusToApp(CString csAppName)
 	focusCheck = "SetFocus_";
 	focusCheck += csAppName;
 	return GetProfileLong(focusCheck, FALSE);
+}
+
+DWORD CGetSetOptions::SelectedIndex()
+{
+	return (DWORD)GetProfileLong(_T("SelectedIndex"), 0);
 }

+ 2 - 0
Options.h

@@ -396,6 +396,8 @@ public:
 	static DWORD 	GetTextOnlyPasteDelay();
 
 	static BOOL		GetSetFocusToApp(CString csAppName);
+
+	static DWORD	SelectedIndex();
 };
 
 // global for easy access and for initialization of fast access variables

+ 38 - 39
QPasteWnd.cpp

@@ -54,9 +54,7 @@ CQPasteWnd::CQPasteWnd()
     m_Title = QPASTE_TITLE;
     m_bHideWnd = true;
     m_strSQLSearch = "";
-    m_bAllowRepaintImmediately = true;
     m_bHandleSearchTextChange = true;
-    m_lItemsPerPage = 0;
     m_bModifersMoveActive = false;
 }
 
@@ -227,6 +225,7 @@ int CQPasteWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
         ASSERT(FALSE);
         return -1;
     }
+	m_lstHeader.ShowWindow(SW_SHOW);
 
     ((CWnd*) &m_GroupTree)->CreateEx(NULL, _T("SysTreeView32"), NULL, WS_BORDER | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS, CRect(0, 0, 100, 100), this, 0);
     m_GroupTree.ModifyStyle(WS_CAPTION, WS_BORDER);
@@ -429,8 +428,6 @@ BOOL CQPasteWnd::HideQPasteWindow()
     //Save the size
     SaveWindowSize();
 
-    // Hide the window when the focus is lost
-	m_lstHeader.ShowWindow(SW_HIDE);
     ShowWindow(SW_HIDE);
 
     //Reset the selection in the search combo
@@ -482,8 +479,6 @@ BOOL CQPasteWnd::ShowQPasteWindow(BOOL bFillList)
 
     SetCaptionColorActive(g_Opt.m_bShowPersistent, theApp.GetConnectCV());
 
-    // use invalidation to avoid unnecessary repainting
-    m_bAllowRepaintImmediately = false;
     UpdateStatus();
 
     m_bHideWnd = true;
@@ -515,12 +510,8 @@ BOOL CQPasteWnd::ShowQPasteWindow(BOOL bFillList)
     else
     {
         MoveControls();
-		m_lstHeader.ShowWindow(SW_SHOW);
     }
 
-    // from now on, for interactive use, we can repaint immediately
-    m_bAllowRepaintImmediately = true;
-
     // always on top... for persistent showing (g_Opt.m_bShowPersistent)
     // SHOWWINDOW was also integrated into this function rather than calling it separately
 	if(g_Opt.GetShowPersistent())
@@ -779,21 +770,14 @@ LRESULT CQPasteWnd::OnRefreshView(WPARAM wParam, LPARAM lParam)
     return TRUE;
 }
 
-void CQPasteWnd::RefreshNc(bool bRepaintImmediately)
+void CQPasteWnd::RefreshNc()
 {
     if(!theApp.m_bShowingQuickPaste)
     {
         return ;
     }
 
-    if(bRepaintImmediately && m_bAllowRepaintImmediately)
-    {
-        OnNcPaint();
-    }
-    else
-    {
-        InvalidateNc();
-    }
+	InvalidateNc();
 }
 
 void CQPasteWnd::UpdateStatus(bool bRepaintImmediately)
@@ -844,7 +828,7 @@ void CQPasteWnd::UpdateStatus(bool bRepaintImmediately)
     if(title != prev)
     {
         SetWindowText(title);
-        RefreshNc(bRepaintImmediately);
+        RefreshNc();
     }
 }
 
@@ -982,17 +966,18 @@ BOOL CQPasteWnd::FillList(CString csSQLSearch /*=""*/)
 	    m_SQL.Format(_T("SELECT Main.lID, Main.mText, Main.lParentID, Main.lDontAutoDelete, ")
 			_T("Main.lShortCut, Main.bIsGroup, Main.QuickPasteText FROM Main %s ")
 			_T("where %s order by %s"), dataJoin, strFilter, csSort);
-
-	    m_lItemsPerPage = m_lstHeader.GetCountPerPage();
 	}
 
 	{
 		ATL::CCritSecLock csLock(m_CritSection.m_sect);
 		m_mapCache.clear();
 	}
+
+	if(m_lstHeader.GetItemCount() <= 0)
+	{
+		m_lstHeader.SetItemCount(m_lstHeader.GetCountPerPage() + 2);
+	}
 	
-	m_lstHeader.Invalidate();
-	m_lstHeader.RedrawWindow();
 	CPoint loadItem(-1, m_lstHeader.GetCountPerPage() + 2);
 	m_loadItems.push_back(loadItem);
 	m_thread.FireLoadItems(true);
@@ -2111,7 +2096,6 @@ BOOL CQPasteWnd::SendToFriendbyPos(int nPos)
 LRESULT CQPasteWnd::OnDelete(WPARAM wParam, LPARAM lParam)
 {
     DeleteSelectedRows();
-
     return TRUE;
 }
 
@@ -2833,6 +2817,7 @@ void CQPasteWnd::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
         switch(g_Opt.m_bDoubleClickingOnCaptionDoes)
         {
             case TOGGLES_ALLWAYS_ON_TOP:
+				::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
                 theApp.ShowPersistent(!g_Opt.m_bShowPersistent);
                 break;
             case TOGGLES_ALLWAYS_SHOW_DESCRIPTION:
@@ -3185,6 +3170,7 @@ void CQPasteWnd::OnUpdateMenuNewclip(CCmdUI *pCmdUI)
 LRESULT CQPasteWnd::OnSetListCount(WPARAM wParam, LPARAM lParam)
 {
     m_lstHeader.SetItemCountEx(wParam);
+	SelectFocusID();
     UpdateStatus(false);
 
     return TRUE;
@@ -3201,18 +3187,6 @@ LRESULT CQPasteWnd::OnRefeshRow(WPARAM wParam, LPARAM lParam)
     int clipId = wParam;
     int listPos = lParam;
 
-    if(m_bFoundClipToSetFocusTo == false)
-    {
-        long lFocusIndex = -1;
-        if(theApp.m_FocusID == clipId || clipId < 0)
-        {
-            m_bFoundClipToSetFocusTo = true;
-            theApp.m_FocusID =  -1;
-            m_lstHeader.SetListPos(listPos);
-            UpdateStatus(false);
-        }
-    }
-
 	int topIndex = m_lstHeader.GetTopIndex();
 	int lastIndex = topIndex + m_lstHeader.GetCountPerPage();
 
@@ -3225,7 +3199,7 @@ LRESULT CQPasteWnd::OnRefeshRow(WPARAM wParam, LPARAM lParam)
 	{
 		m_lstHeader.Invalidate();
 		m_lstHeader.RedrawWindow();
-		
+
 		//Log(_T("End of first load, showing listbox and loading actual count, then accelerators"));
 		m_thread.FireDoQuery();
 		m_thread.FireLoadAccelerators();
@@ -3234,6 +3208,31 @@ LRESULT CQPasteWnd::OnRefeshRow(WPARAM wParam, LPARAM lParam)
     return true;
 }
 
+void CQPasteWnd::SelectFocusID() 
+{
+	ATL::CCritSecLock csLock(m_CritSection.m_sect);
+
+	bool selectedItem = false;
+	int index = 0;
+	MainTypeMap::iterator iter = m_mapCache.begin();
+	while(iter != m_mapCache.end())
+	{
+		if(iter->second.m_lID == theApp.m_FocusID)
+		{
+			m_lstHeader.SetListPos(index);
+			selectedItem = true;
+			break;
+		}
+		iter++;
+		index++;
+	}
+
+	if(selectedItem == false)
+	{
+		m_lstHeader.SetListPos(g_Opt.SelectedIndex());
+	}
+}
+
 void CQPasteWnd::FillMainTable(CMainTable &table, CppSQLite3Query &q)
 {
     table.m_lID = q.getIntField(_T("lID"));
@@ -3261,7 +3260,7 @@ void CQPasteWnd::OnTimer(UINT_PTR nIDEvent)
         m_Search.GetWindowText(csText);
 
         int nCaretPos = m_lstHeader.GetCaret();
-        if(nCaretPos >= 0 && theApp.m_FocusID < 0)
+        if(nCaretPos >= 0)
         {
             theApp.m_FocusID = m_lstHeader.GetItemData(nCaretPos);
         }

+ 3 - 5
QPasteWnd.h

@@ -87,15 +87,12 @@ public:
     CBitmapButton m_ShowGroupsFolderBottom;
     CBitmapButton m_ShowGroupsFolderTop;
     CBitmapButton m_BackButton;
-    bool m_bAllowRepaintImmediately;
 
     CString m_SQL;
     CString m_CountSQL;
     long m_lRecordCount;
     bool m_bStopQuery;
     bool m_bHandleSearchTextChange;
-    bool m_bFoundClipToSetFocusTo;
-    long m_lItemsPerPage;
     bool m_bModifersMoveActive;
 
     CQPasteWndThread m_thread;
@@ -109,7 +106,7 @@ public:
 
     CAccels m_MainAccels;
 
-    void RefreshNc(bool bRepaintImmediately = false);
+    void RefreshNc();
     void UpdateStatus(bool bRepaintImmediately = false); // regenerates the status (caption) text
     BOOL FillList(CString csSQLSearch = "");
     BOOL HideQPasteWindow();
@@ -146,6 +143,7 @@ public:
     void OnKeyStateUp();
     void SetKeyModiferState(bool bActive);
 	void SaveWindowSize();
+	void SelectFocusID();
 
     // Generated message map functions
 protected:
@@ -245,7 +243,7 @@ protected:
     afx_msg LRESULT OnGroupTreeMessage(WPARAM wParam, LPARAM lParam);
     afx_msg LRESULT OnFillRestOfList(WPARAM wParam, LPARAM lParam);
     afx_msg LRESULT OnRefeshRow(WPARAM wParam, LPARAM lParam);
-    afx_msg LRESULT OnSetListCount(WPARAM wParam, LPARAM lParam);
+	afx_msg LRESULT OnSetListCount(WPARAM wParam, LPARAM lParam);
     afx_msg HBRUSH CtlColor(CDC *pDC, UINT nCtlColor);
     afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
     afx_msg void OnWindowPosChanging(WINDOWPOS *lpwndpos);

+ 0 - 3
QPasteWndThread.cpp

@@ -68,10 +68,7 @@ void CQPasteWndThread::OnDoQuery(void *param)
 	CString CountSQL;
 	{
 		ATL::CCritSecLock csLock(pasteWnd->m_CritSection.m_sect);
-
-	    pasteWnd->m_bFoundClipToSetFocusTo = false;
 	    CountSQL = pasteWnd->m_CountSQL;
-	    pasteWnd->m_bStopQuery = false;
 	}
 
     long lRecordCount = 0;