diff -urN ooo_SRC680_m179_src.orig/vcl/aqua/source/window/salframe.cxx ooo_SRC680_m179_src/vcl/aqua/source/window/salframe.cxx --- ooo_SRC680_m179_src.orig/vcl/aqua/source/window/salframe.cxx 2006-07-30 15:55:25.000000000 +0200 +++ ooo_SRC680_m179_src/vcl/aqua/source/window/salframe.cxx 2006-07-31 21:43:33.000000000 +0200 @@ -56,6 +56,9 @@ #ifndef _SV_SALINST_H #include #endif +#ifndef _SV_SALWTYPE_HXX +#include +#endif #include @@ -1168,12 +1171,153 @@ fprintf (stderr, "\n"); } +// Table for translation of system key code to sal keycodes +#define KEY_TAB_SIZE 131 + +static USHORT aImplTranslateKeyTab[KEY_TAB_SIZE] = +{ + // sal key code constant + KEY_A, /* 0 */ + KEY_S, + KEY_D, + KEY_F, + KEY_H, + KEY_G, + KEY_Z, + KEY_X, + KEY_C, + KEY_V, + 0, /* 10 */ + KEY_B, + KEY_Q, + KEY_W, + KEY_E, + KEY_R, + KEY_Y, + KEY_T, + KEY_1, + KEY_2, + KEY_3, /* 20 */ + KEY_4, + KEY_6, + KEY_5, + 0, + KEY_9, + KEY_7, + 0, + KEY_8, + KEY_0, + 0, /* 30 */ + KEY_O, + KEY_U, + 0, + KEY_I, + KEY_P, + KEY_RETURN, + KEY_L, + KEY_J, + 0, + KEY_K, /* 40 */ + 0, + 0, + 0, + 0, + KEY_N, + KEY_M, + 0, + KEY_TAB, + KEY_SPACE, + 0, /* 50 */ + KEY_BACKSPACE, + 0, + KEY_ESCAPE, + 0, + 0, + 0, + 0, + 0, + 0, + 0, /* 60 */ + 0, + 0, + 0, + 0, + KEY_DECIMAL, /* ? Dot in numpad */ + 0, + 0, + 0, + 0, + 0, /* 70 */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, /* 80 */ + 0, + KEY_0, + KEY_1, + KEY_2, + KEY_3, + KEY_4, + KEY_5, + KEY_6, + KEY_7, + 0, /* 90 */ + KEY_8, + KEY_9, + 0, + 0, + 0, + KEY_F5, + KEY_F6, + KEY_F7, + KEY_F3, + KEY_F8, /* 100 */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, /* 110 */ + 0, + 0, + 0, + KEY_INSERT, + KEY_HOME, + KEY_PAGEUP, + KEY_DELETE, + KEY_F3, + KEY_END, + KEY_F2, /* 120 */ + KEY_PAGEDOWN, + KEY_F1, + KEY_LEFT, + KEY_RIGHT, + KEY_DOWN, /* 125 */ + KEY_UP, /* 126 */ + 0, + 0, + 0, + 0 /* 130 */ +}; + OSStatus HandleKeyboardEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void * inUserData) { UInt32 keyModifiers; ImplSalYieldMutexAcquire(); + AquaSalFrame* pSalFrame = reinterpret_cast(inUserData); + fprintf(stderr, "PJ: HandleKeyboardEvent\n"); UInt32 eventKind = GetEventKind(inEvent); @@ -1207,6 +1351,19 @@ GetEventParameter (inEvent, kEventParamKeyboardType, typeUInt32, NULL, sizeof(keyboardType), NULL, &keyboardType); fprintf(stderr, "PJ: ...... keyboardType = %d (%x)\n", keyboardType, keyboardType); + SalKeyEvent aKeyEvt; + + // FIXME: proper mapping of *all* keys? Where, how? Study Windows code first. + aKeyEvt.mnCode = aImplTranslateKeyTab[keyCode]; + + aKeyEvt.mnTime = static_cast(GetEventTime(inEvent) * 1000); + + // Is this correct? Why not SALEVENT_KEYDOWN? + if (eventKind == kEventRawKeyDown) + pSalFrame->CallCallback( SALEVENT_KEYINPUT, &aKeyEvt ); + if (eventKind == kEventRawKeyUp) + pSalFrame->CallCallback( SALEVENT_KEYUP, &aKeyEvt ); + break; case kEventRawKeyModifiersChanged: