Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
b1d3f2ca
Unverified
Commit
b1d3f2ca
authored
Nov 08, 2016
by
Mihai Moldovan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/keyboard_fixes' into arctica-3.6.x
Attributes GH PR #243:
https://github.com/ArcticaProject/nx-libs/pull/243
parents
7b79e8d8
2f2ade61
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
113 deletions
+83
-113
Keyboard.c
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+77
-69
Reconnect.c
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+4
-12
ddxLoad.c
nx-X11/programs/Xserver/xkb/ddxLoad.c
+2
-32
No files found.
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
View file @
b1d3f2ca
...
...
@@ -173,8 +173,6 @@ extern Status XkbGetControls(
#define XKB_DFLT_KB_OPTIONS NULL
#endif
#define NXAGENT_KEYMAP_DIR_FILE "keymap.dir"
extern
int
XkbDfltRepeatDelay
;
extern
int
XkbDfltRepeatInterval
;
...
...
@@ -479,6 +477,11 @@ CARD8 nxagentConvertKeycode(CARD8 k)
{
if
(
nxagentKeycodeConversion
!=
0
)
{
#ifdef DEBUG
if
(
k
!=
nxagentConvertedKeycodes
[
k
])
fprintf
(
stderr
,
"nxagentConvertKeycode: converting keycode [%d] to [%d]
\n
"
,
k
,
nxagentConvertedKeycodes
[
k
]);
#endif
return
nxagentConvertedKeycodes
[
k
];
}
else
...
...
@@ -503,10 +506,10 @@ static void nxagentCheckXkbBaseDirectory(void)
#ifdef TEST
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"Before calling _NXGetXkbBasePath
.
\n
"
);
"Before calling _NXGetXkbBasePath
:
\n
"
);
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"XkbBaseDirectory varible [%s].
\n
"
,
"XkbBaseDirectory vari
a
ble [%s].
\n
"
,
XkbBaseDirectory
);
#endif
...
...
@@ -514,10 +517,10 @@ static void nxagentCheckXkbBaseDirectory(void)
#ifdef TEST
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"After calling _NXGetXkbBasePath
.
\n
"
);
"After calling _NXGetXkbBasePath
:
\n
"
);
fprintf
(
stderr
,
"nxagentCheckXkbBaseDirectory: "
"XkbBaseDirectory varible [%s].
\n
"
,
"XkbBaseDirectory vari
a
ble [%s].
\n
"
,
XkbBaseDirectory
);
#endif
...
...
@@ -539,7 +542,7 @@ static char *nxagentXkbGetRules()
sizeDflt
=
strlen
(
XKB_DFLT_RULES_FILE
);
sizeAlt
=
strlen
(
XKB_ALTS_RULES_FILE
);
size
=
strlen
(
XkbBaseDirectory
)
+
strlen
(
"/rules/"
);
size
+=
(
sizeDflt
>
sizeAlt
)
?
sizeDflt
:
sizeAlt
;
size
+=
(
sizeDflt
>
sizeAlt
)
?
sizeDflt
:
sizeAlt
;
if
((
path
=
malloc
((
size
+
1
)
*
sizeof
(
char
)))
==
NULL
)
{
...
...
@@ -694,10 +697,6 @@ int nxagentKeyboardProc(DeviceIntPtr pDev, int onoff)
int
free_model
=
0
,
free_layout
=
0
;
XkbDescPtr
xkb
=
NULL
;
#ifdef TEST
int
ret
;
#endif
switch
(
onoff
)
{
case
DEVICE_INIT
:
...
...
@@ -854,13 +853,15 @@ XkbError:
(
char
*
)
values
.
auto_repeats
,
sizeof
(
values
.
auto_repeats
));
#ifdef TEST
ret
=
{
int
ret
=
#endif
InitKeyboardDeviceStruct
((
DevicePtr
)
pDev
,
&
keySyms
,
modmap
,
InitKeyboardDeviceStruct
((
DevicePtr
)
pDev
,
&
keySyms
,
modmap
,
nxagentBell
,
nxagentChangeKeyboardControl
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: InitKeyboardDeviceStruct returns [%d].
\n
"
,
ret
);
fprintf
(
stderr
,
"nxagentKeyboardProc: InitKeyboardDeviceStruct returns [%d].
\n
"
,
ret
);
}
#endif
#ifdef XKB
...
...
@@ -868,8 +869,6 @@ XkbError:
FILE
*
file
;
XkbConfigRtrnRec
config
;
int
nxagentXkbConfigFilePathSize
;
char
*
nxagentXkbConfigFilePath
;
XkbComponentNamesRec
names
;
...
...
@@ -879,32 +878,30 @@ XkbError:
fprintf
(
stderr
,
"nxagentKeyboardProc: Using XKB extension.
\n
"
);
#endif
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: nxagentKeyboard is [%s].
\n
"
,
nxagentKeyboard
?
nxagentKeyboard
:
"NULL"
);
#endif
memset
(
&
names
,
0
,
sizeof
(
XkbComponentNamesRec
));
rules
=
nxagentXkbGetRules
();
if
((
nxagentKeyboard
!=
NULL
)
&&
(
strcmp
(
nxagentKeyboard
,
"query"
)
!=
0
))
if
((
nxagentKeyboard
!=
NULL
)
&&
(
strcmp
(
nxagentKeyboard
,
"query"
)
!=
0
))
{
for
(
i
=
0
;
nxagentKeyboard
[
i
]
!=
'/'
&&
nxagentKeyboard
[
i
]
!=
0
;
i
++
);
if
(
nxagentKeyboard
[
i
]
==
0
||
nxagentKeyboard
[
i
+
1
]
==
0
||
i
==
0
)
{
ErrorF
(
"Warning: Wrong keyboard type: %s.
\n
"
,
nxagentKeyboard
);
ErrorF
(
"Warning: Wrong keyboard type: %s.
\n
"
,
nxagentKeyboard
);
goto
XkbError
;
}
free_model
=
1
;
model
=
malloc
(
i
+
1
);
strncpy
(
model
,
nxagentKeyboard
,
i
);
model
[
i
]
=
'\0'
;
model
=
strndup
(
nxagentKeyboard
,
i
);
free_layout
=
1
;
layout
=
malloc
(
strlen
(
&
nxagentKeyboard
[
i
+
1
])
+
1
);
strcpy
(
layout
,
&
nxagentKeyboard
[
i
+
1
]);
layout
=
strdup
(
&
nxagentKeyboard
[
i
+
1
]);
/*
* There is no description for pc105 on Solaris.
...
...
@@ -946,7 +943,7 @@ XkbError:
options
=
XKB_DFLT_KB_OPTIONS
;
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: XkbInitialMap [%s]
\n
"
,
XkbInitialMap
?
XkbInitialMap
:
"NULL"
);
fprintf
(
stderr
,
"nxagentKeyboardProc: XkbInitialMap [%s]
\n
"
,
XkbInitialMap
?
XkbInitialMap
:
"NULL"
);
#endif
if
(
XkbInitialMap
)
{
...
...
@@ -990,6 +987,11 @@ XkbError:
}
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device.
\n
"
);
#endif
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
"[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].
\n
"
,
rules
,
model
,
layout
,
variants
,
options
);
#endif
XkbSetRulesDflts
(
rules
,
model
,
layout
,
variants
,
options
);
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
...
...
@@ -1007,22 +1009,15 @@ XkbError:
XkbGetControls
(
nxagentDisplay
,
XkbAllControlsMask
,
xkb
);
if
(
nxagentX2go
)
nxagentXkbConfigFilePathSize
=
strlen
(
XKB_CONFIG_FILE_X2GO
);
nxagentXkbConfigFilePath
=
strdup
(
XKB_CONFIG_FILE_X2GO
);
else
nxagentXkbConfigFilePathSize
=
strlen
(
XKB_CONFIG_FILE_NX
);
nxagentXkbConfigFilePath
=
strdup
(
XKB_CONFIG_FILE_NX
);
nxagentXkbConfigFilePath
=
malloc
((
nxagentXkbConfigFilePathSize
+
1
)
*
sizeof
(
char
));
if
(
nxagentXkbConfigFilePath
==
NULL
)
if
(
nxagentXkbConfigFilePath
==
NULL
)
{
FatalError
(
"nxagentKeyboardProc: malloc failed."
);
}
if
(
nxagentX2go
)
nxagentXkbConfigFilePathSize
=
strlen
(
XKB_CONFIG_FILE_X2GO
);
else
nxagentXkbConfigFilePathSize
=
strlen
(
XKB_CONFIG_FILE_NX
);
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: nxagentXkbConfigFilePath [%s].
\n
"
,
nxagentXkbConfigFilePath
);
...
...
@@ -1074,12 +1069,13 @@ XkbError:
else
{
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: No config file.
\n
"
);
#endif
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: No config file, going to set rules and init device.
\n
"
);
#endif
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
"[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].
\n
"
,
rules
,
model
,
layout
,
variants
,
options
);
#endif
XkbSetRulesDflts
(
rules
,
model
,
layout
,
variants
,
options
);
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
...
...
@@ -1099,6 +1095,11 @@ XkbError:
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device.
\n
"
);
#endif
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device: "
"[rules='%s',model='%s',layout='%s',variants='%s',options='%s'].
\n
"
,
rules
,
model
,
layout
,
variants
,
options
);
#endif
XkbSetRulesDflts
(
rules
,
model
,
layout
,
variants
,
options
);
XkbInitKeyboardDeviceStruct
((
void
*
)
pDev
,
&
names
,
&
keySyms
,
modmap
,
...
...
@@ -1404,8 +1405,8 @@ void nxagentCheckRemoteKeycodes()
nxagentNumLockKeycode
=
XKeysymToKeycode
(
nxagentDisplay
,
XK_Num_Lock
);
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentCheckRemoteKeycodes: Remote
CapsLock keycode
"
"is
[%d] NumLock [%d].
\n
"
,
nxagentCapsLockKeycode
,
fprintf
(
stderr
,
"nxagentCheckRemoteKeycodes: Remote
keycodes: CapsLock
"
"
[%d] NumLock [%d].
\n
"
,
nxagentCapsLockKeycode
,
nxagentNumLockKeycode
);
#endif
}
...
...
@@ -1791,11 +1792,11 @@ static int nxagentXkbGetNames(char **rules, char **model, char **layout,
void
nxagentKeycodeConversionSetup
(
void
)
{
char
*
drules
=
0
;
char
*
dmodel
=
0
;
char
*
dlayout
=
0
;
char
*
dvariant
=
0
;
char
*
doptions
=
0
;
char
*
drules
=
NULL
;
char
*
dmodel
=
NULL
;
char
*
dlayout
=
NULL
;
char
*
dvariant
=
NULL
;
char
*
doptions
=
NULL
;
unsigned
int
drulesLen
;
nxagentKeycodeConversion
=
0
;
...
...
@@ -1807,8 +1808,8 @@ void nxagentKeycodeConversionSetup(void)
if
(
drulesLen
!=
0
&&
drules
!=
NULL
&&
dmodel
!=
NULL
)
{
fprintf
(
stderr
,
"nxagentKeycodeConversionSetup: "
"Remote: [%s,%s,%s,%s,%s].
\n
"
,
drules
,
dmodel
,
dlayout
,
dvariant
,
doptions
);
"Remote: [rules='%s',model='%s',layout='%s',variant='%s',options='%s'].
\n
"
,
d
rules
,
dmodel
,
dlayout
,
d
variant
,
doptions
);
}
else
{
...
...
@@ -1820,37 +1821,40 @@ void nxagentKeycodeConversionSetup(void)
if
(
drulesLen
!=
0
)
{
char
*
sessionpath
=
nxagentGetSessionPath
();
if
(
sessionpath
!=
NULL
){
if
(
sessionpath
!=
NULL
)
{
int
keyboard_file_path_size
=
strlen
(
sessionpath
)
+
strlen
(
"/keyboard"
);
char
*
keyboard_file_path
=
malloc
((
keyboard_file_path_size
+
1
)
*
sizeof
(
char
));
FILE
*
keyboard_file
;
if
(
keyboard_file_path
==
NULL
)
if
(
keyboard_file_path
==
NULL
)
{
FatalError
(
"nxagentKey
boardProc
: malloc failed."
);
FatalError
(
"nxagentKey
codeConversionSetup
: malloc failed."
);
}
strcpy
(
keyboard_file_path
,
sessionpath
);
strcat
(
keyboard_file_path
,
"/keyboard"
);
if
((
keyboard_file
=
fopen
(
keyboard_file_path
,
"w"
))
!=
NULL
)
{
if
(
drules
!=
NULL
)
fprintf
(
keyboard_file
,
"rules=
%s
\n
"
,
drules
);
if
(
dmodel
!=
NULL
)
fprintf
(
keyboard_file
,
"model=
%s
\n
"
,
dmodel
);
if
(
dlayout
!=
NULL
)
fprintf
(
keyboard_file
,
"layout=
%s
\n
"
,
dlayout
);
if
(
dvariant
!=
NULL
)
fprintf
(
keyboard_file
,
"variant=
%s
\n
"
,
dvariant
);
if
(
doptions
!=
NULL
)
fprintf
(
keyboard_file
,
"options=
%s
\n
"
,
doptions
);
if
(
drules
!=
NULL
)
fprintf
(
keyboard_file
,
"rules=
\"
%s
\"\n
"
,
drules
[
0
]
==
'\0'
?
","
:
drules
);
if
(
dmodel
!=
NULL
)
fprintf
(
keyboard_file
,
"model=
\"
%s
\"\n
"
,
dmodel
[
0
]
==
'\0'
?
","
:
dmodel
);
if
(
dlayout
!=
NULL
)
fprintf
(
keyboard_file
,
"layout=
\"
%s
\"\n
"
,
dlayout
[
0
]
==
'\0'
?
","
:
dlayout
);
if
(
dvariant
!=
NULL
)
fprintf
(
keyboard_file
,
"variant=
\"
%s
\"\n
"
,
dvariant
[
0
]
==
'\0'
?
","
:
dvariant
);
if
(
doptions
!=
NULL
)
fprintf
(
keyboard_file
,
"options=
\"
%s
\"\n
"
,
doptions
[
0
]
==
'\0'
?
","
:
doptions
);
fclose
(
keyboard_file
);
fprintf
(
stderr
,
"keyboard file created
\n
"
);
}
else
{
else
{
int
save_err
=
errno
;
fprintf
(
stderr
,
"keyboard file not created: %s
\n
"
,
strerror
(
save_err
));
}
free
(
keyboard_file_path
);
}
else
{
else
{
fprintf
(
stderr
,
"SessionPath not defined
\n
"
);
}
}
...
...
@@ -1859,11 +1863,15 @@ void nxagentKeycodeConversionSetup(void)
fprintf
(
stderr
,
"Failed to create the keyboard file
\n
"
);
}
if
(
nxagentOption
(
ClientOs
)
==
ClientOsLinux
&&
drules
!=
NULL
&&
dmodel
!=
NULL
&&
(
strcmp
(
drules
,
"evdev"
)
==
0
||
strcmp
(
dmodel
,
"evdev"
)
==
0
))
if
(
drules
!=
NULL
&&
dmodel
!=
NULL
&&
(
strcmp
(
drules
,
"evdev"
)
==
0
||
strcmp
(
dmodel
,
"evdev"
)
==
0
))
{
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeycodeConversionSetup: "
"Activating KeyCode conversion.
\n
"
);
#endif
nxagentKeycodeConversion
=
1
;
}
...
...
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
View file @
b1d3f2ca
...
...
@@ -438,22 +438,14 @@ Bool nxagentReconnectSession(void)
if
(
nxagentKeyboard
!=
NULL
)
{
int
size
;
size
=
strlen
(
nxagentKeyboard
);
if
((
nxagentOldKeyboard
=
malloc
(
size
+
1
))
!=
NULL
)
nxagentOldKeyboard
=
strndup
(
nxagentKeyboard
,
strlen
(
nxagentKeyboard
));
if
(
nxagentOldKeyboard
==
NULL
)
{
strncpy
(
nxagentOldKeyboard
,
nxagentKeyboard
,
size
);
nxagentOldKeyboard
[
size
]
=
'\0'
;
/* 0 means reconnection failed */
return
0
;
}
}
if
(
nxagentKeyboard
)
{
free
(
nxagentKeyboard
);
nxagentKeyboard
=
NULL
;
}
...
...
nx-X11/programs/Xserver/xkb/ddxLoad.c
View file @
b1d3f2ca
...
...
@@ -223,8 +223,8 @@ static int NXVerifyXkbBaseDirectory(const char *dirPath)
{
#ifdef TEST
fprintf
(
stderr
,
"NXVerifyXkbBaseDirectory:
Can't find the keymap.dir file [%s]
.
\n
"
,
rulesBaseFilePath
);
fprintf
(
stderr
,
"NXVerifyXkbBaseDirectory:
Xkb Base Directory [%s] is not valid (can't find file [%s])
.
\n
"
,
dirPath
,
rulesBaseFilePath
);
#endif
free
(
rulesBaseFilePath
);
...
...
@@ -767,36 +767,6 @@ char tmpname[PATH_MAX];
strncpy
(
nameRtrn
,
keymap
,
nameRtrnLen
);
nameRtrn
[
nameRtrnLen
-
1
]
=
'\0'
;
}
#if defined(Lynx) && defined(__i386__) && defined(NEED_POPEN_WORKAROUND)
/* somehow popen/pclose is broken on LynxOS AT 2.3.0/2.4.0!
* the problem usually shows up with XF86Setup
* this hack waits at max 5 seconds after pclose() returns
* for the output of the xkbcomp output file.
* I didn't manage to get a patch in time for the 3.2 release
*/
{
int
i
;
char
name
[
PATH_MAX
];
#ifdef NXAGENT_SERVER
if
(
_NXGetXkbCompPath
(
XkbBaseDirectory
)
!=
NULL
)
sprintf
(
name
,
"%s/%s%s.xkm"
,
_NXGetXkbCompPath
(
XkbBaseDirectory
)
,
xkm_output_dir
,
keymap
);
#else
if
(
XkbBaseDirectory
!=
NULL
)
sprintf
(
name
,
"%s/%s%s.xkm"
,
XkbBaseDirectory
,
xkm_output_dir
,
keymap
);
#endif
else
sprintf
(
name
,
"%s%s.xkm"
,
xkm_output_dir
,
keymap
);
for
(
i
=
0
;
i
<
10
;
i
++
)
{
if
(
access
(
name
,
0
)
==
0
)
break
;
usleep
(
500000
);
}
#ifdef DEBUG
if
(
i
)
ErrorF
(
">>>> Waited %d times for %s
\n
"
,
i
,
name
);
#endif
}
#endif
if
(
buf
!=
NULL
)
free
(
buf
);
return
True
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment