VirtualBox

Opened 9 years ago

#14023 new defect

Modifier keys from the virtual keyboard don't get passed through

Reported by: michael fox Owned by:
Component: guest control Version: VirtualBox 4.3.26
Keywords: Cc:
Guest type: Linux Host type: Mac OS X

Description

I'm using autopy to generate low-level Quartz keyboard events on my host machine. Most keys get passed through just fine. But for some reason the modifier keys do not. That's command, shift, Option and Control.

https://github.com/msanders/autopy/

The relevant code looks very straightforward:

void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags) { #if defined(IS_MACOSX)

CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL,

(CGKeyCode)code, down);

assert(keyEvent != NULL);

CGEventSetType(keyEvent, down ? kCGEventKeyDown : kCGEventKeyUp); CGEventSetFlags(keyEvent, flags); CGEventPost(kCGSessionEventTap, keyEvent); CFRelease(keyEvent);

#elif defined(IS_WINDOWS)

const DWORD dwFlags = down ? 0 : KEYEVENTF_KEYUP;

/* Parse modifier keys. */ if (flags & MOD_META) WIN32_KEY_EVENT_WAIT(K_META, dwFlags); if (flags & MOD_ALT) WIN32_KEY_EVENT_WAIT(K_ALT, dwFlags); if (flags & MOD_CONTROL) WIN32_KEY_EVENT_WAIT(K_CONTROL, dwFlags); if (flags & MOD_SHIFT) WIN32_KEY_EVENT_WAIT(K_SHIFT, dwFlags);

WIN32_KEY_EVENT(code, dwFlags);

#elif defined(USE_X11)

Display *display = XGetMainDisplay(); const Bool is_press = down ? True : False; /* Just to be safe. */

/* Parse modifier keys. */ if (flags & MOD_META) X_KEY_EVENT_WAIT(display, K_META, is_press); if (flags & MOD_ALT) X_KEY_EVENT_WAIT(display, K_ALT, is_press); if (flags & MOD_CONTROL) X_KEY_EVENT_WAIT(display, K_CONTROL, is_press); if (flags & MOD_SHIFT) X_KEY_EVENT_WAIT(display, K_SHIFT, is_press);

X_KEY_EVENT(display, code, is_press);

#endif }

Change History (0)

Note: See TracTickets for help on using tickets.

© 2023 Oracle
ContactPrivacy policyTerms of Use