When invoking the native Windows C++ TightVNC viewer, you cannot set the cursor tracking behavior using -mousecursor on the command line or in an options file due to a bug in the parser. Instead, any value used for -mouselocal gets interpreted for -mousecursor. The issue is due to using the wrong constant.
To fix, in tvnviewer/ViewerCmdLine.cpp, in the method ViewerCmdLine::parseMouseCursor(), on lines 301, 304, and 308, change each instance of MOUSE_LOCAL to MOUSE_CURSOR, giving the following corrected method:
void ViewerCmdLine::parseMouseCursor()
{
if (isPresent(MOUSE_CURSOR)) {
m_conConf->requestShapeUpdates(false);
m_conConf->ignoreShapeUpdates(false);
if (m_options[MOUSE_CURSOR] == NO) {
m_conConf->requestShapeUpdates(true);
m_conConf->ignoreShapeUpdates(true);
} else {
if (m_options[MOUSE_CURSOR] == LOCAL) {
m_conConf->requestShapeUpdates(true);
}
}
}
}