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
6f5e20bc
You need to sign in or sign up before continuing.
Commit
6f5e20bc
authored
Oct 10, 2011
by
Reinhard Tartler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Imported nxagent-3.3.0-9.tar.gz
Summary: Imported nxagent-3.3.0-9.tar.gz Keywords: Imported nxagent-3.3.0-9.tar.gz into Git repository
parent
45b970f2
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
693 additions
and
151 deletions
+693
-151
CHANGELOG
nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+21
-0
Events.c
nx-X11/programs/Xserver/hw/nxagent/Events.c
+24
-16
Font.c
nx-X11/programs/Xserver/hw/nxagent/Font.c
+37
-4
Keyboard.c
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+355
-105
Keyboard.h
nx-X11/programs/Xserver/hw/nxagent/Keyboard.h
+4
-0
Reconnect.c
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+16
-15
Render.c
nx-X11/programs/Xserver/hw/nxagent/Render.c
+6
-3
NXevents.c
nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c
+115
-4
NXevents.c.NX.original
nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original
+115
-4
No files found.
nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
View file @
6f5e20bc
ChangeLog:
nxagent-3.3.0-9
- Added /usr/NX/share/base to alternate font paths. This would fix
TR11F02130 if fonts fixed and cursor are installed there.
- Changed Keyboard initialization and reset. This change should fix
TR11F02129, TR11F02131, TR11F02132.
nxagent-3.3.0-8
- Fixed TR12F02144. Image bits of render glyphs are copied before they
are cleaned. This will avoid a memory corruption.
- Fixed TR12F02145. When dispatching a MotionNotify event, check if a
top-level window has been entered before trying to show the pulldown
dialog.
nxagent-3.3.0-7
- Added debug code for pointer input.
nxagent-3.3.0-6
- Fixed compile warnings.
...
...
nx-X11/programs/Xserver/hw/nxagent/Events.c
View file @
6f5e20bc
...
...
@@ -63,7 +63,13 @@
#include "NXproto.h"
#include "xfixesproto.h"
#define Window XlibWindow
#define Atom XlibAtom
#define Time XlibXID
#include <X11/extensions/Xfixes.h>
#undef Window
#undef Atom
#undef Time
#ifdef NXAGENT_FIXKEYS
#include "inputstr.h"
...
...
@@ -789,8 +795,9 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
}
x
.
u
.
u
.
type
=
KeyRelease
;
x
.
u
.
u
.
detail
=
X
.
xkey
.
keycode
;
x
.
u
.
keyButtonPointer
.
time
=
nxagentLastKeyPressTime
+
(
X
.
xkey
.
time
-
nxagentLastServerTime
);
x
.
u
.
u
.
detail
=
nxagentConvertKeycode
(
X
.
xkey
.
keycode
);
x
.
u
.
keyButtonPointer
.
time
=
nxagentLastKeyPressTime
+
(
X
.
xkey
.
time
-
nxagentLastServerTime
);
nxagentLastServerTime
=
X
.
xkey
.
time
;
...
...
@@ -918,7 +925,7 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"nxagentDispatchEvents: Going to handle new Button
Press
event.
\n
"
);
fprintf
(
stderr
,
"nxagentDispatchEvents: Going to handle new Button
Release
event.
\n
"
);
}
#endif
...
...
@@ -1016,18 +1023,17 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
nxagentLastEnteredWindow
=
pWin
;
}
if
(
nxagentPulldownDialogPid
==
0
&&
(
X
.
xmotion
.
y_root
<
nxagentLastEnteredTopLevelWindow
->
drawable
.
y
+
4
))
if
(
nxagentPulldownDialogPid
==
0
&&
nxagentLastEnteredTopLevelWindow
&&
(
X
.
xmotion
.
y_root
<
nxagentLastEnteredTopLevelWindow
->
drawable
.
y
+
4
))
{
if
(
pWin
&&
nxagentLastEnteredTopLevelWindow
&&
nxagentClientIsDialog
(
wClient
(
pWin
))
==
0
&&
nxagentLastEnteredTopLevelWindow
->
parent
==
WindowTable
[
0
]
&&
nxagentLastEnteredTopLevelWindow
->
overrideRedirect
==
False
&&
X
.
xmotion
.
x_root
>
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
x
+
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
width
>>
1
)
-
50
)
&&
X
.
xmotion
.
x_root
<
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
x
+
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
width
>>
1
)
+
50
)
&&
nxagentOption
(
Menu
)
==
1
)
if
(
pWin
&&
nxagentClientIsDialog
(
wClient
(
pWin
))
==
0
&&
nxagentLastEnteredTopLevelWindow
->
parent
==
WindowTable
[
0
]
&&
nxagentLastEnteredTopLevelWindow
->
overrideRedirect
==
False
&&
X
.
xmotion
.
x_root
>
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
x
+
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
width
>>
1
)
-
50
)
&&
X
.
xmotion
.
x_root
<
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
x
+
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
width
>>
1
)
+
50
)
&&
nxagentOption
(
Menu
)
==
1
)
{
nxagentPulldownDialog
(
nxagentLastEnteredTopLevelWindow
->
drawable
.
id
);
}
...
...
@@ -1052,7 +1058,8 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"nxagentDispatchEvents: Adding motion event [%d, %d] to the queue.
\n
"
,
x
.
u
.
keyButtonPointer
.
rootX
,
x
.
u
.
keyButtonPointer
.
rootY
);
fprintf
(
stderr
,
"nxagentDispatchEvents: Adding motion event [%d, %d] to the queue.
\n
"
,
x
.
u
.
keyButtonPointer
.
rootX
,
x
.
u
.
keyButtonPointer
.
rootY
);
}
#endif
...
...
@@ -1911,8 +1918,9 @@ int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult *result)
nxagentLastEventTime
=
nxagentLastKeyPressTime
=
GetTimeInMillis
();
x
.
u
.
u
.
type
=
KeyPress
;
x
.
u
.
u
.
detail
=
X
->
xkey
.
keycode
;
x
.
u
.
u
.
detail
=
nxagentConvertKeycode
(
X
->
xkey
.
keycode
)
;
x
.
u
.
keyButtonPointer
.
time
=
nxagentLastKeyPressTime
;
nxagentLastServerTime
=
X
->
xkey
.
time
;
...
...
nx-X11/programs/Xserver/hw/nxagent/Font.c
View file @
6f5e20bc
...
...
@@ -65,26 +65,34 @@ is" without express or implied warranty.
#define NXAGENT_ALTERNATE_FONT_DIR "/usr/share/X11/fonts"
#define NXAGENT_ALTERNATE_FONT_DIR_2 "/usr/share/fonts/X11"
#define NXAGENT_ALTERNATE_FONT_DIR_3 "/usr/share/fonts"
#define NXAGENT_ALTERNATE_FONT_DIR_4 "/usr/NX/share/fonts"
#define NXAGENT_DEFAULT_FONT_PATH \
"/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Speedo/,\
/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,\
/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/"
/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/,\
/usr/NX/share/fonts/base"
#define NXAGENT_ALTERNATE_FONT_PATH \
"/usr/share/X11/fonts/misc/,/usr/share/X11/fonts/Speedo/,\
/usr/share/X11/fonts/Type1/,/usr/share/X11/fonts/75dpi/,\
/usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/"
/usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/,\
/usr/NX/share/fonts/base"
#define NXAGENT_ALTERNATE_FONT_PATH_2 \
"/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Speedo/,\
/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,\
/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/"
/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/,\
/usr/NX/share/fonts/base"
#define NXAGENT_ALTERNATE_FONT_PATH_3 \
"/usr/share/fonts/misc/,/usr/share/fonts/Speedo/,\
/usr/share/fonts/Type1/,/usr/share/fonts/75dpi/,\
/usr/share/fonts/100dpi/,/usr/share/fonts/TTF/"
/usr/share/fonts/100dpi/,/usr/share/fonts/TTF/,\
/usr/NX/share/fonts/base"
#define NXAGENT_ALTERNATE_FONT_PATH_4 \
"/usr/NX/share/fonts/base"
#undef NXAGENT_FONTCACHE_DEBUG
#undef NXAGENT_RECONNECT_FONT_DEBUG
...
...
@@ -1553,6 +1561,31 @@ void nxagentVerifyDefaultFontPath(void)
strcat
(
fontPath
,
NXAGENT_ALTERNATE_FONT_PATH_3
);
}
if
(
stat
(
NXAGENT_ALTERNATE_FONT_DIR_4
,
&
dirStat
)
==
0
&&
S_ISDIR
(
dirStat
.
st_mode
)
!=
0
)
{
/*
* Let's use the "/usr/NX/share/fonts" path.
*/
#ifdef TEST
fprintf
(
stderr
,
"nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].
\n
"
,
validateString
(
NXAGENT_ALTERNATE_FONT_DIR_4
));
#endif
if
(
*
fontPath
!=
'\0'
)
{
fontPath
=
realloc
(
fontPath
,
strlen
(
fontPath
)
+
strlen
(
NXAGENT_ALTERNATE_FONT_PATH_4
)
+
2
);
strcat
(
fontPath
,
","
);
}
else
{
fontPath
=
realloc
(
fontPath
,
strlen
(
fontPath
)
+
strlen
(
NXAGENT_ALTERNATE_FONT_PATH_4
)
+
1
);
}
strcat
(
fontPath
,
NXAGENT_ALTERNATE_FONT_PATH_4
);
}
if
(
*
fontPath
==
'\0'
)
{
#ifdef WARNING
...
...
nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
View file @
6f5e20bc
...
...
@@ -75,6 +75,8 @@ is" without express or implied warranty.
static
int
nxagentXkbGetNames
(
char
**
rules
,
char
**
model
,
char
**
layout
,
char
**
variant
,
char
**
options
);
static
void
nxagentKeycodeConversionSetup
(
void
);
#endif
/* XKB */
/*
...
...
@@ -189,6 +191,281 @@ unsigned int nxagentAltMetaMask;
void
nxagentCheckAltMetaKeys
(
CARD8
,
int
);
static
CARD8
nxagentConvertedKeycodes
[]
=
{
/* evdev pc105*/
/* 0 */
0
,
/* 1 */
1
,
/* 2 */
2
,
/* 3 */
3
,
/* 4 */
4
,
/* 5 */
5
,
/* 6 */
6
,
/* 7 */
7
,
/* 8 */
8
,
/* 9 */
9
,
/* 10 */
10
,
/* 11 */
11
,
/* 12 */
12
,
/* 13 */
13
,
/* 14 */
14
,
/* 15 */
15
,
/* 16 */
16
,
/* 17 */
17
,
/* 18 */
18
,
/* 19 */
19
,
/* 20 */
20
,
/* 21 */
21
,
/* 22 */
22
,
/* 23 */
23
,
/* 24 */
24
,
/* 25 */
25
,
/* 26 */
26
,
/* 27 */
27
,
/* 28 */
28
,
/* 29 */
29
,
/* 30 */
30
,
/* 31 */
31
,
/* 32 */
32
,
/* 33 */
33
,
/* 34 */
34
,
/* 35 */
35
,
/* 36 */
36
,
/* 37 */
37
,
/* 38 */
38
,
/* 39 */
39
,
/* 40 */
40
,
/* 41 */
41
,
/* 42 */
42
,
/* 43 */
43
,
/* 44 */
44
,
/* 45 */
45
,
/* 46 */
46
,
/* 47 */
47
,
/* 48 */
48
,
/* 49 */
49
,
/* 50 */
50
,
/* 51 */
51
,
/* 52 */
52
,
/* 53 */
53
,
/* 54 */
54
,
/* 55 */
55
,
/* 56 */
56
,
/* 57 */
57
,
/* 58 */
58
,
/* 59 */
59
,
/* 60 */
60
,
/* 61 */
61
,
/* 62 */
62
,
/* 63 */
63
,
/* 64 */
64
,
/* 65 */
65
,
/* 66 */
66
,
/* 67 */
67
,
/* 68 */
68
,
/* 69 */
69
,
/* 70 */
70
,
/* 71 */
71
,
/* 72 */
72
,
/* 73 */
73
,
/* 74 */
74
,
/* 75 */
75
,
/* 76 */
76
,
/* 77 */
77
,
/* 78 */
78
,
/* 79 */
79
,
/* 80 */
80
,
/* 81 */
81
,
/* 82 */
82
,
/* 83 */
83
,
/* 84 */
84
,
/* 85 */
85
,
/* 86 */
86
,
/* 87 */
87
,
/* 88 */
88
,
/* 89 */
89
,
/* 90 */
90
,
/* 91 */
91
,
/* 92 */
124
,
/* 93 */
93
,
/* 94 */
94
,
/* 95 */
95
,
/* 96 */
96
,
/* 97 */
211
,
/* 98 */
98
,
/* 99 */
99
,
/* 100 */
100
,
/* 101 */
208
,
/* 102 */
102
,
/* 103 */
103
,
/* 104 */
108
,
/* 105 */
109
,
/* 106 */
112
,
/* 107 */
111
,
/* 108 */
113
,
/* 109 */
109
,
/* 110 */
97
,
/* 111 */
98
,
/* 112 */
99
,
/* 113 */
100
,
/* 114 */
102
,
/* 115 */
103
,
/* 116 */
104
,
/* 117 */
105
,
/* 118 */
106
,
/* 119 */
107
,
/* 120 */
120
,
/* 121 */
121
,
/* 122 */
122
,
/* 123 */
123
,
/* 124 */
124
,
/* 125 */
126
,
/* 126 */
126
,
/* 127 */
110
,
/* 128 */
128
,
/* 129 */
129
,
/* 130 */
130
,
/* 131 */
131
,
/* 132 */
133
,
/* 133 */
115
,
/* 134 */
116
,
/* 135 */
117
,
/* 136 */
136
,
/* 137 */
137
,
/* 138 */
138
,
/* 139 */
139
,
/* 140 */
140
,
/* 141 */
141
,
/* 142 */
142
,
/* 143 */
143
,
/* 144 */
144
,
/* 145 */
145
,
/* 146 */
146
,
/* 147 */
147
,
/* 148 */
148
,
/* 149 */
149
,
/* 150 */
150
,
/* 151 */
151
,
/* 152 */
152
,
/* 153 */
153
,
/* 154 */
154
,
/* 155 */
155
,
/* 156 */
156
,
/* 157 */
157
,
/* 158 */
158
,
/* 159 */
159
,
/* 160 */
160
,
/* 161 */
161
,
/* 162 */
162
,
/* 163 */
163
,
/* 164 */
164
,
/* 165 */
165
,
/* 166 */
166
,
/* 167 */
167
,
/* 168 */
168
,
/* 169 */
169
,
/* 170 */
170
,
/* 171 */
171
,
/* 172 */
172
,
/* 173 */
173
,
/* 174 */
174
,
/* 175 */
175
,
/* 176 */
176
,
/* 177 */
177
,
/* 178 */
178
,
/* 179 */
179
,
/* 180 */
180
,
/* 181 */
181
,
/* 182 */
182
,
/* 183 */
183
,
/* 184 */
184
,
/* 185 */
185
,
/* 186 */
186
,
/* 187 */
187
,
/* 188 */
188
,
/* 189 */
189
,
/* 190 */
190
,
/* 191 */
118
,
/* 192 */
119
,
/* 193 */
120
,
/* 194 */
121
,
/* 195 */
122
,
/* 196 */
196
,
/* 197 */
197
,
/* 198 */
198
,
/* 199 */
199
,
/* 200 */
200
,
/* 201 */
201
,
/* 202 */
202
,
/* 203 */
93
,
/* 204 */
125
,
/* 205 */
156
,
/* 206 */
127
,
/* 207 */
128
,
/* 208 */
208
,
/* 209 */
209
,
/* 210 */
210
,
/* 211 */
211
,
/* 212 */
212
,
/* 213 */
213
,
/* 214 */
214
,
/* 215 */
215
,
/* 216 */
216
,
/* 217 */
217
,
/* 218 */
218
,
/* 219 */
219
,
/* 220 */
220
,
/* 221 */
221
,
/* 222 */
222
,
/* 223 */
223
,
/* 224 */
224
,
/* 225 */
225
,
/* 226 */
226
,
/* 227 */
227
,
/* 228 */
228
,
/* 229 */
229
,
/* 230 */
230
,
/* 231 */
231
,
/* 232 */
232
,
/* 233 */
233
,
/* 234 */
234
,
/* 235 */
235
,
/* 236 */
236
,
/* 237 */
237
,
/* 238 */
238
,
/* 239 */
239
,
/* 240 */
240
,
/* 241 */
241
,
/* 242 */
242
,
/* 243 */
243
,
/* 244 */
244
,
/* 245 */
245
,
/* 246 */
246
,
/* 247 */
247
,
/* 248 */
248
,
/* 249 */
249
,
/* 250 */
250
,
/* 251 */
251
,
/* 252 */
252
,
/* 253 */
253
,
/* 254 */
254
,
/* 255 */
255
};
static
int
nxagentKeycodeConversion
=
0
;
CARD8
nxagentConvertKeycode
(
CARD8
k
)
{
if
(
nxagentKeycodeConversion
!=
0
)
{
return
nxagentConvertedKeycodes
[
k
];
}
else
{
return
k
;
}
}
static
int
nxagentSaveKeyboardDeviceData
(
DeviceIntPtr
dev
,
DeviceIntPtr
devBackup
);
static
int
nxagentRestoreKeyboardDeviceData
(
DeviceIntPtr
devBackup
,
DeviceIntPtr
dev
);
...
...
@@ -398,13 +675,6 @@ int nxagentKeyboardProc(DeviceIntPtr pDev, int onoff)
int
ret
;
char
*
remoteRules
=
NULL
;
char
*
remoteModel
=
NULL
;
unsigned
int
remoteRulesLen
;
XkbRF_VarDefsRec
remoteDefs
;
switch
(
onoff
)
{
case
DEVICE_INIT
:
...
...
@@ -676,14 +946,21 @@ XkbError:
xkb
=
XkbGetKeyboard
(
nxagentDisplay
,
XkbGBN_AllComponentsMask
,
XkbUseCoreKbd
);
nxagentKeycodeConversionSetup
();
if
(
xkb
==
NULL
||
xkb
->
geom
==
NULL
)
{
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: No current keyboard.
\n
"
);
#endif
#ifdef TEST
fprintf
(
stderr
,
"nxagentKeyboardProc: No keyboard, going to set rules and init device.
\n
"
);
if
(
xkb
==
NULL
)
{
fprintf
(
stderr
,
"nxagentKeyboardProc: xkb is null.
\n
"
);
}
else
{
fprintf
(
stderr
,
"nxagentKeyboardProc: xkb->geom is null.
\n
"
);
}
fprintf
(
stderr
,
"nxagentKeyboardProc: Going to set rules and init device.
\n
"
);
#endif
XkbSetRulesDflts
(
rules
,
model
,
layout
,
variants
,
options
);
...
...
@@ -699,40 +976,6 @@ XkbError:
goto
XkbEnd
;
}
if
(
xkb
!=
NULL
)
{
char
*
drules
=
0
;
char
*
dmodel
=
0
;
char
*
dlayout
=
0
;
char
*
dvariant
=
0
;
char
*
doptions
=
0
;
remoteRulesLen
=
nxagentXkbGetNames
(
&
drules
,
&
dmodel
,
&
dlayout
,
&
dvariant
,
&
doptions
);
if
(
remoteRulesLen
!=
0
&&
drules
!=
NULL
&&
dmodel
!=
NULL
)
{
#ifdef DEBUG
fprintf
(
stderr
,
"nxagentKeyboardProc: Remote: [%s,%s,%s,%s,%s].
\n
"
,
drules
,
dmodel
,
dlayout
,
dvariant
,
doptions
);
#endif
remoteRules
=
drules
;
remoteModel
=
dmodel
;
remoteDefs
.
model
=
dmodel
;
remoteDefs
.
layout
=
dlayout
;
remoteDefs
.
variant
=
dvariant
;
remoteDefs
.
options
=
doptions
;
}
#ifdef DEBUG
else
{
fprintf
(
stderr
,
"nxagentKeyboardProc: Failed to retrieve remote "
"rules"
);
}
#endif
}
XkbGetControls
(
nxagentDisplay
,
XkbAllControlsMask
,
xkb
);
nxagentXkbConfigFilePathSize
=
strlen
(
XkbBaseDirectory
)
+
...
...
@@ -813,66 +1056,6 @@ XkbError:
free
(
nxagentXkbConfigFilePath
);
if
(
xkb
!=
NULL
&&
nxagentOption
(
ClientOs
)
==
ClientOsLinux
&&
remoteRules
!=
NULL
&&
remoteModel
!=
NULL
&&
(
strcmp
(
remoteRules
,
"evdev"
)
==
0
||
strcmp
(
remoteModel
,
"evdev"
)
==
0
)
&&
pDev
->
key
->
xkbInfo
!=
NULL
&&
pDev
->
key
->
xkbInfo
->
desc
!=
NULL
)
{
XkbDescPtr
xkbt
;
void
*
tmp
;
#ifdef _XSERVER64
int
i
;
#endif
xkbt
=
pDev
->
key
->
xkbInfo
->
desc
;
xkbt
->
min_key_code
=
xkb
->
min_key_code
;
xkbt
->
max_key_code
=
xkb
->
max_key_code
;
if
(
xkbt
->
map
!=
NULL
&&
xkb
->
map
!=
NULL
)
{
tmp
=
(
void
*
)
xkbt
->
map
;
xkbt
->
map
=
xkb
->
map
;
xkb
->
map
=
(
XkbClientMapPtr
)
tmp
;
#ifdef _XSERVER64
tmp
=
(
void
*
)
xkbt
->
map
->
syms
;
xkbt
->
map
->
syms
=
xalloc
(
xkbt
->
map
->
size_syms
*
sizeof
(
KeySym
));
for
(
i
=
0
;
i
<
xkbt
->
map
->
size_syms
;
i
++
)
{
xkbt
->
map
->
syms
[
i
]
=
((
KeySym64
*
)
tmp
)[
i
];
}
#endif
}
if
(
xkbt
->
server
!=
NULL
&&
xkb
->
server
!=
NULL
)
{
tmp
=
(
void
*
)
xkbt
->
server
;
xkbt
->
server
=
xkb
->
server
;
xkb
->
server
=
(
XkbServerMapPtr
)
tmp
;
}
if
(
xkbt
->
compat
!=
NULL
&&
xkb
->
compat
!=
NULL
)
{
tmp
=
(
void
*
)
xkbt
->
compat
;
xkbt
->
compat
=
xkb
->
compat
;
xkb
->
compat
=
(
XkbCompatMapPtr
)
tmp
;
}
XkbSetRulesDflts
(
remoteRules
,
remoteDefs
.
model
,
remoteDefs
.
layout
,
remoteDefs
.
variant
,
remoteDefs
.
options
);
XkbSetRulesUsed
(
&
remoteDefs
);
free
(
remoteRules
);
goto
XkbEnd
;
}
if
(
!
nxagentKeyboard
||
(
nxagentKeyboard
&&
(
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
)))
{
...
...
@@ -1562,4 +1745,71 @@ static int nxagentXkbGetNames(char **rules, char **model, char **layout,
return
n
;
}
void
nxagentKeycodeConversionSetup
(
void
)
{
char
*
drules
=
0
;
char
*
dmodel
=
0
;
char
*
dlayout
=
0
;
char
*
dvariant
=
0
;
char
*
doptions
=
0
;
unsigned
int
drulesLen
;
nxagentKeycodeConversion
=
0
;
drulesLen
=
nxagentXkbGetNames
(
&
drules
,
&
dmodel
,
&
dlayout
,
&
dvariant
,
&
doptions
);
#ifdef DEBUG
if
(
drulesLen
!=
0
&&
drules
!=
NULL
&&
dmodel
!=
NULL
)
{
fprintf
(
stderr
,
"nxagentKeycodeConversionSetup: "
"Remote: [%s,%s,%s,%s,%s].
\n
"
,
drules
,
dmodel
,
dlayout
,
dvariant
,
doptions
);
}
else
{
fprintf
(
stderr
,
"nxagentKeycodeConversionSetup: "
"Failed to retrieve remote rules.
\n
"
);
}
#endif
if
(
nxagentOption
(
ClientOs
)
==
ClientOsLinux
&&
drules
!=
NULL
&&
dmodel
!=
NULL
&&
(
strcmp
(
drules
,
"evdev"
)
==
0
||
strcmp
(
dmodel
,
"evdev"
)
==
0
))
{
nxagentKeycodeConversion
=
1
;
}
if
(
drules
!=
NULL
)
{
XFree
(
drules
);
}
}
void
nxagentResetKeycodeConversion
(
void
)
{
int
result
;
XkbAgentInfoRec
info
;
XkbDescPtr
xkb
;
result
=
XkbQueryExtension
(
nxagentDisplay
,
&
info
.
Opcode
,
&
info
.
EventBase
,
&
info
.
ErrorBase
,
&
info
.
MajorVersion
,
&
info
.
MinorVersion
);
if
(
result
!=
0
)
{
nxagentKeycodeConversionSetup
();
}
else
{
#ifdef WARNING
fprintf
(
stderr
,
"nxagentResetKeycodeConversion: "
"WARNING! Failed to query XKB extension.
\n
"
);
#endif
nxagentKeycodeConversion
=
0
;
}
}
#endif
nx-X11/programs/Xserver/hw/nxagent/Keyboard.h
View file @
6f5e20bc
...
...
@@ -109,6 +109,10 @@ void nxagentEnableXkbExtension(void);
void
nxagentTuneXkbWrapper
(
void
);
void
nxagentResetKeycodeConversion
(
void
);
#endif
CARD8
nxagentConvertKeycode
(
CARD8
k
);
#endif
/* __Keyboard_H__ */
nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
View file @
6f5e20bc
...
...
@@ -547,28 +547,29 @@ Bool nxagentReconnectSession(void)
goto
nxagentReconnectError
;
}
if
(
nxagentOption
(
ResetKeyboardAtResume
))
if
(
nxagentOption
(
ResetKeyboardAtResume
)
==
1
&&
(
nxagentKeyboard
==
NULL
||
nxagentOldKeyboard
==
NULL
||
strcmp
(
nxagentKeyboard
,
nxagentOldKeyboard
)
!=
0
||
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
))
{
if
(
nxagentKeyboard
==
NULL
||
nxagentOldKeyboard
==
NULL
||
strcmp
(
nxagentKeyboard
,
nxagentOldKeyboard
)
!=
0
||
strcmp
(
nxagentKeyboard
,
"query"
)
==
0
)
if
(
nxagentResetKeyboard
()
==
0
)
{
if
(
nxagent
ResetKeyboard
()
==
0
)
#ifdef WARNING
if
(
nxagent
Verbose
==
1
)
{
#ifdef WARNING
if
(
nxagentVerbose
==
1
)
{
fprintf
(
stderr
,
"nxagentReconnect: Failed to reset keyboard device.
\n
"
);
}
#endif
fprintf
(
stderr
,
"nxagentReconnect: Failed to reset keyboard device.
\n
"
);
}
#endif
failedStep
=
WINDOW_STEP
;
failedStep
=
WINDOW_STEP
;
goto
nxagentReconnectError
;
}
goto
nxagentReconnectError
;
}
}
else
{
nxagentResetKeycodeConversion
();
}
nxagentXkbState
.
Initialized
=
0
;
...
...
nx-X11/programs/Xserver/hw/nxagent/Render.c
View file @
6f5e20bc
...
...
@@ -2270,8 +2270,7 @@ void nxagentAddGlyphs(GlyphSetPtr glyphSet, Glyph *gids, xGlyphInfo *gi,
normalizedImages
=
NULL
;
if
(
glyphDepths
[
glyphSet
->
fdepth
]
==
1
&&
nxagentServerOrder
()
!=
BitmapBitOrder
(
nxagentDisplay
))
if
(
sizeImages
>
0
)
{
normalizedImages
=
xalloc
(
sizeImages
);
...
...
@@ -2279,7 +2278,11 @@ void nxagentAddGlyphs(GlyphSetPtr glyphSet, Glyph *gids, xGlyphInfo *gi,
{
memcpy
(
normalizedImages
,
images
,
sizeImages
);
BitOrderInvert
((
unsigned
char
*
)
normalizedImages
,
sizeImages
);
if
(
glyphDepths
[
glyphSet
->
fdepth
]
==
1
&&
nxagentServerOrder
()
!=
BitmapBitOrder
(
nxagentDisplay
))
{
BitOrderInvert
((
unsigned
char
*
)
normalizedImages
,
sizeImages
);
}
}
else
{
...
...
nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c
View file @
6f5e20bc
...
...
@@ -189,6 +189,10 @@ xEvent *xeviexE;
#include "Windows.h"
#include "Args.h"
#ifdef NX_DEBUG_INPUT
extern
int
nxagentDebugInput
;
#endif
extern
Display
*
nxagentDisplay
;
extern
WindowPtr
nxagentLastEnteredWindow
;
...
...
@@ -1682,11 +1686,28 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
int
i
;
int
type
;
#ifdef DEBUG
#ifdef NX_DEBUG_INPUT
if
(
grab
&&
nxagentDebugInput
&&
grab
->
window
)
{
fprintf
(
stderr
,
"TryClientEvents: Grab window is [0x%x].
\n
"
,
(
unsigned
int
)
grab
->
window
->
drawable
.
id
);
if
(
!
SameClient
(
grab
,
client
))
fprintf
(
stderr
,
"TryClientEvents: Events are going to be "
"discarded.
\n
"
);
}
#endif
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
fprintf
(
stderr
,
"Event([%d, %d], mask=0x%x), client=%d"
,
pEvents
->
u
.
u
.
type
,
pEvents
->
u
.
u
.
detail
,
(
unsigned
int
)
mask
,
client
->
index
);
#else
if
(
debug_events
)
ErrorF
(
"Event([%d, %d], mask=0x%x), client=%d"
,
pEvents
->
u
.
u
.
type
,
pEvents
->
u
.
u
.
detail
,
mask
,
client
->
index
);
#endif
#endif
if
((
client
)
&&
(
client
!=
serverClient
)
&&
(
!
client
->
clientGone
)
&&
((
filter
==
CantBeFiltered
)
||
(
mask
&
filter
)))
{
...
...
@@ -1700,10 +1721,17 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
if
(
WID
(
inputInfo
.
pointer
->
valuator
->
motionHintWindow
)
==
pEvents
->
u
.
keyButtonPointer
.
event
)
{
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"
\n
motionHintWindow == keyButtonPointer.event
\n
"
);
}
#else
if
(
debug_events
)
ErrorF
(
"
\n
"
);
fprintf
(
stderr
,
"motionHintWindow == keyButtonPointer.event
\n
"
);
#endif
#endif
return
1
;
/* don't send, but pretend we did */
}
pEvents
->
u
.
u
.
detail
=
NotifyHint
;
...
...
@@ -1740,16 +1768,26 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
}
WriteEventsToClient
(
client
,
count
,
pEvents
);
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
fprintf
(
stderr
,
" delivered
\n
"
);
#else
if
(
debug_events
)
ErrorF
(
" delivered
\n
"
);
#endif
#endif
return
1
;
}
else
{
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
fprintf
(
stderr
,
"
\n
"
);
#else
if
(
debug_events
)
ErrorF
(
"
\n
"
);
#endif
#endif
return
0
;
}
}
...
...
@@ -3116,6 +3154,12 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
xevieEventSent
=
0
;
else
{
xeviemouse
=
mouse
;
#ifdef NX_DEBUG_INPUT
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: Going to send XEVIE event.
\n
"
);
}
#endif
WriteToClient
(
clients
[
xevieClientIndex
],
sizeof
(
xEvent
),
(
char
*
)
xE
);
return
;
}
...
...
@@ -3170,14 +3214,38 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
#if !defined(XFree86Server) || !defined(XINPUT)
xE
->
u
.
u
.
detail
=
butc
->
map
[
key
];
#endif
#ifdef NX_DEBUG_INPUT
if
(
xE
->
u
.
u
.
detail
==
0
)
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: WARNING! detail == 0"
" for ButtonPress.
\n
"
);
}
return
;
}
#else
if
(
xE
->
u
.
u
.
detail
==
0
)
return
;
#endif
if
(
xE
->
u
.
u
.
detail
<=
5
)
butc
->
state
|=
(
Button1Mask
>>
1
)
<<
xE
->
u
.
u
.
detail
;
filters
[
MotionNotify
]
=
Motion_Filter
(
butc
);
if
(
!
grab
)
#ifdef NX_DEBUG_INPUT
if
(
CheckDeviceGrabs
(
mouse
,
xE
,
0
,
count
))
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: CheckDeviceGrabs"
" returned True for ButtonPress.
\n
"
);
}
return
;
}
#else
if
(
CheckDeviceGrabs
(
mouse
,
xE
,
0
,
count
))
return
;
#endif
break
;
case
ButtonRelease
:
mouse
->
valuator
->
motionHintWindow
=
NullWindow
;
...
...
@@ -3189,8 +3257,20 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
#if !defined(XFree86Server) || !defined(XINPUT)
xE
->
u
.
u
.
detail
=
butc
->
map
[
key
];
#endif
#ifdef NX_DEBUG_INPUT
if
(
xE
->
u
.
u
.
detail
==
0
)
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: WARNING! detail == 0"
" for ButtonRelease.
\n
"
);
}
return
;
}
#else
if
(
xE
->
u
.
u
.
detail
==
0
)
return
;
#endif
if
(
xE
->
u
.
u
.
detail
<=
5
)
butc
->
state
&=
~
((
Button1Mask
>>
1
)
<<
xE
->
u
.
u
.
detail
);
filters
[
MotionNotify
]
=
Motion_Filter
(
butc
);
...
...
@@ -3201,6 +3281,36 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
FatalError
(
"bogus pointer event from ddx"
);
}
}
#ifdef NX_DEBUG_INPUT
else
if
(
!
CheckMotion
(
xE
))
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: CheckMotion returned False"
" for MotionNotify.
\n
"
);
}
return
;
}
if
(
grab
)
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: Going to deliver grabbed "
"events (count = %d).
\n
"
,
count
);
}
DeliverGrabbedEvent
(
xE
,
mouse
,
deactivateGrab
,
count
);
}
else
{
if
(
nxagentDebugInput
==
1
)
{
fprintf
(
stderr
,
"ProcessPointerEvent: Going to deliver device "
"events (count = %d).
\n
"
,
count
);
}
DeliverDeviceEvents
(
sprite
.
win
,
xE
,
NullGrab
,
NullWindow
,
mouse
,
count
);
}
#else
else
if
(
!
CheckMotion
(
xE
))
return
;
if
(
grab
)
...
...
@@ -3208,6 +3318,7 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
else
DeliverDeviceEvents
(
sprite
.
win
,
xE
,
NullGrab
,
NullWindow
,
mouse
,
count
);
#endif
if
(
deactivateGrab
)
(
*
mouse
->
DeactivateGrab
)(
mouse
);
}
...
...
nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original
View file @
6f5e20bc
...
...
@@ -189,6 +189,10 @@ xEvent *xeviexE;
#include "Windows.h"
#include "Args.h"
#ifdef NX_DEBUG_INPUT
extern int nxagentDebugInput;
#endif
extern Display *nxagentDisplay;
extern WindowPtr nxagentLastEnteredWindow;
...
...
@@ -1682,11 +1686,28 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
int i;
int type;
#ifdef DEBUG
#ifdef NX_DEBUG_INPUT
if (grab && nxagentDebugInput && grab->window)
{
fprintf(stderr, "TryClientEvents: Grab window is [0x%x].\n",
(unsigned int)grab->window->drawable.id);
if (!SameClient(grab, client))
fprintf(stderr, "TryClientEvents: Events are going to be "
"discarded.\n");
}
#endif
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if (nxagentDebugInput == 1)
fprintf(stderr, "Event([%d, %d], mask=0x%x), client=%d",
pEvents->u.u.type, pEvents->u.u.detail, (unsigned int)mask,
client->index);
#else
if (debug_events) ErrorF(
"Event([%d, %d], mask=0x%x), client=%d",
pEvents->u.u.type, pEvents->u.u.detail, mask, client->index);
#endif
#endif
if ((client) && (client != serverClient) && (!client->clientGone) &&
((filter == CantBeFiltered) || (mask & filter)))
{
...
...
@@ -1700,10 +1721,17 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
if (WID(inputInfo.pointer->valuator->motionHintWindow) ==
pEvents->u.keyButtonPointer.event)
{
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if (nxagentDebugInput == 1)
{
fprintf(stderr,"\nmotionHintWindow == keyButtonPointer.event\n");
}
#else
if (debug_events) ErrorF("\n");
fprintf(stderr,"motionHintWindow == keyButtonPointer.event\n");
#endif
#endif
return 1; /* don't send, but pretend we did */
}
pEvents->u.u.detail = NotifyHint;
...
...
@@ -1740,16 +1768,26 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
}
WriteEventsToClient(client, count, pEvents);
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if (nxagentDebugInput == 1)
fprintf(stderr, " delivered\n");
#else
if (debug_events) ErrorF( " delivered\n");
#endif
#endif
return 1;
}
else
{
#ifdef DEBUG
#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
#ifdef NX_DEBUG_INPUT
if (nxagentDebugInput == 1)
fprintf(stderr, "\n");
#else
if (debug_events) ErrorF("\n");
#endif
#endif
return 0;
}
}
...
...
@@ -3116,6 +3154,12 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
xevieEventSent = 0;
else {
xeviemouse = mouse;
#ifdef NX_DEBUG_INPUT
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: Going to send XEVIE event.\n");
}
#endif
WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
return;
}
...
...
@@ -3170,14 +3214,38 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
#if !defined(XFree86Server) || !defined(XINPUT)
xE->u.u.detail = butc->map[key];
#endif
#ifdef NX_DEBUG_INPUT
if (xE->u.u.detail == 0)
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
" for ButtonPress.\n");
}
return;
}
#else
if (xE->u.u.detail == 0)
return;
#endif
if (xE->u.u.detail <= 5)
butc->state |= (Button1Mask >> 1) << xE->u.u.detail;
filters[MotionNotify] = Motion_Filter(butc);
if (!grab)
#ifdef NX_DEBUG_INPUT
if (CheckDeviceGrabs(mouse, xE, 0, count))
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: CheckDeviceGrabs"
" returned True for ButtonPress.\n");
}
return;
}
#else
if (CheckDeviceGrabs(mouse, xE, 0, count))
return;
#endif
break;
case ButtonRelease:
mouse->valuator->motionHintWindow = NullWindow;
...
...
@@ -3189,8 +3257,20 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
#if !defined(XFree86Server) || !defined(XINPUT)
xE->u.u.detail = butc->map[key];
#endif
#ifdef NX_DEBUG_INPUT
if (xE->u.u.detail == 0)
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
" for ButtonRelease.\n");
}
return;
}
#else
if (xE->u.u.detail == 0)
return;
#endif
if (xE->u.u.detail <= 5)
butc->state &= ~((Button1Mask >> 1) << xE->u.u.detail);
filters[MotionNotify] = Motion_Filter(butc);
...
...
@@ -3201,6 +3281,36 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
FatalError("bogus pointer event from ddx");
}
}
#ifdef NX_DEBUG_INPUT
else if (!CheckMotion(xE))
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: CheckMotion returned False"
" for MotionNotify.\n");
}
return;
}
if (grab)
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: Going to deliver grabbed "
"events (count = %d).\n", count);
}
DeliverGrabbedEvent(xE, mouse, deactivateGrab, count);
}
else
{
if (nxagentDebugInput == 1)
{
fprintf(stderr, "ProcessPointerEvent: Going to deliver device "
"events (count = %d).\n", count);
}
DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
mouse, count);
}
#else
else if (!CheckMotion(xE))
return;
if (grab)
...
...
@@ -3208,6 +3318,7 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
else
DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
mouse, count);
#endif
if (deactivateGrab)
(*mouse->DeactivateGrab)(mouse);
}
...
...
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