GetKeyboardMapping fix + test

This commit is contained in:
sidorares 2011-08-30 15:16:07 +10:00
parent 42e3e4c9a6
commit c1ee1fea65
4 changed files with 61 additions and 7 deletions

View file

@ -410,5 +410,21 @@ module.exports = {
}
return res;
}
]
],
GetKeyboardMapping: [
function(startCode, num) {
return [ 'CxSCCxx', [101, 2, startCode, num] ]
},
function(buff, listLength) {
var res = [];
var format = '';
for (var i=0; i < listLength; ++i)
format += 'L';
for (var offset=0; offset < buff.length - 4*listLength; offset += 4*listLength)
res.push(buff.unpack(format, offset));
console.log(res);
return res;
}
]
}

View file

@ -1,4 +1,7 @@
var core = require('./xcore');
var em = require('./eventmask').eventMask;
var keysyms = require('./keysyms');
module.exports.createClient = core.createClient;
module.exports.eventMask = em;
module.exports.eventMask = em;
module.exports.keySyms = keysyms;

View file

@ -44,14 +44,14 @@ function XClient(stream, displayNum, screenNum)
pack_stream.on('data', function( data ) {
//console.error(hexy(data, {prefix: 'from packer '}));
for (var i=0; i < data.length; ++i)
console.log('<<< ' + data[i]);
//for (var i=0; i < data.length; ++i)
// console.log('<<< ' + data[i]);
stream.write(data);
});
stream.on('data', function( data ) {
//console.error(hexy(data, {prefix: 'to unpacker '}));
for (var i=0; i < data.length; ++i)
console.log('>>> ' + data[i]);
//for (var i=0; i < data.length; ++i)
// console.log('>>> ' + data[i]);
pack_stream.write(data);
});
@ -171,7 +171,7 @@ XClient.prototype.unpackEvent = function(type, seq, extra, code, raw)
event.type = type;
event.seq = seq;
if (type == 4 || type == 5 || type == 6) { // motion event
if (type == 2 || type == 4 || type == 5 || type == 6) { // motion event
var values = raw.unpack('LLLSSSSSC'); //TODO: should be LLLLsssssSC
//event.raw = values;
// TODO: use unpackTo???
@ -254,6 +254,7 @@ XClient.prototype.expectReplyHeader = function()
var code = res[1];
var ev = client.unpackEvent(type, seq_num, extra, code, buf);
client.emit('event', ev);
console.log(ev);
var ee = client.event_consumers[ev.wid];
if (ee) {
ee.emit('event', ev);

View file

@ -0,0 +1,34 @@
var x11 = require('../lib/x11');
var xclient = x11.createClient();
var ks = x11.keySyms;
var ks2Name = {};
for (var key in ks)
ks2Name[ ks[key] ] = key;
var kk2Name = {};
xclient.on('connect', function(display) {
var X = this;
var min = display.min_keycode;
var max = display.max_keycode;
X.GetKeyboardMapping(min, max-min, function(list) {
for (i in list)
{
var sublist = list[i];
kk2Name[i] = [];
for (j in sublist)
kk2Name[i].push(ks2Name[sublist[j]]);
}
var root = display.screen[0].root;
var wid = X.AllocID();
var white = display.screen[0].white_pixel;
var black = display.screen[0].black_pixel;
X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: x11.eventMask.KeyPress});
X.MapWindow(wid);
X.on('event', function(ev) {
console.log(kk2Name[ev.keycode]);
});
});
});