diff --git a/js/x11/core/ext/xtest.js b/js/x11/core/ext/xtest.js new file mode 100644 index 0000000..27bed60 --- /dev/null +++ b/js/x11/core/ext/xtest.js @@ -0,0 +1,45 @@ +// 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); + }); +} +