Merge pull request #127 from ArvidNorr/numlock

Numlock out of sync fix
master
jsorg71 11 years ago
commit eaa801f134

@ -27,7 +27,7 @@
#ifdef XRDP_DEBUG #ifdef XRDP_DEBUG
#define LOG_LEVEL 99 #define LOG_LEVEL 99
#else #else
#define LOG_LEVEL 10 #define LOG_LEVEL 0
#endif #endif
#define LLOG(_level, _args) \ #define LLOG(_level, _args) \
@ -195,14 +195,31 @@ lxrdp_event(struct mod *mod, int msg, long param1, long param2,
switch (msg) switch (msg)
{ {
case 15: /* key down */ case 15: /* key down */
// Before we handle the first character we synchronize
// capslock and numlock.
// We collect the state during the first synchronize ( see msg 17)
if(!mod->bool_keyBoardSynced)
{
LLOGLN(0, ("Additional Sync event handled : %d",mod->keyBoardLockInfo));
mod->inst->input->SynchronizeEvent(mod->inst->input, mod->keyBoardLockInfo);
mod->bool_keyBoardSynced = 1;
}
mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3); mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
break; break;
case 16: /* key up */ case 16: /* key up */
mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3); mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
break; break;
case 17: /*Synchronize*/ case 17: /*Synchronize*/
LLOGLN(11, ("Synchronized event handled")); LLOGLN(11, ("Synchronized event handled : %d",param1));
mod->inst->input->SynchronizeEvent(mod->inst->input, 0); // In some situations the Synchronize event come to early.
// Therefore we store this information and use it when we
// receive the first keyboard event
// Without this fix numlock and capslock can come out of sync.
mod->inst->input->SynchronizeEvent(mod->inst->input, param1);
if(!mod->bool_keyBoardSynced)
{
mod->keyBoardLockInfo = param1 ;
}
break; break;
case 100: /* mouse move */ case 100: /* mouse move */
LLOGLN(12, ("mouse move %d %d", param1, param2)); LLOGLN(12, ("mouse move %d %d", param1, param2));

@ -172,6 +172,8 @@ struct mod
int vrev; int vrev;
char username[256]; char username[256];
char password[256]; char password[256];
int bool_keyBoardSynced ; /*Numlock can be out of sync, we hold state here to resolve */
int keyBoardLockInfo ; /* Holds initial numlock capslock state */
struct xrdp_client_info client_info; struct xrdp_client_info client_info;

Loading…
Cancel
Save