Hi Jan,
I've managed to get all german keys working with following two modifications:
1.) changes in xrdp/lang.c
Goto section /* german 0x407 */ starting at line 453
scroll down to "int de_noshift [] = " and replace "0" at row=11 col=7 with '<'
same at "int de_shift[] =" but replace with char '>'
same at "int de_altgr[] =" but replace with char '|'
2.) changes in vnc/vnc.c
after above changes I've had still problems with some Alt-Gr-Chars
(e.g. "at"-sign, which lays on Alt-Gr+Q on german keyboard)
After some analyses with "xev" I've come to the conclusion, that we have to
neutralize a control flag, which is send by the ALT-GR-Key, and that is still
active while pressing the next key. So I've changed vnc.c like this:
Goto line 506 (function lib_mod_event):
replace:
case 0x0038: /* left-right alt */
if (param2 & 0x0100) /* right alt */
{
/* only en-us keymap can send right alt(alt-gr) */
if (v->keylayout == 0x409) /* todo */
{
key = 0xffea; /* XK_Alt_R */
}
}
with:
case 0x0038: /* left-right alt */
if (param2 & 0x0100) /* right alt */
{
switch (v->keylayout)
{
case 0x409:
/* only en-us keymap can send right alt(alt-gr) */
key = 0xffea; /* XK_Alt_R */
break;
case 0x407:
/* for german keymap we have to neutralize last XK_Control_L */
if (msg == 15)
{
key = 0xffe3;
msg = 16;
}
break;
}
}
All above is valid for the current versions in cvs (state 2009-02-15).
I've "build a patch against archive" with cervisia and copy the relevant
portions ... hope this helps.
greetings
Andreas
Index: vnc/vnc.c
===================================================================
RCS file: /cvsroot/xrdp/xrdp/vnc/vnc.c,v
retrieving revision 1.39
diff -b -U3 -r1.39 vnc.c
--- vnc/vnc.c 24 Jan 2009 07:04:24 -0000 1.39
+++ vnc/vnc.c 15 Feb 2009 20:12:16 -0000
@@ -499,10 +503,20 @@
case 0x0038: /* left-right alt */
if (param2 & 0x0100) /* right alt */
{
- /* only en-us keymap can send right alt(alt-gr) */
- if (v->keylayout == 0x409) /* todo */
+ switch (v->keylayout)
{
+ case 0x409:
+ /* only en-us keymap can send right alt(alt-gr) */
key = 0xffea; /* XK_Alt_R */
+ break;
+ case 0x407:
+ /* for german keymap we have to neutralize last XK_Control_L */
+ if (msg == 15)
+ {
+ key = 0xffe3;
+ msg = 16;
+ }
+ break;
}
}
else /* left alt */
Index: xrdp/lang.c
===================================================================
RCS file: /cvsroot/xrdp/xrdp/xrdp/lang.c,v
retrieving revision 1.28
diff -b -U3 -r1.28 lang.c
--- xrdp/lang.c 25 Jan 2009 02:05:17 -0000 1.28
+++ xrdp/lang.c 15 Feb 2009 20:12:18 -0000
@@ -465,7 +465,7 @@
0, ' ', 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, '7',
'8', '9', '-', '4', '5', '6', '+', '1',
- '2', '3', '0', '.', 0, 0, 0, 0,
+ '2', '3', '0', '.', 0, 0, '<', 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -486,7 +486,7 @@
0, ' ', 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, '7',
'8', '9', '-', '4', '5', '6', '+', '1',
- '2', '3', '0', '.', 0, 0, 0, 0,
+ '2', '3', '0', '.', 0, 0, '>', 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -507,7 +507,7 @@
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, '|', 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
xrdp-devel mailing list
xrdp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xrdp-devel