// xkeymacsdll.cpp : Defines the initialization routines for the DLL.\r
//\r
\r
-#include "stdafx.h"\r
-#include "resource.h"\r
+#include "xkeymacsdll.h"\r
#include "Utils.h"\r
#include "Commands.h"\r
-#include <afxdllx.h>\r
+#include "../xkeymacs/resource.h"\r
#include <math.h>\r
#include <Imm.h>\r
#include <vector>\r
// CXkeymacsDll Class\r
//////////////////////////////////////////////////////////////////////\r
\r
-#include "xkeymacsdll.h"\r
-\r
#pragma data_seg(".xkmcs")\r
-CONFIG CXkeymacsDll::m_Config = {0};\r
+Config CXkeymacsDll::m_Config = {0};\r
bool CXkeymacsDll::m_bEnableKeyboardHook = false;\r
BOOL CXkeymacsDll::m_bHook = TRUE;\r
DWORD CXkeymacsDll::m_nHookAltRelease = 0;\r
int CXkeymacsDll::m_nAppID = 0;\r
CList<CClipboardSnap *, CClipboardSnap *> CXkeymacsDll::m_oKillRing;\r
int CXkeymacsDll::m_nKillRing = 0;\r
-BOOL CXkeymacsDll::m_bRecordingMacro = FALSE;\r
-BOOL CXkeymacsDll::m_bDown[MAX_KEY] = {0};\r
-std::list<KbdMacro> CXkeymacsDll::m_Macro;\r
+KbdMacro* CXkeymacsDll::m_kbdMacro = NULL;\r
\r
BOOL CXkeymacsDll::SaveConfig()\r
{\r
return res;\r
}\r
\r
-void CXkeymacsDll::SetConfig(const CONFIG& config)\r
+void CXkeymacsDll::SetConfig(const Config& config)\r
{\r
m_Config = config;\r
}\r
\r
void CXkeymacsDll::ShowKeyboardHookState()\r
{\r
- ICONMSG msg = {MAIN_ICON,};\r
+ IconMsg msg = {MAIN_ICON,};\r
if (m_bHook) {\r
if (CCommands::IsTemporarilyDisableXKeymacs()) {\r
msg.nState = STATUS_DISABLE_TMP;\r
// Use Dialog Setting\r
m_nAppID = GetAppID(_T("Dialog"), m_nAppID);\r
\r
- ICONMSG msg[3] = {\r
+ IconMsg msg[3] = {\r
{CX_ICON, OFF_ICON, ""},\r
{MX_ICON, OFF_ICON, ""},\r
{META_ICON, OFF_ICON, ""}\r
\r
DO_NOTHING:\r
SetModifierIcons();\r
- if (m_bRecordingMacro && (!bRelease || m_bDown[wParam])) {\r
- KbdMacro m = { nCode, wParam, lParam, TRUE };\r
- m_Macro.push_back(m);\r
- m_bDown[wParam] |= !bRelease;\r
- }\r
+ if (m_kbdMacro)\r
+ m_kbdMacro->Record(nKey, bRelease);\r
return CallNextHookEx(NULL, nCode, wParam, lParam);\r
\r
RECURSIVE:\r
\r
void CXkeymacsDll::SetModifierIcons()\r
{\r
- ICONMSG msg[6] = {\r
+ IconMsg msg[6] = {\r
{MX_ICON, CCommands::bM_x(), ""},\r
{CX_ICON, CCommands::bC_x(), ""},\r
{META_ICON, CCommands::bM_(), ""},\r
_stprintf_s(m_M_xTip, "M-x %s", szPath);\r
}\r
\r
-BOOL CXkeymacsDll::SendIconMessage(ICONMSG *pMsg, DWORD num)\r
+BOOL CXkeymacsDll::SendIconMessage(IconMsg *pMsg, DWORD num)\r
{\r
DWORD ack, read;\r
- return CallNamedPipe(ICON_PIPE, pMsg, sizeof(ICONMSG) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT) && read == sizeof(DWORD);\r
+ return CallNamedPipe(ICON_PIPE, pMsg, sizeof(IconMsg) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT) && read == sizeof(DWORD);\r
}\r
\r
void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)\r
return m_Config.b106Keyboard;\r
}\r
\r
-void CXkeymacsDll::StartRecordMacro()\r
-{\r
- if (CCommands::bC_u())\r
- CallMacro();\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
+void CXkeymacsDll::SetKbMacro(KbdMacro* kbdMacro)\r
{\r
- m_bRecordingMacro = FALSE;\r
- while (!m_Macro.empty()) { // remove not released push\r
- const KbdMacro& m = m_Macro.back();\r
- if (HIWORD(m.lParam) & KF_UP)\r
- break;\r
- m_Macro.pop_back();\r
- }\r
-}\r
-\r
-void CXkeymacsDll::CallMacro()\r
-{\r
- if (m_bRecordingMacro)\r
- m_bRecordingMacro = FALSE;\r
- UINT before = GetModifierState(FALSE);\r
- SetModifierState(0, before);\r
- for (std::list<KbdMacro>::const_iterator m = m_Macro.begin(); m != m_Macro.end(); ++m)\r
- if (HIWORD(m->lParam) & KF_UP)\r
- ReleaseKey(static_cast<BYTE>(m->wParam));\r
- else\r
- DepressKey(static_cast<BYTE>(m->wParam), m->bOriginal);\r
- SetModifierState(before, 0);\r
+ m_kbdMacro = kbdMacro;\r
}\r
\r
// call an original command which is defined in dot.xkeymacs\r