Răsfoiți Sursa

added three options
- find as you type
- always bring up ditto entirelly visible
- don't show clips that are in groups

[SAB]


git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@159 595ec19a-5cb4-439b-94a8-42fb3063c22c

sabrogden 21 ani în urmă
părinte
comite
ef09c033a0
11 a modificat fișierele cu 284 adăugiri și 37 ștergeri
  1. 30 14
      CP_Main.rc
  2. 23 6
      ComboBoxSearch.cpp
  3. 39 0
      Misc.cpp
  4. 12 0
      Misc.h
  5. 10 0
      OptionsQuickPaste.cpp
  6. 3 0
      OptionsQuickPaste.h
  7. 10 8
      QListCtrl.h
  8. 98 2
      QPasteWnd.cpp
  9. 5 0
      QPasteWnd.h
  10. 46 5
      QuickPaste.cpp
  11. 8 2
      Resource.h

+ 30 - 14
CP_Main.rc

@@ -268,6 +268,14 @@ BEGIN
 
             MENUITEM "Paste Clip after selection",  ID_MENU_QUICKOPTIONS_PASTECLIPAFTERSELECTION
 
+            MENUITEM "Find As You Type",            ID_MENU_QUICKOPTIONS_FINDASYOUTYPE
+
+            MENUITEM "Ensure Entire Window Is Visible", 
+                                                    ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE
+
+            MENUITEM "Show Clips That are in Groups in Main List", 
+                                                    ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST
+
         END
         POPUP "Sent To"
         BEGIN
@@ -417,25 +425,33 @@ BEGIN
     CONTROL         "Enable Quick Paste Transparency",IDC_TRANSPARENCY,
                     "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,67,122,10
     EDITTEXT        IDC_TRANS_PERC,140,66,19,12,ES_AUTOHSCROLL
-    PUSHBUTTON      "Font",IDC_BUTTON_FONT,18,104,143,17
-    PUSHBUTTON      "Default Font",IDC_BUTTON_DEFAULT_FAULT,164,107,48,12
-    CONTROL         "At Caret",IDC_AT_CARET,"Button",BS_AUTORADIOBUTTON,29,
-                    132,41,10
-    CONTROL         "At Cursor",IDC_AT_CURSOR,"Button",BS_AUTORADIOBUTTON,29,
-                    142,45,10
+    PUSHBUTTON      "Font",IDC_BUTTON_FONT,18,132,143,17
+    PUSHBUTTON      "Default Font",IDC_BUTTON_DEFAULT_FAULT,164,135,48,12
+    CONTROL         "At Caret",IDC_AT_CARET,"Button",BS_AUTORADIOBUTTON,31,
+                    187,41,10
+    CONTROL         "At Cursor",IDC_AT_CURSOR,"Button",BS_AUTORADIOBUTTON,31,
+                    197,45,10
     CONTROL         "At Previous Position",IDC_AT_PREVIOUS,"Button",
-                    BS_AUTORADIOBUTTON,29,152,79,10
+                    BS_AUTORADIOBUTTON,31,207,79,10
     LTEXT           "%",IDC_STATIC,162,69,8,8
-    GROUPBOX        "Popup Positioning",IDC_STATIC,18,123,116,41
+    GROUPBOX        "Popup Positioning",IDC_STATIC,19,178,116,41
     LTEXT           "  * = Don't Auto Delete\n  s = Shortcut exists\n G = Item is a Group\n  ! = Item is attached to a Group",
-                    IDC_STATIC,24,180,103,36
-    GROUPBOX        "List Item Prefix Legend",IDC_STATIC,18,170,116,50
+                    IDC_STATIC,148,183,103,36
+    GROUPBOX        "List Item Prefix Legend",IDC_STATIC,142,173,116,50
     CONTROL         "Show thumbnails (for CF_DIB types) (Could Increase Memory Usage and Display Speed)",
                     IDC_SHOW_THUMBNAILS,"Button",BS_AUTOCHECKBOX | 
                     WS_TABSTOP,18,79,293,10
     CONTROL         "Draw RTF Text in List (for RTF types) (Could Increase Memory Usage an Display Speed)",
                     IDC_DRAW_RTF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,89,
                     293,10
+    CONTROL         "Find As You Type",IDC_CHECK_FIND_AS_YOU_TYPE,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,18,99,162,10
+    CONTROL         "Ensure Entire Window is Visible",
+                    IDC_CHECK_ENTIRE_WINDOW_IS_VISIBLE,"Button",
+                    BS_AUTOCHECKBOX | WS_TABSTOP,17,109,162,10
+    CONTROL         "Show Clips That are in Groups in Main List",
+                    IDC_CHECK_SHOW_ALL_IN_MAIN_LIST,"Button",BS_AUTOCHECKBOX | 
+                    WS_TABSTOP,17,119,162,10
 END
 
 IDD_OPTIONS_KEYSTROKES DIALOG DISCARDABLE  0, 0, 350, 206
@@ -736,8 +752,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,4,0,0
- PRODUCTVERSION 2,4,0,0
+ FILEVERSION 2,4,0,1
+ PRODUCTVERSION 2,4,0,1
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -755,14 +771,14 @@ BEGIN
             VALUE "Comments", "\0"
             VALUE "CompanyName", "\0"
             VALUE "FileDescription", "Ditto\0"
-            VALUE "FileVersion", "2, 4, 0, 0\0"
+            VALUE "FileVersion", "2, 4, 0, 1\0"
             VALUE "InternalName", "CP_Main\0"
             VALUE "LegalCopyright", "Copyright (C) 2003\0"
             VALUE "LegalTrademarks", "\0"
             VALUE "OriginalFilename", "Ditto\0"
             VALUE "PrivateBuild", "\0"
             VALUE "ProductName", "Ditto\0"
-            VALUE "ProductVersion", "2, 4, 0, 0\0"
+            VALUE "ProductVersion", "2, 4, 0, 1\0"
             VALUE "SpecialBuild", "\0"
         END
     END

+ 23 - 6
ComboBoxSearch.cpp

@@ -71,19 +71,36 @@ BOOL CComboBoxSearch::PreTranslateMessage(MSG* pMsg)
 						SetCurSel(nRet);
 					}
 
-					//Send a message to the parent to refill the lb from the search
-					pWnd->PostMessage(CB_SEARCH, 0, 0);
+					if(g_Opt.m_bFindAsYouType)
+					{
+						pWnd->SendMessage(NM_SELECT, 0, 0);
+					}
+					else
+					{
+						//Send a message to the parent to refill the lb from the search
+						pWnd->PostMessage(CB_SEARCH, 0, 0);
+					}
 				}
 
 				return TRUE;
 			}	
-			if (pMsg->wParam == VK_DOWN)
+			if (pMsg->wParam == VK_DOWN ||
+				pMsg->wParam == VK_UP)
 			{
-				if(!m_bShowingDropDown)
+				if(g_Opt.m_bFindAsYouType)
 				{
-					ShowDropDown();
-					return TRUE;
+					CWnd *pWnd = GetParent();
+					if(pWnd)
+					{
+						pWnd->SendMessage(CB_UPDOWN, pMsg->wParam, pMsg->lParam);
+						return TRUE;
+					}
 				}
+//				if(!m_bShowingDropDown)
+//				{
+//					ShowDropDown();
+//					return TRUE;
+//				}
 			}
 			break;
 		}

+ 39 - 0
Misc.cpp

@@ -484,6 +484,9 @@ BOOL CGetSetOptions::m_bMultiPasteReverse;
 CString CGetSetOptions::m_csPlaySoundOnCopy;
 CStringArray CGetSetOptions::m_csNetworkPasswordArray;
 BOOL CGetSetOptions::m_bSendPasteMessageAfterSelection;
+BOOL CGetSetOptions::m_bFindAsYouType;
+BOOL CGetSetOptions::m_bEnsureEntireWindowCanBeSeen;
+BOOL CGetSetOptions::m_bShowAllClipsInMainList;
 
 CGetSetOptions g_Opt;
 
@@ -513,6 +516,9 @@ CGetSetOptions::CGetSetOptions()
 	m_bMultiPasteReverse = GetMultiPasteReverse();
 	m_csPlaySoundOnCopy = GetPlaySoundOnCopy();
 	m_bSendPasteMessageAfterSelection = GetSendPasteAfterSelection();
+	m_bFindAsYouType = GetFindAsYouType();
+	m_bEnsureEntireWindowCanBeSeen = GetEnsureEntireWindowCanBeSeen();
+	m_bShowAllClipsInMainList = GetShowAllClipsInMainList();
 
 	CString cs = GetProfileString("NetorkPassword1", "");
 	m_csNetworkPasswordArray.Add(cs);
@@ -1282,6 +1288,39 @@ BOOL CGetSetOptions::GetSendPasteAfterSelection()
 	return GetProfileLong("SendPasteMessageAfterSelection", TRUE);
 }
 
+void CGetSetOptions::SetFindAsYouType(BOOL bVal)
+{
+	m_bFindAsYouType = bVal;
+	SetProfileLong("FindAsYouType", bVal);
+}
+
+BOOL CGetSetOptions::GetFindAsYouType()
+{
+	return GetProfileLong("FindAsYouType", TRUE);
+}
+
+void CGetSetOptions::SetEnsureEntireWindowCanBeSeen(BOOL bVal)
+{
+	m_bEnsureEntireWindowCanBeSeen = bVal;
+	SetProfileLong("EnsureEntireWindowCanBeSeen", bVal);
+}
+
+BOOL CGetSetOptions::GetEnsureEntireWindowCanBeSeen()
+{
+	return GetProfileLong("EnsureEntireWindowCanBeSeen", TRUE);
+}
+
+void CGetSetOptions::SetShowAllClipsInMainList(BOOL bVal)
+{
+	m_bShowAllClipsInMainList = bVal;
+	SetProfileLong("ShowAllClipsInMainList", bVal);
+}
+
+BOOL CGetSetOptions::GetShowAllClipsInMainList()
+{
+	return GetProfileLong("ShowAllClipsInMainList", TRUE);
+}
+
 /*------------------------------------------------------------------*\
 CHotKey - a single system-wide hotkey
 \*------------------------------------------------------------------*/

+ 12 - 0
Misc.h

@@ -332,6 +332,18 @@ public:
 	static void		SetSendPasteAfterSelection(BOOL bVal);
 	static BOOL		GetSendPasteAfterSelection();
 
+	static BOOL		m_bFindAsYouType;
+	static void		SetFindAsYouType(BOOL bVal);
+	static BOOL		GetFindAsYouType();
+
+	static BOOL		m_bEnsureEntireWindowCanBeSeen;
+	static void		SetEnsureEntireWindowCanBeSeen(BOOL bVal);
+	static BOOL		GetEnsureEntireWindowCanBeSeen();
+
+	static BOOL		m_bShowAllClipsInMainList;
+	static void		SetShowAllClipsInMainList(BOOL bVal);
+	static BOOL		GetShowAllClipsInMainList();
+
 	static CStringArray m_csNetworkPasswordArray;
 
 	/*

+ 10 - 0
OptionsQuickPaste.cpp

@@ -34,6 +34,9 @@ void COptionsQuickPaste::DoDataExchange(CDataExchange* pDX)
 {
 	CPropertyPage::DoDataExchange(pDX);
 	//{{AFX_DATA_MAP(COptionsQuickPaste)
+	DDX_Control(pDX, IDC_CHECK_ENTIRE_WINDOW_IS_VISIBLE, m_EnsureEntireWindowVisible);
+	DDX_Control(pDX, IDC_CHECK_SHOW_ALL_IN_MAIN_LIST, m_ShowAllInMainList);
+	DDX_Control(pDX, IDC_CHECK_FIND_AS_YOU_TYPE, m_FindAsYouType);
 	DDX_Control(pDX, IDC_DRAW_RTF, m_btDrawRTF);
 	DDX_Control(pDX, IDC_SHOW_THUMBNAILS, m_btShowThumbnails);
 	DDX_Control(pDX, IDC_BUTTON_DEFAULT_FAULT, m_btDefaultButton);
@@ -71,6 +74,10 @@ BOOL COptionsQuickPaste::OnInitDialog()
 	m_btShowThumbnails.SetCheck(g_Opt.m_bDrawThumbnail);
 	m_btDrawRTF.SetCheck(g_Opt.m_bDrawRTF);
 
+	m_EnsureEntireWindowVisible.SetCheck(g_Opt.m_bEnsureEntireWindowCanBeSeen);
+	m_ShowAllInMainList.SetCheck(g_Opt.m_bShowAllClipsInMainList);
+	m_FindAsYouType.SetCheck(g_Opt.m_bFindAsYouType);
+
 	if(CGetSetOptions::GetQuickPastePosition() == POS_AT_CARET)
 		CheckDlgButton(IDC_AT_CARET, BST_CHECKED);
 	else if(CGetSetOptions::GetQuickPastePosition() == POS_AT_CURSOR)
@@ -123,6 +130,9 @@ BOOL COptionsQuickPaste::OnApply()
 	CGetSetOptions::SetShowTextForFirstTenHotKeys(m_btShowText.GetCheck());
 	CGetSetOptions::SetDrawThumbnail(m_btShowThumbnails.GetCheck());
 	CGetSetOptions::SetDrawRTF(m_btDrawRTF.GetCheck());
+	CGetSetOptions::SetEnsureEntireWindowCanBeSeen(m_EnsureEntireWindowVisible.GetCheck());
+	CGetSetOptions::SetShowAllClipsInMainList(m_ShowAllInMainList.GetCheck());
+	CGetSetOptions::SetFindAsYouType(m_FindAsYouType.GetCheck());
 	
 	if(m_LogFont.lfWeight != 0)
 	{

+ 3 - 0
OptionsQuickPaste.h

@@ -25,6 +25,9 @@ public:
 // Dialog Data
 	//{{AFX_DATA(COptionsQuickPaste)
 	enum { IDD = IDD_OPTIONS_QUICK_PASTE };
+	CButton	m_EnsureEntireWindowVisible;
+	CButton	m_ShowAllInMainList;
+	CButton	m_FindAsYouType;
 	CButton	m_btDrawRTF;
 	CButton	m_btShowThumbnails;
 	CButton	m_btDefaultButton;

+ 10 - 8
QListCtrl.h

@@ -14,14 +14,16 @@
 #define NM_RIGHT					WM_USER+0x101
 #define NM_LEFT						WM_USER+0x102
 #define NM_END						WM_USER+0x103
-#define NM_DELETE					WM_USER+0x105
-#define NM_PROPERTIES				WM_USER+0x106
-#define NM_LBUTTONDOWN				WM_USER+0x107
-#define NM_GETTOOLTIPTEXT	        WM_USER+0x108
-#define NM_SELECT_DB_ID		        WM_USER+0x109
-#define NM_SELECT_INDEX		        WM_USER+0x110
-#define NM_GROUP_TREE_MESSAGE       WM_USER+0x111
-#define NM_GET_CLIP_DATA	        WM_USER+0x112
+#define NM_DELETE					WM_USER+0x104
+#define NM_PROPERTIES				WM_USER+0x105
+#define NM_LBUTTONDOWN				WM_USER+0x106
+#define NM_GETTOOLTIPTEXT	        WM_USER+0x107
+#define NM_SELECT_DB_ID		        WM_USER+0x108
+#define NM_SELECT_INDEX		        WM_USER+0x109
+#define NM_GROUP_TREE_MESSAGE       WM_USER+0x110
+#define NM_GET_CLIP_DATA	        WM_USER+0x111
+#define CB_SEARCH					WM_USER+0x112
+#define CB_UPDOWN					WM_USER+0x113
 
 
 //#define NM_LIST_CUT			        WM_USER+0x111

+ 98 - 2
QPasteWnd.cpp

@@ -119,6 +119,10 @@ BEGIN_MESSAGE_MAP(CQPasteWnd, CWndEx)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_SHOWTHUMBNAILS, OnMenuQuickoptionsShowthumbnails)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_DRAWRTFTEXT, OnMenuQuickoptionsDrawrtftext)
 	ON_COMMAND(ID_MENU_QUICKOPTIONS_PASTECLIPAFTERSELECTION, OnMenuQuickoptionsPasteclipafterselection)
+	ON_CBN_EDITCHANGE(ID_EDIT_SEARCH, OnSearchEditChange)
+	ON_COMMAND(ID_MENU_QUICKOPTIONS_FINDASYOUTYPE, OnMenuQuickoptionsFindasyoutype)
+	ON_COMMAND(ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE, OnMenuQuickoptionsEnsureentirewindowisvisible)
+	ON_COMMAND(ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST, OnMenuQuickoptionsShowclipsthatareingroupsinmainlist)
 	//}}AFX_MSG_MAP
 	ON_MESSAGE(NM_SELECT, OnListSelect)
 	ON_MESSAGE(NM_END, OnListEnd)
@@ -145,7 +149,9 @@ BEGIN_MESSAGE_MAP(CQPasteWnd, CWndEx)
 	ON_MESSAGE(NM_GROUP_TREE_MESSAGE, OnGroupTreeMessage)
 	ON_COMMAND(ID_BACK_BUTTON, OnBackButton)
 	ON_MESSAGE(NM_GET_CLIP_DATA, OnGetClipData)
-	END_MESSAGE_MAP()
+	ON_MESSAGE(CB_UPDOWN, OnUpDown)
+
+END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
@@ -656,7 +662,14 @@ BOOL CQPasteWnd::FillList(CString csSQLSearch/*=""*/)
 		else
 			m_Recset.m_strSort = "bIsGroup ASC, lDate ASC";
 		
-		strFilter = "((bIsGroup = TRUE AND lParentID = 0) OR bIsGroup = FALSE)";
+		if(g_Opt.m_bShowAllClipsInMainList)
+		{
+			strFilter = "((bIsGroup = TRUE AND lParentID = 0) OR bIsGroup = FALSE)";
+		}
+		else
+		{
+			strFilter = "((bIsGroup = TRUE AND lParentID = 0) OR (bIsGroup = FALSE AND lParentID = 0))";
+		}
 	}
 	else // it's some other group
 	{
@@ -929,6 +942,15 @@ void CQPasteWnd::SetMenuChecks(CMenu *pMenu)
 	if(g_Opt.m_bSendPasteMessageAfterSelection)
 		pMenu->CheckMenuItem(ID_MENU_QUICKOPTIONS_PASTECLIPAFTERSELECTION, MF_CHECKED);
 
+	if(g_Opt.m_bFindAsYouType)
+		pMenu->CheckMenuItem(ID_MENU_QUICKOPTIONS_FINDASYOUTYPE, MF_CHECKED);
+
+	if(g_Opt.m_bEnsureEntireWindowCanBeSeen)
+		pMenu->CheckMenuItem(ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE, MF_CHECKED);
+
+	if(g_Opt.m_bShowAllClipsInMainList)
+		pMenu->CheckMenuItem(ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST, MF_CHECKED);
+
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIENDONE, 0);
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_TWO, 1);
 	SetSendToMenu(pMenu, ID_MENU_SENTTO_FRIEND_THREE, 2);
@@ -1462,6 +1484,25 @@ void CQPasteWnd::OnMenuQuickoptionsPasteclipafterselection()
 	CGetSetOptions::SetSendPasteAfterSelection(!g_Opt.m_bSendPasteMessageAfterSelection);	
 }
 
+void CQPasteWnd::OnMenuQuickoptionsFindasyoutype() 
+{
+	CGetSetOptions::SetFindAsYouType(!g_Opt.m_bFindAsYouType);
+}
+
+void CQPasteWnd::OnMenuQuickoptionsEnsureentirewindowisvisible() 
+{
+	CGetSetOptions::SetEnsureEntireWindowCanBeSeen(!g_Opt.m_bEnsureEntireWindowCanBeSeen);
+}
+
+void CQPasteWnd::OnMenuQuickoptionsShowclipsthatareingroupsinmainlist() 
+{
+	CGetSetOptions::SetShowAllClipsInMainList(!g_Opt.m_bShowAllClipsInMainList);
+
+	CString csText;
+	m_cbSearch.GetWindowText(csText);
+	FillList(csText);
+}
+
 ///////////////////////////////////////////////////////////////////////
 //END END Menu Stuff
 ///////////////////////////////////////////////////////////////////////
@@ -2109,3 +2150,58 @@ LRESULT CQPasteWnd::OnGetClipData(WPARAM wParam, LPARAM lParam)
 
 	return bRet;
 }
+
+void CQPasteWnd::OnSearchEditChange()
+{
+	if(g_Opt.m_bFindAsYouType == FALSE)
+		return;
+
+	CString csText;
+	m_cbSearch.GetWindowText(csText);
+	
+	if(csText == "")
+		return;
+	
+	FillList(csText);
+	
+	return;
+	
+	POSITION pos = m_lstHeader.GetFirstSelectedItemPosition();
+	int nFirstSel = m_lstHeader.GetNextSelectedItem(pos);
+	int nCount = m_lstHeader.GetItemCount();
+	CString cs;
+	m_cbSearch.GetWindowText(cs);
+
+	m_Recset.SetAbsolutePosition(nFirstSel);
+
+	for(int i = nFirstSel; i < nCount; i++)
+	{
+		if(m_Recset.m_strText.Find(cs) >= 0)
+		{
+			m_lstHeader.SetListPos(i);
+			return;
+		}
+
+		m_Recset.MoveNext();
+	}
+
+	m_Recset.SetAbsolutePosition(0);
+
+	for(i = 0; i < nFirstSel; i++)
+	{
+		if(m_Recset.m_strText.Find(cs) >= 0)
+		{
+			m_lstHeader.SetListPos(i);
+			return;
+		}
+
+		m_Recset.MoveNext();
+	}
+}
+
+LRESULT CQPasteWnd::OnUpDown(WPARAM wParam, LPARAM lParam)
+{
+	m_lstHeader.SendMessage(WM_KEYDOWN, wParam, lParam);
+
+	return TRUE;
+}

+ 5 - 0
QPasteWnd.h

@@ -170,6 +170,10 @@ protected:
 	afx_msg void OnMenuQuickoptionsShowthumbnails();
 	afx_msg void OnMenuQuickoptionsDrawrtftext();
 	afx_msg void OnMenuQuickoptionsPasteclipafterselection();
+	afx_msg void OnSearchEditChange();
+	afx_msg void OnMenuQuickoptionsFindasyoutype();
+	afx_msg void OnMenuQuickoptionsEnsureentirewindowisvisible();
+	afx_msg void OnMenuQuickoptionsShowclipsthatareingroupsinmainlist();
 	//}}AFX_MSG
 	afx_msg LRESULT OnListSelect(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnListEnd(WPARAM wParam, LPARAM lParam);
@@ -198,6 +202,7 @@ public:
 	afx_msg void OnMenuNewGroupSelection();
 	afx_msg void OnBackButton();
 	afx_msg LRESULT OnGetClipData(WPARAM wParam, LPARAM lParam);
+	afx_msg LRESULT OnUpDown(WPARAM wParam, LPARAM lParam);
 };
 
 

+ 46 - 5
QuickPaste.cpp

@@ -132,12 +132,14 @@ void CQuickPaste::ShowQPasteWnd(CWnd *pParent, BOOL bAtPrevPos)
 	}
 	
 	m_pwndPaste->MinMaxWindow(FORCE_MAX);
-	
+
 	CRect crRect = CRect(point, csSize);
+
+	EnsureVisible(&crRect);
+	
 	if((nPosition == POS_AT_CARET) ||
 		(nPosition == POS_AT_CURSOR) ||
-		(bAtPrevPos) ||
-		EnsureVisible(&crRect))
+		(bAtPrevPos))
 	{
 		m_pwndPaste->MoveWindow(crRect);
 	}
@@ -149,7 +151,8 @@ void CQuickPaste::ShowQPasteWnd(CWnd *pParent, BOOL bAtPrevPos)
 
 BOOL CQuickPaste::EnsureVisible(CRect *pcrRect)
 {
-	if(GetMonitorFromRect(pcrRect) < 0)
+	int nMonitor = GetMonitorFromRect(pcrRect);
+	if(nMonitor < 0)
 	{
 		GetMonitorRect(0, pcrRect);
 		pcrRect->right = pcrRect->left + 300;
@@ -158,7 +161,45 @@ BOOL CQuickPaste::EnsureVisible(CRect *pcrRect)
 		return TRUE;
 	}
 
-	return FALSE;
+	if(g_Opt.m_bEnsureEntireWindowCanBeSeen == FALSE)
+		return TRUE;
+
+	CRect crMonitor;
+	GetMonitorRect(nMonitor, crMonitor);
+
+	//Validate the left
+	long lDiff = pcrRect->left - crMonitor.left;
+	if(lDiff < 0)
+	{
+		pcrRect->left += abs(lDiff);
+		pcrRect->right += abs(lDiff);
+	}
+
+	//Right side
+	lDiff = pcrRect->right - crMonitor.right;
+	if(lDiff > 0)
+	{
+		pcrRect->left -= abs(lDiff);
+		pcrRect->right -= abs(lDiff);
+	}
+
+	//Top
+	lDiff = pcrRect->top - crMonitor.top;
+	if(lDiff < 0)
+	{
+		pcrRect->top += abs(lDiff);
+		pcrRect->bottom += abs(lDiff);
+	}
+
+	//Bottom
+	lDiff = pcrRect->bottom - crMonitor.bottom;
+	if(lDiff > 0)
+	{
+		pcrRect->top -= abs(lDiff);
+		pcrRect->bottom -= abs(lDiff);
+	}
+
+	return TRUE;
 }
 
 void CQuickPaste::HideQPasteWnd()

+ 8 - 2
Resource.h

@@ -141,8 +141,11 @@
 #define IDC_BUTTON_PLAY                 2034
 #define IDC_CHECK_WIN_DITTO             2035
 #define IDC_CHECK_WIN_NAMED_COPY        2036
+#define IDC_CHECK_FIND_AS_YOU_TYPE      2036
 #define IDC_CHECK_WIN6                  2037
+#define IDC_CHECK_ENTIRE_WINDOW_IS_VISIBLE 2037
 #define IDC_CHECK_WIN7                  2038
+#define IDC_CHECK_SHOW_ALL_IN_MAIN_LIST 2038
 #define IDC_CHECK_WIN8                  2039
 #define IDC_CHECK_WIN9                  2040
 #define IDC_CHECK_WIN10                 2041
@@ -224,6 +227,9 @@
 #define ID_MENU_QUICKOPTIONS_SHOWTHUMBNAILS 32845
 #define ID_MENU_QUICKOPTIONS_DRAWRTFTEXT 32846
 #define ID_MENU_QUICKOPTIONS_PASTECLIPAFTERSELECTION 32847
+#define ID_MENU_QUICKOPTIONS_FINDASYOUTYPE 32848
+#define ID_MENU_QUICKOPTIONS_ENSUREENTIREWINDOWISVISIBLE 32849
+#define ID_MENU_QUICKOPTIONS_SHOWCLIPSTHATAREINGROUPSINMAINLIST 32850
 
 // Next default values for new objects
 // 
@@ -231,8 +237,8 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        157
-#define _APS_NEXT_COMMAND_VALUE         32848
-#define _APS_NEXT_CONTROL_VALUE         2036
+#define _APS_NEXT_COMMAND_VALUE         32851
+#define _APS_NEXT_CONTROL_VALUE         2037
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif