소스 검색

Add keyboard debug log to servers

Makes it easier to troubleshoot keyboard issues by printing exactly
what key events the server is getting from the client.
tags/v1.5.90
Pierre Ossman 8 년 전
부모
커밋
9a153b0a7a
1개의 변경된 파일21개의 추가작업 그리고 4개의 파일을 삭제
  1. 21
    4
      common/rfb/VNCSConnectionST.cxx

+ 21
- 4
common/rfb/VNCSConnectionST.cxx 파일 보기

@@ -100,8 +100,10 @@ VNCSConnectionST::~VNCSConnectionST()

// Release any keys the client still had pressed
std::set<rdr::U32>::iterator i;
for (i=pressedKeys.begin(); i!=pressedKeys.end(); i++)
for (i=pressedKeys.begin(); i!=pressedKeys.end(); i++) {
vlog.debug("Releasing key 0x%x on client disconnect", *i);
server->desktop->keyEvent(*i, false);
}
if (server->pointerClient == this)
server->pointerClient = 0;

@@ -499,9 +501,13 @@ public:
VNCSConnectionSTShiftPresser(SDesktop* desktop_)
: desktop(desktop_), pressed(false) {}
~VNCSConnectionSTShiftPresser() {
if (pressed) { desktop->keyEvent(XK_Shift_L, false); }
if (pressed) {
vlog.debug("Releasing fake Shift_L");
desktop->keyEvent(XK_Shift_L, false);
}
}
void press() {
vlog.debug("Pressing fake Shift_L");
desktop->keyEvent(XK_Shift_L, true);
pressed = true;
}
@@ -517,9 +523,20 @@ void VNCSConnectionST::keyEvent(rdr::U32 key, bool down) {
if (!(accessRights & AccessKeyEvents)) return;
if (!rfb::Server::acceptKeyEvents) return;

if (down)
vlog.debug("Key pressed: 0x%x", key);
else
vlog.debug("Key released: 0x%x", key);

// Remap the key if required
if (server->keyRemapper)
key = server->keyRemapper->remapKey(key);
if (server->keyRemapper) {
rdr::U32 newkey;
newkey = server->keyRemapper->remapKey(key);
if (newkey != key) {
vlog.debug("Key remapped to 0x%x", newkey);
key = newkey;
}
}

// Turn ISO_Left_Tab into shifted Tab.
VNCSConnectionSTShiftPresser shiftPresser(server->desktop);

Loading…
취소
저장