#pragma data_seg()\r
BOOL CXkeymacsDll::m_bRecordingMacro = FALSE;\r
BOOL CXkeymacsDll::m_bDown[MAX_KEY] = {0};\r
-CList<KbdMacro, KbdMacro&> CXkeymacsDll::m_Macro;\r
+std::list<KbdMacro> CXkeymacsDll::m_Macro;\r
\r
//////////////////////////////////////////////////////////////////////\r
// Construction/Destruction\r
\r
DO_NOTHING:\r
SetModifierIcons();\r
- if (m_bRecordingMacro) {\r
- if (!(lParam & BEING_RELEASED) || m_bDown[wParam]) {\r
- try {\r
- KbdMacro m;\r
- m.nCode = nCode;\r
- m.wParam = wParam;\r
- m.lParam = lParam;\r
- m.bOriginal = TRUE;\r
- m_Macro.AddTail(m);\r
- } catch (CMemoryException* e) {\r
- e->Delete();\r
-// CUtils::Log("KeyboardProc: 'new' threw an exception");\r
- }\r
- if (!(lParam & BEING_RELEASED))\r
- m_bDown[wParam] = TRUE;\r
- }\r
+ if (m_bRecordingMacro && (!(lParam & BEING_RELEASED) || m_bDown[wParam])) {\r
+ KbdMacro m = { nCode, wParam, lParam, TRUE };\r
+ m_Macro.push_back(m);\r
+ m_bDown[wParam] |= !(lParam & BEING_RELEASED);\r
}\r
-\r
return CallNextHookEx(g_hHookKeyboard, nCode, wParam, lParam);\r
\r
RECURSIVE:\r
\r
void CXkeymacsDll::StartRecordMacro()\r
{\r
- m_bRecordingMacro = TRUE;\r
if (CCommands::bC_u())\r
CallMacro();\r
- m_Macro.RemoveAll();\r
+ m_bRecordingMacro = TRUE;\r
+ m_Macro.erase(m_Macro.begin(), m_Macro.end());\r
ZeroMemory(m_bDown, MAX_KEY);\r
}\r
\r
void CXkeymacsDll::EndRecordMacro()\r
{\r
m_bRecordingMacro = FALSE;\r
- while (!m_Macro.IsEmpty()) { // remove not released push\r
- KbdMacro& m = m_Macro.GetTail();\r
+ while (!m_Macro.empty()) { // remove not released push\r
+ const KbdMacro& m = m_Macro.back();\r
if (m.lParam & BEING_RELEASED)\r
break;\r
- m_Macro.RemoveTail();\r
+ m_Macro.pop_back();\r
}\r
}\r
\r
m_bRecordingMacro = FALSE;\r
UINT before = GetModifierState(FALSE);\r
SetModifierState(0, before);\r
- for (POSITION pos = m_Macro.GetHeadPosition(); pos; ) {\r
- KbdMacro& m = m_Macro.GetNext(pos);\r
- if (m.lParam & BEING_RELEASED)\r
- ReleaseKey((BYTE)m.wParam);\r
+ for (auto m = m_Macro.begin(); m != m_Macro.end(); m++)\r
+ if (m->lParam & BEING_RELEASED)\r
+ ReleaseKey(static_cast<BYTE>(m->wParam));\r
else\r
- DepressKey((BYTE)m.wParam, m.bOriginal);\r
- }\r
+ DepressKey(static_cast<BYTE>(m->wParam), m->bOriginal);\r
SetModifierState(before, 0);\r
}\r
\r
-/*\r
-void CXkeymacsDll::CallMacro() // for debug\r
-{\r
- CString sz;\r
- for (POSITION pos = m_Macro.GetHeadPosition(); pos; ) {\r
- KbdMacro m = m_Macro.GetNext(pos);\r
- if (m.lParam & BEING_RELEASED) {\r
- CString t;\r
- t.Format(_T("0x%xu "), m.wParam);\r
- sz += t;\r
- } else {\r
- CString t;\r
- t.Format(_T("0x%xd "), m.wParam);\r
- sz += t;\r
- }\r
- }\r
-// CUtils::Log(sz);\r
-}\r
-*/\r
-\r
void CXkeymacsDll::Set106Keyboard(BOOL b106Keyboard)\r
{\r
m_Config.b106Keyboard = b106Keyboard;\r
#pragma once\r
#endif // _MSC_VER > 1000\r
\r
+#include <list>\r
#include "ClipboardSnap.h"\r
\r
enum { MAX_APP = 64 };\r
static BOOL IsDepressedShiftKeyOnly(BYTE nKey);\r
static BOOL IsDepressedModifier(int Modifier(), BOOL bPhysicalKey = TRUE);\r
static BOOL IsValidKey(BYTE bVk);\r
- static CList<KbdMacro, KbdMacro&> m_Macro;\r
+ static std::list<KbdMacro> m_Macro;\r
static BOOL m_bRecordingMacro;\r
static BOOL m_bDown[MAX_KEY];\r
static void SetOriginal(UINT nCommandType, BYTE bVk);\r