From 10d19a4595ca6b01ac196aa078d936533cfce9d5 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:03:42 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/x11/core/ext/xtest.js | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 js/x11/core/ext/xtest.js 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); + }); +} +