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);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |