VirtualBox

Changeset 22426 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Aug 24, 2009 8:23:25 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51411
Message:

FE/Qt/X11: correctly detect keyboards with missing keys

Location:
trunk/src/VBox/Frontends/VirtualBox/src/X11
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/X11/keyboard-new.c

    r21873 r22426  
    405405    unsigned i = 0, found = 0;
    406406   
     407    keyboard_type hostKB = { 0 };
     408    hostKB.lctrl    = XKeysymToKeycode(display, XK_Control_L);
     409    hostKB.capslock = XKeysymToKeycode(display, XK_Caps_Lock);
     410    hostKB.lshift   = XKeysymToKeycode(display, XK_Shift_L);
     411    hostKB.tab      = XKeysymToKeycode(display, XK_Tab);
     412    hostKB.esc      = XKeysymToKeycode(display, XK_Escape);
     413    hostKB.enter    = XKeysymToKeycode(display, XK_Return);
     414    hostKB.up       = XKeysymToKeycode(display, XK_Up);
     415    hostKB.down     = XKeysymToKeycode(display, XK_Down);
     416    hostKB.left     = XKeysymToKeycode(display, XK_Left);
     417    hostKB.right    = XKeysymToKeycode(display, XK_Right);
     418    hostKB.f1       = XKeysymToKeycode(display, XK_F1);
     419    hostKB.f2       = XKeysymToKeycode(display, XK_F2);
     420    hostKB.f3       = XKeysymToKeycode(display, XK_F3);
     421    hostKB.f4       = XKeysymToKeycode(display, XK_F4);
     422    hostKB.f5       = XKeysymToKeycode(display, XK_F5);
     423    hostKB.f6       = XKeysymToKeycode(display, XK_F6);
     424    hostKB.f7       = XKeysymToKeycode(display, XK_F7);
     425    hostKB.f8       = XKeysymToKeycode(display, XK_F8);
     426
    407427    for (; (main_keyboard_type_list[i].comment != NULL) && (0 == found); ++i)
    408         if (   (   (   (XKeysymToKeycode(display, XK_Control_L) == main_keyboard_type_list[i].lctrl)
    409                     && (XKeysymToKeycode(display, XK_Caps_Lock) == main_keyboard_type_list[i].capslock)
     428    {
     429        keyboard_type *pType = &main_keyboard_type_list[i];
     430        if (   (   (   (pType->lctrl    && (hostKB.lctrl    == pType->lctrl))
     431                    && (pType->capslock && (hostKB.capslock == pType->capslock))
    410432                   )
    411                 || (   (XKeysymToKeycode(display, XK_Caps_Lock) == main_keyboard_type_list[i].lctrl)
    412                     && (XKeysymToKeycode(display, XK_Control_L) == main_keyboard_type_list[i].capslock)
     433                || (   (pType->lctrl    && (hostKB.capslock == pType->lctrl))
     434                    && (pType->capslock && (hostKB.lctrl    == pType->capslock))
    413435                   )
    414436               ) /* Some people like to switch Capslock and left Ctrl */
    415             && (XKeysymToKeycode(display, XK_Shift_L)   == main_keyboard_type_list[i].lshift)
    416             && (XKeysymToKeycode(display, XK_Tab)       == main_keyboard_type_list[i].tab)
    417             && (XKeysymToKeycode(display, XK_Escape)    == main_keyboard_type_list[i].esc)
    418             && (XKeysymToKeycode(display, XK_Return)    == main_keyboard_type_list[i].enter)
    419             && (XKeysymToKeycode(display, XK_Up)        == main_keyboard_type_list[i].up)
    420             && (XKeysymToKeycode(display, XK_Down)      == main_keyboard_type_list[i].down)
    421             && (XKeysymToKeycode(display, XK_Left)      == main_keyboard_type_list[i].left)
    422             && (XKeysymToKeycode(display, XK_Right)     == main_keyboard_type_list[i].right)
    423             && (XKeysymToKeycode(display, XK_F1)        == main_keyboard_type_list[i].f1)
    424             && (XKeysymToKeycode(display, XK_F2)        == main_keyboard_type_list[i].f2)
    425             && (XKeysymToKeycode(display, XK_F3)        == main_keyboard_type_list[i].f3)
    426             && (XKeysymToKeycode(display, XK_F4)        == main_keyboard_type_list[i].f4)
    427             && (XKeysymToKeycode(display, XK_F5)        == main_keyboard_type_list[i].f5)
    428             && (XKeysymToKeycode(display, XK_F6)        == main_keyboard_type_list[i].f6)
    429             && (XKeysymToKeycode(display, XK_F7)        == main_keyboard_type_list[i].f7)
    430             && (XKeysymToKeycode(display, XK_F8)        == main_keyboard_type_list[i].f8)
     437            && (pType->lshift && (hostKB.lshift == pType->lshift))
     438            && (pType->tab    && (hostKB.tab    == pType->tab))
     439            && (pType->esc    && (hostKB.esc    == pType->esc))
     440            && (pType->enter  && (hostKB.enter  == pType->enter))
     441            && (pType->up     && (hostKB.up     == pType->up))
     442            && (pType->down   && (hostKB.down   == pType->down))
     443            && (pType->left   && (hostKB.left   == pType->left))
     444            && (pType->right  && (hostKB.right  == pType->right))
     445            && (pType->f1     && (hostKB.f1     == pType->f1))
     446            && (pType->f2     && (hostKB.f2     == pType->f2))
     447            && (pType->f3     && (hostKB.f3     == pType->f3))
     448            && (pType->f4     && (hostKB.f4     == pType->f4))
     449            && (pType->f5     && (hostKB.f5     == pType->f5))
     450            && (pType->f6     && (hostKB.f6     == pType->f6))
     451            && (pType->f7     && (hostKB.f7     == pType->f7))
     452            && (pType->f8     && (hostKB.f8     == pType->f8))
    431453           )
    432454            found = 1;
     455    }
    433456    if (found != 0)
    434457        memcpy(keyc2scan, main_keyboard_type_scans[i - 1], KEYC2SCAN_SIZE);
  • trunk/src/VBox/Frontends/VirtualBox/src/X11/keyboard-types.h

    r13907 r22426  
    5252 * laptop keyboards.
    5353 */
    54 static const struct {
     54typedef struct {
    5555    const char *comment;
    5656    unsigned lctrl;
     
    7272    unsigned f7;
    7373    unsigned f8;
    74 } main_keyboard_type_list[] = {
     74} keyboard_type;
     75
     76static keyboard_type main_keyboard_type_list[] = {
    7577    { "XFree86", 0x25, 0x32, 0x42, 0x17, 0x9, 0x24, 0x62, 0x68,
    7678      0x64, 0x66, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a },
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette