Hi team, Thank you for the development of X2go, I'm using Kdrive on the Windows client on a daily basis and very happy with it! I am also using the HTML client but faced limitations with the keyboard that I could fix. I made the changes directly on the compiled JS but it all happens in [x2gohtmlclient.git] / src / x2gokdrivehtmlclient.js CapsLock and AltGr modifier keys were not effective. Fix: @@ -1419,10 +1691,17 @@ X2GoKDriveHTMLClient { v32[1] |= Mod4Mask; } + if (e.getModifierState("AltGraph")) { + v32[1] |= Mod5Mask; + } + if (e.getModifierState("CapsLock")) { + v32[1] |= LockMask; + } v32[2] = this.web2pc105(e.keyCode); // console.log(v32[1], v32[2]); e.preventDefault(); e.stopPropagation(); Minor issue with parsing: @@ -1249,7 +1249,7 @@ X2GoKDriveHTMLClient case 111 : return 106; /// case 106 : - return 63; //* + return 63; // * (putting a space before * here, so that nano/gedit do not get confused with syntax highlighting) case 109 : return 82; //- FYI, since I'm using a French keyboard, I also created a new keymap, but this should probably be written differently and add a UI setting in the HTML to choose the keyboard mapping. - v32[2] = this.web2pc105(e.keyCode); + v32[2] = this.web2pc105fr(e.keyCode); @@ -1312,6 +1312,273 @@ X2GoKDriveHTMLClient return nativeCode; } + web2pc105fr(nativeCode) + { + switch (nativeCode) + { + //1st row + case 222: + return 49; // ² + case 49: + return 10; //1 + case 50: + return 11; //2 + case 51: + return 12; //3 + case 52: + return 13; //4 + case 53: + return 14; //5 + case 54: + return 15; //6 + case 55: + return 16; //7 + case 56: + return 17; //8 + case 57: + return 18; //9 + case 48: + return 19; //0 + case 169: + return 20; //° + case 61: + return 21; //+ + case 8: + return 22; //BSP + + //2 row + case 9 : + return 23; //TAB + case 65: + return 24; //a + case 90: + return 25; //z + case 69 : + return 26; //e + case 82 : + return 27; //r + case 84 : + return 28; //t + case 89: + return 29; //y + case 85: + return 30; //u + case 73: + return 31; //i + case 79: + return 32; //o + case 80: + return 33; //p + case 160: + return 34; //[ + case 164: + return 35; //] + case 13: + return 36; //ENT + + //3 row + case 20 : + return 66; //CAPS + case 81 : + return 38; //q + case 83 : + return 39; //s + case 68 : + return 40; //d + case 70 : + return 41; //f + case 71 : + return 42; //g + case 72 : + return 43; //h + case 74 : + return 44; //j + case 75 : + return 45; //k + case 76 : + return 46; //l + case 77 : + return 47; //m + case 165 : + return 48; //ù + case 170 : + return 51; // * + + //4 row + case 16 : + return 50; //Shift Left + case 60 : + return 94; //< + case 87 : + return 52; //w + case 88 : + return 53; //x + case 67 : + return 54; //c + case 86 : + return 55; //v + case 66 : + return 56; //b + case 78 : + return 57; //n + case 188 : + return 58; //, + case 59 : + return 59; //; + case 58 : + return 60; //: + case 161 : + return 61; //! + case 16 : + return 62; //Shift Right + + + //5 row + case 17 : + return 37; //LCTRL + case 91 : + return 133; //LMETA + case 18 : + return 64; //LALT + case 32 : + return 65; //SPACE + case 18 : + return 108; //RALT +// case 92 : +// return 134; //RMETA +// case 93 : +// return 135; //MENU + case 17 : + return 105; //RCTRL + + + //specials + case 27 : + return 9; //ESC + case 112 : + return 67; //F1 + case 113 : + return 68; //F2 + case 114 : + return 69; //F3 + case 115 : + return 70; //F4 + case 116 : + return 71; //F5 + case 117 : + return 72; //F6 + case 118 : + return 73; //F7 + case 119 : + return 74; //F8 + case 120 : + return 75; //F9 + case 121 : + return 76; //F10 + case 122 : + return 95; //F11 + case 123 : + return 96; //F12 + + case 44 : + return 107; //print +// case 145 : +// return 78; //scroll +// case 19 : +// return 127; //break + + case 45 : + return 118; //ins + case 36 : + return 110; //home + case 33 : + return 112; //pgup + case 46 : + return 119; //del + case 35 : + return 115; //end + case 34 : + return 117; //pgdn + + //arrows + case 38 : + return 111; + case 37 : + return 113; + case 40 : + return 116; + case 39 : + return 114; + + //numlock + case 144 : + return 77; //NLCK + case 111 : + return 106; /// + case 106 : + return 63; // * + case 109 : + return 82; //- + + case 36 : + return 79; //home + case 38 : + return 80; //up + case 33 : + return 81; //pgup + case 107 : + return 86; //+ + + case 37 : + return 83; //left + case 12 : + return 84; //clear + case 39 : + return 85; //right + + case 35 : + return 87; //end + case 40 : + return 88; //dwn + case 34 : + return 89; //pgdn + case 13 : + return 104; //enter + + case 45 : + return 90; //ins + case 46 : + return 91; //del + + case 96 : + return 90; //0 + case 97 : + return 87; //1 + case 98 : + return 88; //2 + case 99 : + return 89; //3 + case 100 : + return 83; //4 + case 101 : + return 84; //5 + case 102 : + return 85; //6 + case 103 : + return 79; //7 + case 104 : + return 80; //8 + case 105 : + return 81; //9 + + case 110 : + return 91; //. + + + } + return nativeCode; + } + Cheers! DjZU