Răsfoiți Sursa

- reload themes correct
- hide second key press unless checked

ScottBrogden 8 ani în urmă
părinte
comite
0c58e36cc9
9 a modificat fișierele cu 293 adăugiri și 177 ștergeri
  1. 23 21
      CP_Main.rc
  2. 11 2
      MainFrm.cpp
  3. 11 1
      OptionsQuickPaste.cpp
  4. 117 116
      OptionsSheet.cpp
  5. 2 0
      OptionsSheet.h
  6. 122 34
      QuickPasteKeyboard.cpp
  7. 1 0
      QuickPasteKeyboard.h
  8. 3 1
      Resource.h
  9. 3 2
      Theme.cpp

+ 23 - 21
CP_Main.rc

@@ -921,35 +921,37 @@ BEGIN
     LTEXT           "Count",IDC_STATIC_SELECTED_COUNT,259,300,39,8
 END
 
-IDD_OPTIONS_QUICK_PASTE_KEYBOARD DIALOGEX 0, 0, 375, 287
+IDD_OPTIONS_QUICK_PASTE_KEYBOARD DIALOGEX 0, 0, 375, 308
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION " "
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
     CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,21,361,146
-    CONTROL         "",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,25,225,80,14
-    PUSHBUTTON      "Assign",IDC_ASSIGN,318,266,50,14
-    CONTROL         "",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,195,225,80,14
-    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,211,76,10
-    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_1,"Button",BS_AUTORADIOBUTTON,99,211,53,10
+    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,14,227,76,10
+    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_1,"Button",BS_AUTORADIOBUTTON,99,227,53,10
+    CONTROL         "",IDC_HOTKEY1,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,25,241,80,14
+    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER,109,241,44,14
+    CONTROL         "Shift",IDC_CHECK_SHIFT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,258,31,10
+    CONTROL         "Control",IDC_CHECK_CONTROL_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,61,258,39,10
+    CONTROL         "Alt",IDC_CHECK_ALT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,258,25,10
+    CONTROL         "Enable Second Keypress",IDC_CHECK_ENABLE_SECOND_PRESS,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,181,202,105,10
+    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,226,76,10
+    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_2,"Button",BS_AUTORADIOBUTTON,263,226,53,10
+    CONTROL         "",IDC_HOTKEY2,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,195,240,80,14
+    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER2,282,240,44,14
+    CONTROL         "Shift",IDC_CHECK_SHIFT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,258,31,10
+    CONTROL         "Control",IDC_CHECK_CONTROL_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,258,39,10
+    CONTROL         "Alt",IDC_CHECK_ALT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,275,258,25,10
+    PUSHBUTTON      "Assign",IDC_ASSIGN,109,283,50,14
     COMBOBOX        IDC_COMBO_ALL_ASSIGNED,8,180,253,99,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     PUSHBUTTON      "Remove",IDC_BUTTON_REMOVE,265,179,50,14
     PUSHBUTTON      "Add",IDC_BUTTON_ADD,318,179,50,14
     LTEXT           "Shortcuts for selected command:",IDC_STATIC,8,169,106,8
-    GROUPBOX        "First Keypress",IDC_STATIC,7,198,151,65
-    CONTROL         "Keyboard Shortcut",IDC_RADIO_KEYBOARD_2,"Button",BS_AUTORADIOBUTTON | WS_GROUP,183,211,76,10
-    CONTROL         "Mouse Click",IDC_RADIO_MOUSE_2,"Button",BS_AUTORADIOBUTTON,263,211,53,10
-    GROUPBOX        "Second Keypress",IDC_STATIC,172,199,168,64
-    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER,109,225,44,14
-    PUSHBUTTON      "Enter Key",IDC_BUTTON_ENTER2,282,225,44,14
-    COMBOBOX        IDC_MOUSE_1,25,226,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Shift",IDC_CHECK_SHIFT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,242,31,10
-    CONTROL         "Control",IDC_CHECK_CONTROL_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,61,242,39,10
-    CONTROL         "Alt",IDC_CHECK_ALT_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,242,25,10
-    COMBOBOX        IDC_MOUSE_2,195,226,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Shift",IDC_CHECK_SHIFT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,243,31,10
-    CONTROL         "Control",IDC_CHECK_CONTROL_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,243,39,10
-    CONTROL         "Alt",IDC_CHECK_ALT_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,275,243,25,10
+    GROUPBOX        "First Keypress",IDC_STATIC,7,214,151,63
+    GROUPBOX        "Second Keypress",IDC_STATIC_SECOND_PRESS,172,215,169,62
+    COMBOBOX        IDC_MOUSE_1,25,242,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_MOUSE_2,195,240,68,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
     PUSHBUTTON      "Reset",IDC_BUTTON_RESET,318,7,50,14
 END
 
@@ -1153,7 +1155,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 368
         TOPMARGIN, 7
-        BOTTOMMARGIN, 280
+        BOTTOMMARGIN, 301
     END
 END
 #endif    // APSTUDIO_INVOKED

+ 11 - 2
MainFrm.cpp

@@ -1137,6 +1137,7 @@ LRESULT CMainFrame::OnShowOptions(WPARAM wParam, LPARAM lParam)
 
 LRESULT CMainFrame::OnOptionsClosed(WPARAM wParam, LPARAM lParam)
 {
+	BOOL themeChanged = (BOOL)wParam;
 	m_trayIcon.MinimiseToTray(this);
 	CAlphaBlend tran;
 	tran.SetTransparent(m_hWnd, 255, 0);
@@ -1144,13 +1145,21 @@ LRESULT CMainFrame::OnOptionsClosed(WPARAM wParam, LPARAM lParam)
 	delete m_pOptions;
 	m_pOptions = NULL;
 
-	if(m_quickPaste.m_pwndPaste != NULL)
+	if (themeChanged)
 	{
-		m_quickPaste.m_pwndPaste->PostMessage(NM_POST_OPTIONS_WINDOW);
+		m_quickPaste.CloseQPasteWnd();
+	}
+	else
+	{
+		if (m_quickPaste.m_pwndPaste != NULL)
+		{
+			m_quickPaste.m_pwndPaste->PostMessage(NM_POST_OPTIONS_WINDOW);
+		}
 	}
 
 	m_trayIcon.SetMenu(NULL, IDR_MENU);
 	theApp.m_Language.UpdateTrayIconRightClickMenu(&m_trayIcon.GetMenu());
+	
 
 	return 0;
 }

+ 11 - 1
OptionsQuickPaste.cpp

@@ -169,12 +169,17 @@ BOOL COptionsQuickPaste::OnApply()
 		CGetSetOptions::SetFont(m_LogFont);
 	}
 
+	CString currentTheme = g_Opt.GetTheme();
+
 	CString csTheme;
 	if(m_cbTheme.GetCurSel() >= 0)
 	{
 		m_cbTheme.GetLBText(m_cbTheme.GetCurSel(), csTheme);
-		if(csTheme == DEFAULT_THEME)
+		if (csTheme == DEFAULT_THEME)
+		{
 			g_Opt.SetTheme("");
+			csTheme = _T("");
+		}
 		else
 			g_Opt.SetTheme(csTheme);
 	}
@@ -183,6 +188,11 @@ BOOL COptionsQuickPaste::OnApply()
 		g_Opt.SetTheme("");
 	}
 
+	if (currentTheme != csTheme)
+	{
+		m_pParent->m_themeChanged = TRUE;
+	}
+
 	CString diffPath;
 	m_diffPathEditBox.GetWindowText(diffPath);
 	g_Opt.SetDiffApp(diffPath);

+ 117 - 116
OptionsSheet.cpp

@@ -1,133 +1,134 @@
-// OptionsSheet.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include "CP_Main.h"
-#include "OptionsSheet.h"
-#include "OptionsKeyBoard.h"
-#include "OptionsGeneral.h"
-#include "OptionsQuickPaste.h"
-#include "OptionsStats.h"
-#include "OptionsTypes.h"
-#include "About.h"
-#include "OptionFriends.h"
-#include "OptionsCopyBuffers.h"
-#include "Misc.h"
-#include "QuickPasteKeyboard.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif 
-
-
-/////////////////////////////////////////////////////////////////////////////
-// COptionsSheet
-
-IMPLEMENT_DYNAMIC(COptionsSheet, CPropertySheet)
-
-COptionsSheet::COptionsSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
-	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
-{
-	m_pKeyBoardOptions = NULL;
-	m_pGeneralOptions = NULL;
-	m_pQuickPasteOptions = NULL;
-	m_pCopyBuffers = NULL;
-	m_pStats = NULL;
-	m_pTypes = NULL;
-	m_pAbout = NULL;
-	m_pFriends = NULL;
-	m_pCopyBuffers = NULL;
-	m_pQuickPasteShortCuts = NULL;
-	
-	m_pUtilites = NULL;
-	m_hWndParent = NULL;
-
-	EnableStackedTabs(TRUE);
-
-	m_pGeneralOptions = new COptionsGeneral;
-	m_pKeyBoardOptions = new COptionsKeyBoard;
-	m_pQuickPasteOptions = new COptionsQuickPaste;
-	m_pQuickPasteShortCuts = new CQuickPasteKeyboard;
-
-	m_pCopyBuffers = new COptionsCopyBuffers;
-	m_pStats = new COptionsStats;
-	m_pTypes = new COptionsTypes;
-	m_pAbout = new CAbout;
-
-	AddPage(m_pGeneralOptions);
-	AddPage(m_pTypes);
-	AddPage(m_pKeyBoardOptions);
-	AddPage(m_pCopyBuffers);
-	AddPage(m_pQuickPasteOptions);
-	AddPage(m_pQuickPasteShortCuts);
-	if(g_Opt.GetAllowFriends())
-	{
-		m_pFriends = new COptionFriends;
-		AddPage(m_pFriends);
-	}
-	AddPage(m_pStats);
-	AddPage(m_pAbout);
-}
-
-COptionsSheet::~COptionsSheet()
-{
-	delete m_pGeneralOptions;
-	delete m_pKeyBoardOptions;
-	delete m_pQuickPasteOptions;
-	delete m_pCopyBuffers;
-	delete m_pStats;
-	delete m_pTypes;
-	delete m_pAbout;	
-	delete m_pFriends;
-	delete m_pUtilites;
-	delete m_pQuickPasteShortCuts;	
-}
-
-BEGIN_MESSAGE_MAP(COptionsSheet, CPropertySheet)
-	//{{AFX_MSG_MAP(COptionsSheet)
-		// NOTE - the ClassWizard will add and remove mapping macros here.
-	ON_WM_DESTROY()
-	ON_WM_NCDESTROY()
-	//ON_WM_CLOSE()
-	//}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// COptionsSheet message handlers
-
-void COptionsSheet::OnDestroy()
-{
-	CPropertySheet::OnDestroy();
-}
-
+// OptionsSheet.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "CP_Main.h"
+#include "OptionsSheet.h"
+#include "OptionsKeyBoard.h"
+#include "OptionsGeneral.h"
+#include "OptionsQuickPaste.h"
+#include "OptionsStats.h"
+#include "OptionsTypes.h"
+#include "About.h"
+#include "OptionFriends.h"
+#include "OptionsCopyBuffers.h"
+#include "Misc.h"
+#include "QuickPasteKeyboard.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif 
+
+
+/////////////////////////////////////////////////////////////////////////////
+// COptionsSheet
+
+IMPLEMENT_DYNAMIC(COptionsSheet, CPropertySheet)
+
+COptionsSheet::COptionsSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
+	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
+{
+	m_themeChanged = FALSE;
+	m_pKeyBoardOptions = NULL;
+	m_pGeneralOptions = NULL;
+	m_pQuickPasteOptions = NULL;
+	m_pCopyBuffers = NULL;
+	m_pStats = NULL;
+	m_pTypes = NULL;
+	m_pAbout = NULL;
+	m_pFriends = NULL;
+	m_pCopyBuffers = NULL;
+	m_pQuickPasteShortCuts = NULL;
+	
+	m_pUtilites = NULL;
+	m_hWndParent = NULL;
+
+	EnableStackedTabs(TRUE);
+
+	m_pGeneralOptions = new COptionsGeneral;
+	m_pKeyBoardOptions = new COptionsKeyBoard;
+	m_pQuickPasteOptions = new COptionsQuickPaste;
+	m_pQuickPasteShortCuts = new CQuickPasteKeyboard;
+
+	m_pCopyBuffers = new COptionsCopyBuffers;
+	m_pStats = new COptionsStats;
+	m_pTypes = new COptionsTypes;
+	m_pAbout = new CAbout;
+
+	AddPage(m_pGeneralOptions);
+	AddPage(m_pTypes);
+	AddPage(m_pKeyBoardOptions);
+	AddPage(m_pCopyBuffers);
+	AddPage(m_pQuickPasteOptions);
+	AddPage(m_pQuickPasteShortCuts);
+	if(g_Opt.GetAllowFriends())
+	{
+		m_pFriends = new COptionFriends;
+		AddPage(m_pFriends);
+	}
+	AddPage(m_pStats);
+	AddPage(m_pAbout);
+}
+
+COptionsSheet::~COptionsSheet()
+{
+	delete m_pGeneralOptions;
+	delete m_pKeyBoardOptions;
+	delete m_pQuickPasteOptions;
+	delete m_pCopyBuffers;
+	delete m_pStats;
+	delete m_pTypes;
+	delete m_pAbout;	
+	delete m_pFriends;
+	delete m_pUtilites;
+	delete m_pQuickPasteShortCuts;	
+}
+
+BEGIN_MESSAGE_MAP(COptionsSheet, CPropertySheet)
+	//{{AFX_MSG_MAP(COptionsSheet)
+		// NOTE - the ClassWizard will add and remove mapping macros here.
+	ON_WM_DESTROY()
+	ON_WM_NCDESTROY()
+	//ON_WM_CLOSE()
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// COptionsSheet message handlers
+
+void COptionsSheet::OnDestroy()
+{
+	CPropertySheet::OnDestroy();
+}
+
 void COptionsSheet::SetNotifyWnd(HWND hWnd)
 {
 	m_hWndParent = hWnd;
-}
-
-BOOL COptionsSheet::OnInitDialog() 
-{
+}
+
+BOOL COptionsSheet::OnInitDialog() 
+{
 	m_bModeless = FALSE;   
 	m_nFlags |= WF_CONTINUEMODAL;
 
 	BOOL bResult = CPropertySheet::OnInitDialog();
 
-	SetWindowText(_T("Ditto"));
-
-	theApp.m_Language.UpdateOptionsSheet(this);
-
+	SetWindowText(_T("Ditto"));
+
+	theApp.m_Language.UpdateOptionsSheet(this);
+
 	::ShowWindow(::GetDlgItem(m_hWnd, ID_APPLY_NOW), SW_HIDE);
 
 	m_bModeless = TRUE;
 	m_nFlags &= ~WF_CONTINUEMODAL;
 
-	return bResult;
-}
-
+	return bResult;
+}
+
 void COptionsSheet::OnNcDestroy()
 {
 	CPropertySheet::OnNcDestroy();
-	::PostMessage(m_hWndParent, WM_OPTIONS_CLOSED, 0, 0);
+	::PostMessage(m_hWndParent, WM_OPTIONS_CLOSED, m_themeChanged, 0);
 }

+ 2 - 0
OptionsSheet.h

@@ -27,6 +27,8 @@ public:
 // Operations
 public:
 
+	BOOL m_themeChanged;
+
 // Overrides
 	// ClassWizard generated virtual function overrides
 	//{{AFX_VIRTUAL(COptionsSheet)

+ 122 - 34
QuickPasteKeyboard.cpp

@@ -54,6 +54,7 @@ BEGIN_MESSAGE_MAP(CQuickPasteKeyboard, CPropertyPage)
 	ON_BN_CLICKED(IDC_RADIO_MOUSE_1, &CQuickPasteKeyboard::OnBnClickedRadioMouse1)
 	ON_BN_CLICKED(IDC_RADIO_KEYBOARD_2, &CQuickPasteKeyboard::OnBnClickedRadioKeyboard2)
 	ON_BN_CLICKED(IDC_RADIO_MOUSE_2, &CQuickPasteKeyboard::OnBnClickedRadioMouse2)
+	ON_BN_CLICKED(IDC_CHECK_ENABLE_SECOND_PRESS, &CQuickPasteKeyboard::OnBnClickedCheckEnableSecondPress)
 END_MESSAGE_MAP()
 
 
@@ -294,29 +295,36 @@ void CQuickPasteKeyboard::OnBnClickedAssign()
 			m_map[id].Array[shortCutId].A = ACCEL_MAKEKEY(vk, mod);
 		}
 
-		if (this->IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
+		if (IsDlgButtonChecked(IDC_CHECK_ENABLE_SECOND_PRESS) == BST_CHECKED)
 		{
-			//remove the extended key flag, don't think this is needed now days
-			m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(LOBYTE(m_hotKey2.GetHotKey()), (HIBYTE(m_hotKey2.GetHotKey()) & ~HOTKEYF_EXT));
-		}
-		else if (this->IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
-		{
-			WORD vk = (WORD)m_mouseType2.GetItemData(m_mouseType2.GetCurSel());
-			WORD mod = 0;
-			if (this->IsDlgButtonChecked(IDC_CHECK_SHIFT_2) == BST_CHECKED)
-			{
-				mod |= HOTKEYF_SHIFT;
-			}
-			if (this->IsDlgButtonChecked(IDC_CHECK_CONTROL_2) == BST_CHECKED)
+			if (this->IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
 			{
-				mod |= HOTKEYF_CONTROL;
+				//remove the extended key flag, don't think this is needed now days
+				m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(LOBYTE(m_hotKey2.GetHotKey()), (HIBYTE(m_hotKey2.GetHotKey()) & ~HOTKEYF_EXT));
 			}
-			if (this->IsDlgButtonChecked(IDC_CHECK_ALT_2) == BST_CHECKED)
+			else if (this->IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
 			{
-				mod |= HOTKEYF_ALT;
-			}
+				WORD vk = (WORD)m_mouseType2.GetItemData(m_mouseType2.GetCurSel());
+				WORD mod = 0;
+				if (this->IsDlgButtonChecked(IDC_CHECK_SHIFT_2) == BST_CHECKED)
+				{
+					mod |= HOTKEYF_SHIFT;
+				}
+				if (this->IsDlgButtonChecked(IDC_CHECK_CONTROL_2) == BST_CHECKED)
+				{
+					mod |= HOTKEYF_CONTROL;
+				}
+				if (this->IsDlgButtonChecked(IDC_CHECK_ALT_2) == BST_CHECKED)
+				{
+					mod |= HOTKEYF_ALT;
+				}
 
-			m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(vk, mod);
+				m_map[id].Array[shortCutId].B = ACCEL_MAKEKEY(vk, mod);
+			}
+		}
+		else
+		{
+			m_map[id].Array[shortCutId].B = 0;
 		}
 
 		CString sh = GetShortCutText(m_map[id]);
@@ -564,6 +572,12 @@ void CQuickPasteKeyboard::LoadHotKey(KeyboardAB ab)
 		int b = 0;
 		if (ab.B > 0)
 		{
+			CheckDlgButton(IDC_CHECK_ENABLE_SECOND_PRESS, BST_CHECKED);
+
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_MOUSE_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_KEYBOARD_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_STATIC_SECOND_PRESS), SW_SHOW);
+
 			b = ab.B;
 
 			switch (LOBYTE((DWORD)b))
@@ -594,6 +608,12 @@ void CQuickPasteKeyboard::LoadHotKey(KeyboardAB ab)
 			case VK_MOUSE_MIDDLE_CLICK:
 				SelectMouseTypeCombo(m_mouseType2, LOBYTE((DWORD)b));
 				CheckDlgButton(IDC_RADIO_MOUSE_2, BST_CHECKED);
+				CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_UNCHECKED);
+
+				::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_SHOW);
+				::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_SHOW);
+				::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_SHOW);
+				::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_SHOW);
 
 				{
 					BYTE mod = HIBYTE(b);
@@ -608,22 +628,37 @@ void CQuickPasteKeyboard::LoadHotKey(KeyboardAB ab)
 				break;
 			default:
 				CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
+				CheckDlgButton(IDC_RADIO_MOUSE_2, BST_UNCHECKED);
 				m_hotKey2.SetHotKey(LOBYTE((DWORD)b), (HIBYTE((DWORD)b)));
 				break;
 			}
 		}
 		else
 		{ 
+			CheckDlgButton(IDC_CHECK_ENABLE_SECOND_PRESS, BST_UNCHECKED);
 			CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
+
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_MOUSE_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_KEYBOARD_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_HIDE);
+
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_STATIC_SECOND_PRESS), SW_HIDE);
 		}
 	}
 	else
 	{
+		CheckDlgButton(IDC_CHECK_ENABLE_SECOND_PRESS, BST_UNCHECKED);
 		CheckDlgButton(IDC_RADIO_KEYBOARD_1, BST_CHECKED);
 		CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
 	}
 
 	OnBnClickedRadioMouse1();
+	//ShowSecondPress(FALSE);
 }
 
 void CQuickPasteKeyboard::SelectMouseTypeCombo(CComboBox &combo, int value)
@@ -828,25 +863,28 @@ void CQuickPasteKeyboard::OnBnClickedRadioMouse1()
 		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_1), SW_SHOW);
 	}
 
-	if (IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
+	if (IsDlgButtonChecked(IDC_CHECK_ENABLE_SECOND_PRESS) == BST_CHECKED)
 	{
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_SHOW);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_SHOW);
+		if (IsDlgButtonChecked(IDC_RADIO_KEYBOARD_2) == BST_CHECKED)
+		{
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_SHOW);
 
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
-	}
-	else if (IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
-	{
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_HIDE);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
+		}
+		else if (IsDlgButtonChecked(IDC_RADIO_MOUSE_2) == BST_CHECKED)
+		{
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_HIDE);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_HIDE);
 
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_SHOW);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_SHOW);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_SHOW);
-		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_SHOW);
+			::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_SHOW);
+		}
 	}
 }
 
@@ -860,3 +898,53 @@ void CQuickPasteKeyboard::OnBnClickedRadioMouse2()
 {
 	OnBnClickedRadioMouse1();
 }
+
+void CQuickPasteKeyboard::OnBnClickedCheckEnableSecondPress()
+{
+	int shortCutId = SelectedCommandShortCutId();
+	int id = SelectedCommandId();
+
+	if (m_map.find(id) != m_map.end() &&
+		shortCutId >= 0 &&
+		shortCutId < 10 &&
+		m_map[id].Array[shortCutId].B > 0)
+	{
+		m_map[id].Array[shortCutId].Dirty = true;
+		m_map[id].Array[shortCutId].B = 0;
+	}
+
+	if (IsDlgButtonChecked(IDC_CHECK_ENABLE_SECOND_PRESS) == BST_CHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_SHOW);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_MOUSE_2), SW_SHOW);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_KEYBOARD_2), SW_SHOW);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_STATIC_SECOND_PRESS), SW_SHOW);
+
+		CheckDlgButton(IDC_RADIO_KEYBOARD_2, BST_CHECKED);
+		CheckDlgButton(IDC_RADIO_MOUSE_2, BST_UNCHECKED);
+		m_hotKey2.SetHotKey(0, 0);
+	}
+	else if (IsDlgButtonChecked(IDC_CHECK_ENABLE_SECOND_PRESS) == BST_UNCHECKED)
+	{
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_HOTKEY2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BUTTON_ENTER2), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_MOUSE_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_SHIFT_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_CONTROL_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_CHECK_ALT_2), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_KEYBOARD_2), SW_HIDE);
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_RADIO_MOUSE_2), SW_HIDE);
+
+		::ShowWindow(::GetDlgItem(m_hWnd, IDC_STATIC_SECOND_PRESS), SW_HIDE);
+	}
+}

+ 1 - 0
QuickPasteKeyboard.h

@@ -90,4 +90,5 @@ public:
 	afx_msg void OnBnClickedRadioMouse1();
 	afx_msg void OnBnClickedRadioKeyboard2();
 	afx_msg void OnBnClickedRadioMouse2();
+	afx_msg void OnBnClickedCheckEnableSecondPress();
 };

+ 3 - 1
Resource.h

@@ -498,6 +498,8 @@
 #define IDC_BUTTON_RESET                2144
 #define IDC_RADIO1                      2145
 #define IDC_RADIO_PRIMARY_TYPES         2145
+#define IDC_CHECK_ENABLE_SECOND_PRESS   2146
+#define IDC_STATIC_SECOND_PRESS         2147
 #define ID_FIRST_OPTION                 32771
 #define ID_FIRST_EXIT                   32772
 #define ID_FIRST_SHOWQUICKPASTE         32773
@@ -664,7 +666,7 @@
 #define _APS_3D_CONTROLS                     1
 #define _APS_NEXT_RESOURCE_VALUE        318
 #define _APS_NEXT_COMMAND_VALUE         32938
-#define _APS_NEXT_CONTROL_VALUE         2146
+#define _APS_NEXT_CONTROL_VALUE         2148
 #define _APS_NEXT_SYMED_VALUE           104
 #endif
 #endif

+ 3 - 2
Theme.cpp

@@ -53,10 +53,9 @@ void CTheme::LoadDefaults()
 
 bool CTheme::Load(CString csTheme, bool bHeaderOnly, bool bCheckLastWriteTime)
 {
-	LoadDefaults();
-
 	if (csTheme.IsEmpty() || csTheme == _T("Ditto"))
 	{
+		LoadDefaults();
 		return false;
 	}
 
@@ -75,6 +74,8 @@ bool CTheme::Load(CString csTheme, bool bHeaderOnly, bool bCheckLastWriteTime)
 		}
 	}
 
+	LoadDefaults();
+
 	m_LastWriteTime = LastWrite;
 	m_lastTheme = csTheme;