46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
// http://www.x.org/releases/X11R7.6/doc/xextproto/xtest.pdf
|
|
|
|
var x11 = Require('x11/core/x11');
|
|
// TODO: move to templates
|
|
exports.requireExt = function(display, callback)
|
|
{
|
|
var X = display.client;
|
|
X.QueryExtension('XTEST', function(err, ext) {
|
|
|
|
if (!ext.present)
|
|
return callback(new Error('extension not available'));
|
|
|
|
ext.GetVersion = function(clientMaj, clientMin, callback)
|
|
{
|
|
X.seq_num++;
|
|
X.pack_stream.pack('CCSCxS', [ext.majorOpcode, 0, 2, clientMaj, clientMin]);
|
|
X.replies[X.seq_num] = [
|
|
function(buf, opt) {
|
|
var res = buf.unpack('S');
|
|
// Major version is in byte 1 of Reply Header
|
|
// Minor version is in the body of the reply
|
|
return [ opt, res[0] ];
|
|
},
|
|
callback
|
|
];
|
|
X.pack_stream.flush();
|
|
}
|
|
|
|
ext.KeyPress = 2;
|
|
ext.KeyRelease = 3;
|
|
ext.ButtonPress = 4;
|
|
ext.ButtonRelease = 5;
|
|
ext.MotionNotify = 6;
|
|
|
|
ext.FakeInput = function( type, keycode, time, wid, x, y )
|
|
{
|
|
X.seq_num++;
|
|
X.pack_stream.pack('CCSCCxxLLxxxxxxxxssxxxxxxxx', [ext.majorOpcode, 2, 9, type, keycode, time, wid, x, y]);
|
|
X.pack_stream.flush();
|
|
}
|
|
|
|
callback(null, ext);
|
|
});
|
|
}
|
|
|