From faff28de44bb635fe1103216996de46625ca0e99 Mon Sep 17 00:00:00 2001 From: crs Date: Sat, 12 Jul 2003 18:13:36 +0000 Subject: [PATCH] Added ignoreNumLock boolean per-screen option. When true, NumLock is ignored on that client (it has no effect on the server). This is useful for keyboards that don't have separate number pads and the user often uses the client's keyboard directly, when turning on NumLock interferes with normal typing. --- lib/client/CServerProxy.cpp | 29 +++++++++++++++++++++++++++++ lib/client/CServerProxy.h | 1 + lib/server/CConfig.cpp | 10 +++++++++- lib/synergy/OptionTypes.h | 1 + 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/client/CServerProxy.cpp b/lib/client/CServerProxy.cpp index 435cdc55..9b242e7d 100644 --- a/lib/client/CServerProxy.cpp +++ b/lib/client/CServerProxy.cpp @@ -445,6 +445,11 @@ CServerProxy::enter() m_seqNum = seqNum; } + // ignore num lock if so desired + if (m_ignoreNumLock) { + mask &= ~KeyModifierNumLock; + } + // forward getClient()->enter(x, y, seqNum, static_cast(mask), false); } @@ -520,6 +525,12 @@ CServerProxy::keyDown() mask2 != static_cast(mask)) LOG((CLOG_DEBUG1 "key down translated to id=%d, mask=0x%04x", id2, mask2)); + // ignore num lock if so desired + if (id2 == kKeyNumLock && m_ignoreNumLock) { + LOG((CLOG_DEBUG1 "ignoring num lock")); + return; + } + // forward getClient()->keyDown(id2, mask2, button); } @@ -544,6 +555,12 @@ CServerProxy::keyRepeat() mask2 != static_cast(mask)) LOG((CLOG_DEBUG1 "key repeat translated to id=%d, mask=0x%04x", id2, mask2)); + // ignore num lock if so desired + if (id2 == kKeyNumLock && m_ignoreNumLock) { + LOG((CLOG_DEBUG1 "ignoring num lock")); + return; + } + // forward getClient()->keyRepeat(id2, mask2, count, button); } @@ -567,6 +584,12 @@ CServerProxy::keyUp() mask2 != static_cast(mask)) LOG((CLOG_DEBUG1 "key up translated to id=%d, mask=0x%04x", id2, mask2)); + // ignore num lock if so desired + if (id2 == kKeyNumLock && m_ignoreNumLock) { + LOG((CLOG_DEBUG1 "ignoring num lock")); + return; + } + // forward getClient()->keyUp(id2, mask2, button); } @@ -684,6 +707,9 @@ CServerProxy::resetOptions() if (m_heartRate >= 0.0) { CProtocolUtil::writef(getOutputStream(), kMsgCNoop); } + + // don't ignore num lock + m_ignoreNumLock = false; } void @@ -726,6 +752,9 @@ CServerProxy::setOptions() CProtocolUtil::writef(getOutputStream(), kMsgCNoop); } } + else if (options[i] == kOptionIgnoreNumLock) { + m_ignoreNumLock = true; + } if (id != kKeyModifierIDNull) { m_modifierTranslationTable[id] = static_cast(options[i + 1]); diff --git a/lib/client/CServerProxy.h b/lib/client/CServerProxy.h index cbb58f1b..423cdf56 100644 --- a/lib/client/CServerProxy.h +++ b/lib/client/CServerProxy.h @@ -128,6 +128,7 @@ private: SInt32 m_xMouse, m_yMouse; bool m_ignoreMouse; + bool m_ignoreNumLock; KeyModifierID m_modifierTranslationTable[kKeyModifierIDLast]; double m_heartRate; diff --git a/lib/server/CConfig.cpp b/lib/server/CConfig.cpp index 89417b28..04a2dc72 100644 --- a/lib/server/CConfig.cpp +++ b/lib/server/CConfig.cpp @@ -646,6 +646,9 @@ CConfig::getOptionName(OptionID id) if (id == kOptionXTestXineramaUnaware) { return "xtestIsXineramaUnaware"; } + if (id == kOptionIgnoreNumLock) { + return "ignoreNumLock"; + } return NULL; } @@ -655,7 +658,8 @@ CConfig::getOptionValue(OptionID id, OptionValue value) if (id == kOptionHalfDuplexCapsLock || id == kOptionHalfDuplexNumLock || id == kOptionScreenSaverSync || - id == kOptionXTestXineramaUnaware) { + id == kOptionXTestXineramaUnaware || + id == kOptionIgnoreNumLock) { return (value != 0) ? "true" : "false"; } if (id == kOptionModifierMapForShift || @@ -891,6 +895,10 @@ CConfig::readSectionScreens(std::istream& s) addOption(screen, kOptionXTestXineramaUnaware, parseBoolean(value)); } + else if (name == "ignoreNumLock") { + addOption(screen, kOptionIgnoreNumLock, + parseBoolean(value)); + } else { // unknown argument throw XConfigRead("unknown argument"); diff --git a/lib/synergy/OptionTypes.h b/lib/synergy/OptionTypes.h index aaefe7fa..27e1f837 100644 --- a/lib/synergy/OptionTypes.h +++ b/lib/synergy/OptionTypes.h @@ -55,6 +55,7 @@ static const OptionID kOptionScreenSwitchDelay = OPTION_CODE("SSWT"); static const OptionID kOptionScreenSwitchTwoTap = OPTION_CODE("SSTT"); static const OptionID kOptionScreenSaverSync = OPTION_CODE("SSVR"); static const OptionID kOptionXTestXineramaUnaware = OPTION_CODE("XTXU"); +static const OptionID kOptionIgnoreNumLock = OPTION_CODE("IGNL"); //@} #undef OPTION_CODE