MotionNotify unpack code

This commit is contained in:
Andrey Sidorov 2011-07-15 18:42:28 +10:00
parent 594456a9c3
commit 3f4c8b5700

View file

@ -82,6 +82,7 @@ XClient.prototype.importRequestsFromTemplates = function(target, reqs)
// r is request name // r is request name
target[r] = (function(reqName) { target[r] = (function(reqName) {
var reqFunc = function req_proxy() { var reqFunc = function req_proxy() {
client.seq_num++; // TODO: handle overflw (seq should be last 15 (?) bits of the number
var args = Array.prototype.slice.call(req_proxy.arguments); var args = Array.prototype.slice.call(req_proxy.arguments);
// TODO: setup last argument to be reply/error callback // TODO: setup last argument to be reply/error callback
// var callback = args.length > 0 ? null : args[args.length - 1]; // var callback = args.length > 0 ? null : args[args.length - 1];
@ -127,6 +128,31 @@ XClient.prototype.AllocID = function()
return (this.display.rsrc_id << this.display.rsrc_shift) + this.display.resource_base; return (this.display.rsrc_id << this.display.rsrc_shift) + this.display.resource_base;
} }
XClient.prototype.unpackEvent = function(type, seq, extra, raw)
{
var event = {}; // TODO: constructor & base functions
event.type = type;
event.seq = seq;
if (type == 6) { // motion event
var values = raw.unpack('LLLSSSSSC'); //TODO: should be LLLLsssssSC
//event.raw = values;
// TODO: use unpackTo???
event.time = extra;
event.root = values[0];
event.wid = values[1];
event.child = values[2];
event.rootx = values[3];
event.rooty = values[4];
event.x = values[5];
event.y = values[6];
event.buttons = values[7];
event.sameScreen = values[8];
}
//console.log(event);
return event;
}
XClient.prototype.expectReplyHeader = function() XClient.prototype.expectReplyHeader = function()
{ {
var client = this; var client = this;
@ -147,8 +173,11 @@ XClient.prototype.expectReplyHeader = function()
} else if (type > 1) } else if (type > 1)
{ {
client.pack_stream.get(24, function(buf) { client.pack_stream.get(24, function(buf) {
var extra = res[3];
var ev = client.unpackEvent(type, seq_num, extra, buf);
client.emit('event', ev);
// TODO: dispatch, use sequence number // TODO: dispatch, use sequence number
console.error('event!!!! ' + type); // console.error('event!!!! ' + type);
client.expectReplyHeader(); client.expectReplyHeader();
} ); } );
return; return;