Merge pull request #70 from Champii/master

CreateCursor, valueMask and format
This commit is contained in:
Andrey Sidorov 2014-09-24 08:46:14 +10:00
commit 3e3846d6e6
42 changed files with 500 additions and 412 deletions

View file

@ -26,9 +26,9 @@ var kk2name = {};
x11.createClient(function(err, display) x11.createClient(function(err, display)
{ {
var X = display.client; var X = display.client;
X.require('big-requests', function(BigReq) X.require('big-requests', function(err, BigReq)
{ {
X.require('render', function(Render) { X.require('render', function(err, Render) {
X.Render = Render; X.Render = Render;
BigReq.Enable(function(err, maxLen) BigReq.Enable(function(err, maxLen)
{ {

View file

@ -294,7 +294,7 @@ x11.createClient(function(error, display) {
var root = display.screen[0].root; var root = display.screen[0].root;
var width = 500; var width = 500;
var height = 500; var height = 500;
X.require('glx', function(GLX) { X.require('glx', function(err, GLX) {
var depth = 24; var depth = 24;
findBestVisual(display, function(err, visual) { findBestVisual(display, function(err, visual) {

View file

@ -13,7 +13,7 @@ var listId = 1;
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('glx', function(GLX) { X.require('glx', function(err, GLX) {
var visual = 0; var visual = 0;
var visuals = display.screen[0].depths[24]; var visuals = display.screen[0].depths[24];
for (visual in visuals) { for (visual in visuals) {

View file

@ -304,7 +304,7 @@ x11.createClient(function(err, display) {
var root = display.screen[0].root; var root = display.screen[0].root;
var width = 1000; var width = 1000;
var height = 1000; var height = 1000;
X.require('glx', function(GLX) { X.require('glx', function(err, GLX) {
var visual = 0xa1; var visual = 0xa1;
var win = X.AllocID(); var win = X.AllocID();
X.CreateWindow(win, root, 0, 0, width, height, 0, 0, 0, 0, { eventMask: eventmask }); X.CreateWindow(win, root, 0, 0, width, height, 0, 0, 0, 0, { eventMask: eventmask });

View file

@ -8,7 +8,7 @@ for(var i=0; i < 20000; ++i) {
var xclient = x11.createClient(function(err, display) { var xclient = x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('glx', function(GLX) { X.require('glx', function(err, GLX) {
var screen = 0; var screen = 0;
var isDirect = 0; var isDirect = 0;
var ctx = X.AllocID(); var ctx = X.AllocID();

View file

@ -10,7 +10,7 @@ var gradNo = 0;
var xclient = x11.createClient(function(err, display) { var xclient = x11.createClient(function(err, display) {
X = display.client; X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('render', function(rendExt) { X.require('render', function(err, rendExt) {
Render = rendExt; Render = rendExt;
var wid = X.AllocID(); var wid = X.AllocID();

View file

@ -7,7 +7,7 @@ var Exposure = x11.eventMask.Exposure;
x11.createClient(function(err, display) x11.createClient(function(err, display)
{ {
var X = display.client; var X = display.client;
X.require('render', function(Render) { X.require('render', function(err, Render) {
var root = display.screen[0].root; var root = display.screen[0].root;
main(root, X, Render); main(root, X, Render);
}); });

View file

@ -9,7 +9,7 @@ var x11 = require('../../lib');
x11.createClient( x11.createClient(
function(err, display) { function(err, display) {
var X = display.client; var X = display.client;
X.require('render', function(Render) { X.require('render', function(err, Render) {
var root = display.screen[0].root; var root = display.screen[0].root;
var win = X.AllocID(); var win = X.AllocID();

View file

@ -4,7 +4,7 @@ var PointerMotion = x11.eventMask.PointerMotion;
var xclient = x11.createClient(function(err, display) { var xclient = x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
display.client.require('render', function(Render) { display.client.require('render', function(err, Render) {
var wid = X.AllocID(); var wid = X.AllocID();
var white = display.screen[0].white_pixel; var white = display.screen[0].white_pixel;
varblack = display.screen[0].black_pixel; varblack = display.screen[0].black_pixel;

View file

@ -39,7 +39,7 @@ function padWidth(buf, width) {
var xclient = x11.createClient({ debug: true }, function(err, display) { var xclient = x11.createClient({ debug: true }, function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
display.client.require('render', function(Render) { display.client.require('render', function(err, Render) {
var wid = X.AllocID(); var wid = X.AllocID();
var white = display.screen[0].white_pixel; var white = display.screen[0].white_pixel;
varblack = display.screen[0].black_pixel; varblack = display.screen[0].black_pixel;

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('apple-wm', function(AppleWM) { X.require('apple-wm', function(err, AppleWM) {
//AppleWM.SetFrontProcess(); //AppleWM.SetFrontProcess();
//AppleWM.CanQuit(true); //AppleWM.CanQuit(true);
AppleWM.SelectInput(AppleWM.NotifyMask.All) AppleWM.SelectInput(AppleWM.NotifyMask.All)

View file

@ -3,8 +3,8 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('composite', function(Composite) { X.require('composite', function(err, Composite) {
X.require('damage', function(Damage) { X.require('damage', function(err, Damage) {
var wid = parseInt(process.argv[2]); var wid = parseInt(process.argv[2]);
//Composite.GetOverlayWindow(wid, function(err, overlayid) { //Composite.GetOverlayWindow(wid, function(err, overlayid) {
// console.log("OVERLAY:", err, overlayid); // console.log("OVERLAY:", err, overlayid);

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('damage', function(Damage) { X.require('damage', function(err, Damage) {
console.log(Damage); console.log(Damage);
var id = parseInt(process.argv[2]); var id = parseInt(process.argv[2]);
var damage = X.AllocID(); var damage = X.AllocID();

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('fixes', function(Fixes) { X.require('fixes', function(err, Fixes) {
console.log(Fixes); console.log(Fixes);
var win = X.AllocID(); var win = X.AllocID();
X.CreateWindow(win, root, 0, 0, 100, 100); X.CreateWindow(win, root, 0, 0, 100, 100);

View file

@ -23,7 +23,7 @@ x11.createClient(function(err, display) {
if (err) throw err; if (err) throw err;
var X = display.client; var X = display.client;
X.require('render', function(Render) { X.require('render', function(err, Render) {
var root = display.screen[0].root; var root = display.screen[0].root;
var white = display.screen[0].white_pixel; var white = display.screen[0].white_pixel;

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('randr', function(Randr) { X.require('randr', function(err, Randr) {
//console.log(Randr); //console.log(Randr);
//Randr.QueryVersion(1, 4, console.log); //Randr.QueryVersion(1, 4, console.log);
Randr.SelectInput(root, Randr.NotifyMask.ScreenChange); Randr.SelectInput(root, Randr.NotifyMask.ScreenChange);

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('shape', function(Shape) { X.require('shape', function(err, Shape) {
var win = X.AllocID(); var win = X.AllocID();
X.CreateWindow(win, root, 0, 0, 200, 200); X.CreateWindow(win, root, 0, 0, 200, 200);
var gc = X.AllocID(); var gc = X.AllocID();

View file

@ -7,7 +7,7 @@ x11.createClient(function(err, display) {
X.SetScreenSaver(20, 10, 2, 2); X.SetScreenSaver(20, 10, 2, 2);
X.require('screen-saver', function(SS) { X.require('screen-saver', function(err, SS) {
SS.SelectInput(root, SS.eventMask.Notify|SS.eventMask.Cycle); SS.SelectInput(root, SS.eventMask.Notify|SS.eventMask.Cycle);
//console.log(SS); //console.log(SS);
//setTimeout(function() { //setTimeout(function() {

View file

@ -31,7 +31,7 @@ x11.createClient(function(err, display) {
X.MapWindow(wid); X.MapWindow(wid);
var gc = X.AllocID(); var gc = X.AllocID();
X.require('render', function(Render) { X.require('render', function(err, Render) {
var pict = X.AllocID(); var pict = X.AllocID();
Render.CreatePicture(pict, wid, Render.rgba32); Render.CreatePicture(pict, wid, Render.rgba32);

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
X.require('xc-misc', function(Misc) { X.require('xc-misc', function(err, Misc) {
var xid = X.AllocID(); var xid = X.AllocID();
console.log("first ID from connection: " + xid); console.log("first ID from connection: " + xid);
debugger; debugger;

View file

@ -3,7 +3,7 @@ var x11 = require('../../lib');
var xclient = x11.createClient(function(err, display) { var xclient = x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
var root = display.screen[0].root; var root = display.screen[0].root;
display.client.require('xtest', function(Test) { display.client.require('xtest', function(err, Test) {
console.log(Test); console.log(Test);
setInterval(function() { setInterval(function() {
Test.FakeInput(Test.KeyPress, 65, 0, root, 0, 0); // space Test.FakeInput(Test.KeyPress, 65, 0, root, 0, 0); // space

View file

@ -31,7 +31,7 @@ var KeyRelease = x11.eventMask.KeyRelease;
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
var X = display.client; var X = display.client;
X.require('big-requests', function(BigReq) { X.require('big-requests', function(err, BigReq) {
BigReq.Enable(function(err, maxLen) { BigReq.Enable(function(err, maxLen) {
var keycode2keysym = []; var keycode2keysym = [];
var min = display.min_keycode; var min = display.min_keycode;

View file

@ -80,7 +80,7 @@ function ManageWindow(wid)
x11.createClient(function(err, display) { x11.createClient(function(err, display) {
X = display.client; X = display.client;
X.require('render', function(Render) { X.require('render', function(err, Render) {
X.Render = Render; X.Render = Render;
root = display.screen[0].root; root = display.screen[0].root;

View file

@ -6,70 +6,207 @@ var hexy = require('./hexy').hexy;
var valueMask = { var valueMask = {
CreateWindow: { CreateWindow: {
backgroundPixmap: 0x00000001, backgroundPixmap : {
backgroundPixel : 0x00000002, mask: 0x00000001,
borderPixmap : 0x00000004, format: 'L'
borderPixel : 0x00000008, },
bitGravity : 0x00000010, backgroundPixel : {
winGravity : 0x00000020, mask: 0x00000002,
backingStore : 0x00000040, format: 'L'
backingPlanes : 0x00000080, },
backingPixel : 0x00000100, borderPixmap : {
overrideRedirect: 0x00000200, mask: 0x00000004,
saveUnder : 0x00000400, format: 'L'
eventMask : 0x00000800, },
doNotPropagateMask: 0x00001000, borderPixel : {
colormap : 0x00002000, mask: 0x00000008,
cursor : 0x00004000 format: 'L'
},
bitGravity : {
mask: 0x00000010,
format: 'C'
},
winGravity : {
mask: 0x00000020,
format: 'C'
},
backingStore : {
mask: 0x00000040,
format: 'C'
},
backingPlanes : {
mask: 0x00000080,
format: 'L'
},
backingPixel : {
mask: 0x00000100,
format: 'L'
},
overrideRedirect : {
mask: 0x00000200,
format: 'C'
},
saveUnder : {
mask: 0x00000400,
format: 'C'
},
eventMask : {
mask: 0x00000800,
format: 'L'
},
doNotPropagateMask : {
mask: 0x00001000,
format: 'L'
},
colormap : {
mask: 0x00002000,
format: 'L'
},
cursor : {
mask: 0x00004000,
format: 'L'
}
}, },
CreateGC: { CreateGC: {
'function' : 0x00000001, // TODO: alias? _function? 'function' : { // TODO: alias? _function?
planeMask : 0x00000002, mask: 0x00000001,
foreground : 0x00000004, format: 'C'
background : 0x00000008, },
lineWidth : 0x00000010, planeMask : {
lineStyle : 0x00000020, mask: 0x00000002,
capStyle : 0x00000040, format: 'L'
joinStyle : 0x00000080, },
fillStyle : 0x00000100, foreground : {
fillRule : 0x00000200, mask: 0x00000004,
tile : 0x00000400, format: 'L'
stipple : 0x00000800, },
tileStippleXOrigin: 0x00001000, background : {
tileStippleYOrigin: 0x00002000, mask: 0x00000008,
font : 0x00004000, format: 'L'
subwindowMode: 0x00008000, },
graphicsExposures: 0x00010000, lineWidth : {
clipXOrigin : 0x00020000, mask: 0x00000010,
clipYOrigin : 0x00040000, format: 'S'
clipMask : 0x00080000, },
dashOffset : 0x00100000, lineStyle : {
dashes : 0x00200000, mask: 0x00000020,
arcMode : 0x00400000 format: 'C'
},
capStyle : {
mask: 0x00000040,
format: 'C'
},
joinStyle : {
mask: 0x00000080,
format: 'C'
},
fillStyle : {
mask: 0x00000100,
format: 'C'
},
fillRule : {
mask: 0x00000200,
format: 'C'
},
tile : {
mask: 0x00000400,
format: 'L'
},
stipple : {
mask: 0x00000800,
format: 'L'
},
tileStippleXOrigin : {
mask: 0x00001000,
format: 's'
},
tileStippleYOrigin : {
mask: 0x00002000,
format: 's'
},
font : {
mask: 0x00004000,
format: 'L'
},
subwindowMode : {
mask: 0x00008000,
format: 'C'
},
graphicsExposures : {
mask: 0x00010000,
format: 'C'
},
clipXOrigin : {
mask: 0x00020000,
format: 'S'
},
clipYOrigin : {
mask: 0x00040000,
format: 'S'
},
clipMask : {
mask: 0x00080000,
format: 'L'
},
dashOffset : {
mask: 0x00100000,
format: 'S'
},
dashes : {
mask: 0x00200000,
format: 'C'
},
arcMode : {
mask: 0x00400000,
format: 'C'
}
}, },
ConfigureWindow: { ConfigureWindow: {
x: 0x000001, x : {
y: 0x000002, mask: 0x000001,
width: 0x000004, format: 'sxx'
height: 0x000008, },
borderWidth: 0x000010, y : {
sibling: 0x000020, mask: 0x000002,
stackMode: 0x000040 format: 'sxx'
},
width : {
mask: 0x000004,
format: 'Sxx'
},
height : {
mask: 0x000008,
format: 'Sxx'
},
borderWidth : {
mask: 0x000010,
format: 'Sxx'
},
sibling : {
mask: 0x000020,
format: 'L'
},
stackMode : {
mask: 0x000040,
format: 'Cxxx'
}
} }
}; };
var valueMaskName = {}; var valueMaskName = {};
for (var req in valueMask) { for (var req in valueMask) {
var masks = valueMask[req]; var masks = valueMask[req];
var names = valueMaskName[req] = {}; var names = valueMaskName[req] = {};
for (var m in masks) for (var m in masks)
names[masks[m]] = m; names[masks[m].mask] = m;
} }
function packValueMask(reqname, values) function packValueMask(reqname, values)
{ {
var bitmask = 0; var bitmask = 0;
var masksList = []; var masksList = [];
var format = '';
var reqValueMask = valueMask[reqname]; var reqValueMask = valueMask[reqname];
var reqValueMaskName = valueMaskName[reqname]; var reqValueMaskName = valueMaskName[reqname];
@ -78,7 +215,7 @@ function packValueMask(reqname, values)
for (var v in values) for (var v in values)
{ {
var valueBit = reqValueMask[v]; var valueBit = reqValueMask[v].mask;
if (!valueBit) if (!valueBit)
throw new Error(reqname + ': incorrect value param ' + v); throw new Error(reqname + ': incorrect value param ' + v);
masksList.push(valueBit); masksList.push(valueBit);
@ -89,9 +226,10 @@ function packValueMask(reqname, values)
for (m in masksList) for (m in masksList)
{ {
var valueName = reqValueMaskName[masksList[m]]; var valueName = reqValueMaskName[masksList[m]];
format += reqValueMask[valueName].format
args.push( values[valueName] ); args.push( values[valueName] );
} }
return [bitmask, args] return [format, bitmask, args]
} }
/* /*
@ -132,45 +270,21 @@ var templates = {
if (values === undefined) if (values === undefined)
values = {} values = {}
var packetLength = 8 + (values ? Object.keys(values).length : 0);
var format = 'CCSLLssSSSSLL'; var format = 'CCSLLssSSSSLL';
// create bitmask
var bitmask = 0;
// TODO: slice from function arguments? // TODO: slice from function arguments?
var args = [1, depth, packetLength, id, parentId, x, y, width, height, borderWidth, _class, visual];
// TODO: the code is a little bit mess // TODO: the code is a little bit mess
// additional values need to be packed in the following way: // additional values need to be packed in the following way:
// bitmask (bytes #24 to #31 in the packet) - 32 bit indicating what adittional arguments we supply // bitmask (bytes #24 to #31 in the packet) - 32 bit indicating what adittional arguments we supply
// values list (bytes #32 .. #32+4*num_values) in order of corresponding bits TODO: it's actually not 4*num. Some values are 4b ytes, some - 1 byte // values list (bytes #32 .. #32+4*num_values) in order of corresponding bits TODO: it's actually not 4*num. Some values are 4b ytes, some - 1 byte
var vals = packValueMask('CreateWindow', values);
// TODO: replace with packValueMask var packetLength = 8 + (values ? vals[2].length : 0);
var masksList = []; var args = [1, depth, packetLength, id, parentId, x, y, width, height, borderWidth, _class, visual];
for (var v in values) format += vals[0];
{ args.push(vals[1]);
var valueBit = valueMask['CreateWindow'][v]; args = args.concat(vals[2]);
if (!valueBit)
{
throw new Error('CreateWindow: incorrect value param ' + v);
}
masksList.push(valueBit);
bitmask |= valueBit;
format += 'L'; // TODO: not all values are 4 bytes CARD32!!!
}
// values packed in order of corresponding bit
masksList.sort();
// set bits to indicate additional values we are sending in this request
args.push(bitmask);
// add values in the order of the bits
// TODO: maybe it's better just to scan all 32 bits anstead of sorting parameters we are actually have?
for (var m in masksList)
{
var valueName = valueMaskName['CreateWindow'][masksList[m]];
args.push( values[valueName] );
}
return [format, args]; return [format, args];
} }
@ -178,16 +292,13 @@ var templates = {
ChangeWindowAttributes:[ ChangeWindowAttributes:[
function(wid, values) { function(wid, values) {
var format = 'CxSLL'; var format = 'CxSLSxx';
var packetLength = 3 + (values ? Object.keys(values).length : 0);
var vals = packValueMask('CreateWindow', values); var vals = packValueMask('CreateWindow', values);
var args = [2, packetLength, wid, vals[0]]; var packetLength = 3 + (values ? vals[2].length : 0);
var valArr = vals[1]; var args = [2, packetLength, wid, vals[1]];
for (var v in valArr) var valArr = vals[2];
{ format += vals[0];
format += 'L'; args = args.concat(valArr);
args.push(valArr[v]);
}
return [format, args]; return [format, args];
} }
], ],
@ -248,60 +359,11 @@ var templates = {
* } * }
*/ */
function(win, options) { function(win, options) {
var format = 'CxSLSxx'; var vals = packValueMask('ConfigureWindow', options);
var n = 3; var format = 'CxSLSxx' + vals[0];
var mask = 0; var args = [12, vals[2].length + 3, win, vals[1]];
var params = []; args = args.concat(vals[2]);
if (options.x !== undefined) { return [format, args];
mask |= valueMask.ConfigureWindow.x;
format += 'sxx';
params.push(options.x);
++ n;
}
if (options.y !== undefined) {
mask |= valueMask.ConfigureWindow.y;
format += 'sxx';
params.push(options.y);
++ n;
}
if (options.width !== undefined) {
mask |= valueMask.ConfigureWindow.width;
format += 'Sxx';
params.push(options.width);
++ n;
}
if (options.height !== undefined) {
mask |= valueMask.ConfigureWindow.height;
format += 'Sxx';
params.push(options.height);
++ n;
}
if (options.borderWidth !== undefined) {
mask |= valueMask.ConfigureWindow.borderWidth;
format += 'Sxx';
params.push(options.borderWidth);
++ n;
}
if (options.sibling !== undefined) {
mask |= valueMask.ConfigureWindow.sibling;
format += 'L';
params.push(options.sibling);
++ n;
}
if (options.stackMode !== undefined) {
mask |= valueMask.ConfigureWindow.stackMode;
format += 'Cxxx';
params.push(options.stackMode);
++ n;
}
return [format, [12, n, win, mask].concat(params)];
} }
], ],
@ -651,19 +713,35 @@ var templates = {
} }
], ],
FreePixmap: [
function (pixmap) {
return [ 'CxSL', [54, 2, pixmap] ];
}
],
CreateCursor: [
function(cid, source, mask, foreRGB, backRGB, x, y) {
foreR = foreRGB.R
foreG = foreRGB.G
foreB = foreRGB.B
backR = backRGB.R
backG = backRGB.G
backB = backRGB.B
return [ 'CxSLLLSSSSSSSS', [93, 8, cid, source, mask, foreR, foreG, foreB, backR, backG, backB, x, y] ];
}
],
// opcode 55
CreateGC: [ CreateGC: [
function(cid, drawable, values) { function(cid, drawable, values) {
var format = 'CxSLLL'; var format = 'CxSLLL';
var packetLength = 4 + (values ? Object.keys(values).length : 0);
var args = [55, packetLength, cid, drawable];
var vals = packValueMask('CreateGC', values); var vals = packValueMask('CreateGC', values);
args.push(vals[0]); // values bitmask var packetLength = 4 + (values ? vals[2].length : 0);
var valArr = vals[1]; var args = [55, packetLength, cid, drawable];
for (var v in valArr) format += vals[0]
{ args.push(vals[1]); // values bitmask
format += 'L'; // TODO: we know format string length in advance and += inefficient for string args = args.concat(vals[2])
args.push(valArr[v]);
}
return [format, args]; return [format, args];
} }
], ],
@ -671,9 +749,9 @@ var templates = {
ChangeGC: [ ChangeGC: [
function(cid, values) { function(cid, values) {
var format = 'CxSLL'; var format = 'CxSLL';
var packetLength = 3 + (values ? Object.keys(values).length : 0);
var args = [56, packetLength, cid];
var vals = packValueMask('CreateGC', values); var vals = packValueMask('CreateGC', values);
var packetLength = 3 + (values ? vals[2].length : 0);
var args = [56, packetLength, cid];
args.push(vals[0]); // values bitmask args.push(vals[0]); // values bitmask
var valArr = vals[1]; var valArr = vals[1];
for (var v in valArr) for (var v in valArr)
@ -776,7 +854,7 @@ var templates = {
return { return {
depth: depth, depth: depth,
visualId: visualId, visualId: visualId,
data: buf.slice(20) data: buf.slice(24)
}; };
} }
], ],

View file

@ -209,13 +209,13 @@ exports.requireExt = function(display, callback)
X.pack_stream.flush(); X.pack_stream.flush();
} }
callback(ext); callback(null, ext);
/* /*
ext.QueryVersion(function(err, vers) { ext.QueryVersion(function(err, vers) {
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
ext.patch = vers[2]; ext.patch = vers[2];
callback(ext); callback(null, ext);
}); });
*/ */

View file

@ -21,6 +21,6 @@ exports.requireExt = function(display, callback)
]; ];
X.pack_stream.flush(); X.pack_stream.flush();
} }
callback(ext); callback(null, ext);
}); });
} }

View file

@ -106,9 +106,12 @@ exports.requireExt = function(display, callback)
// currently version 0.4 TODO: bump up with coordinate translations // currently version 0.4 TODO: bump up with coordinate translations
ext.QueryVersion(0, 4, function(err, vers) { ext.QueryVersion(0, 4, function(err, vers) {
if (err)
return callback(err);
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
callback(ext); callback(null, ext);
}); });
}); });
} }

View file

@ -61,9 +61,11 @@ exports.requireExt = function(display, callback)
} }
ext.QueryVersion(1, 1, function(err, vers) { ext.QueryVersion(1, 1, function(err, vers) {
if (err)
return callback(err);
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
callback(ext); callback(null, ext);
}); });
ext.events = { ext.events = {

View file

@ -94,7 +94,7 @@ exports.requireExt = function(display, callback)
X.pack_stream.flush(); X.pack_stream.flush();
}; };
callback(ext); callback(null, ext);
}); });
}; };

View file

@ -120,9 +120,11 @@ exports.requireExt = function(display, callback)
} }
ext.QueryVersion(5, 0, function(err, vers) { ext.QueryVersion(5, 0, function(err, vers) {
if (err)
return callback(err);
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
callback(ext); callback(null, ext);
}); });
ext.events = { ext.events = {

View file

@ -319,7 +319,7 @@ exports.requireExt = function(display, callback)
}; };
}); });
callback(ext); callback(null, ext);
}); });
} }

View file

@ -263,6 +263,6 @@ exports.requireExt = function(display, callback)
return event; return event;
}; };
callback(ext); callback(null, ext);
}); });
} }

View file

@ -530,6 +530,8 @@ exports.requireExt = function(display, callback)
// 11 - colormap or none // 11 - colormap or none
ext.QueryPictFormat(function(err, formats) { ext.QueryPictFormat(function(err, formats) {
if (err)
return callback(err);
for (var i=0; i < formats.formats.length; ++i) { for (var i=0; i < formats.formats.length; ++i) {
var f = formats.formats[i]; var f = formats.formats[i];
if (f[2] == 1 && f[10] == 1) if (f[2] == 1 && f[10] == 1)
@ -542,7 +544,7 @@ exports.requireExt = function(display, callback)
if (f[2] == 8 && f[10] == 255) if (f[2] == 8 && f[10] == 255)
ext.a8 = f[0]; ext.a8 = f[0];
} }
callback(ext); callback(null, ext);
}); });
[ [

View file

@ -73,10 +73,11 @@ exports.requireExt = function(display, callback)
} }
ext.QueryVersion(1, 1, function(err, vers) { ext.QueryVersion(1, 1, function(err, vers) {
if (err)
return callback(err);
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
callback(ext); callback(null, ext);
}); });
ext.events = { ext.events = {

View file

@ -78,13 +78,13 @@ exports.requireExt = function(display, callback)
X.pack_stream.flush(); X.pack_stream.flush();
} }
callback(ext); callback(null, ext);
/* /*
ext.QueryVersion(function(err, version) { ext.QueryVersion(function(err, version) {
ext.major = version[0]; ext.major = version[0];
ext.minor = version[1]; ext.minor = version[1];
callback(ext); callback(null, ext);
}); });
*/ */
}); });

View file

@ -60,9 +60,11 @@ exports.requireExt = function(display, callback)
} }
ext.QueryVersion(1, 1, function(err, vers) { ext.QueryVersion(1, 1, function(err, vers) {
if (err)
return callback(err);
ext.major = vers[0]; ext.major = vers[0];
ext.minor = vers[1]; ext.minor = vers[1];
callback(ext); callback(null, ext);
}); });
}); });
} }

View file

@ -39,7 +39,7 @@ exports.requireExt = function(display, callback)
X.pack_stream.flush(); X.pack_stream.flush();
} }
callback(ext); callback(null, ext);
}); });
} }

View file

@ -592,7 +592,9 @@ module.exports.createClient = function(options, initCb)
client.on('connect', function(display) { client.on('connect', function(display) {
// opt-in BigReq // opt-in BigReq
if (!options.disableBigRequests) { if (!options.disableBigRequests) {
client.require('big-requests', function(BigReq) { client.require('big-requests', function(err, BigReq) {
if (err)
return initCb(err)
BigReq.Enable(function(err, maxLen) { BigReq.Enable(function(err, maxLen) {
display.max_request_length = maxLen; display.max_request_length = maxLen;
cbCalled = true; cbCalled = true;

View file

@ -22,34 +22,35 @@ describe('ConfigureWindow', function() {
}); });
}); });
client.on('error', done); client.on('error', function (err) {
console.error('Error : ', err);
});
}); });
it('should ResizeWindow correctly to 200x300 pixels', function(done) { it('should ResizeWindow correctly to 200x300 pixels', function(done) {
var self = this; var self = this;
this.X.ResizeWindow(this.wid, 200, 300);
this.X.once('event', function(ev) { this.X.once('event', function(ev) {
ev.type.should.equal(22); /* ConfigureNotify */ ev.type.should.equal(22); /* ConfigureNotify */
ev.height.should.equal(300); ev.height.should.equal(300);
ev.width.should.equal(200); ev.width.should.equal(200);
done(); done();
}); });
this.X.ResizeWindow(this.wid, 200, 300);
}); });
it('should MoveWindow correctly to x: 100, y: 150 pixels', function(done) { it('should MoveWindow correctly to x: 100, y: 150 pixels', function(done) {
var self = this; var self = this;
this.X.MoveWindow(this.wid, 100, 150);
this.X.once('event', function(ev) { this.X.once('event', function(ev) {
ev.type.should.equal(22); /* ConfigureNotify */ ev.type.should.equal(22); /* ConfigureNotify */
ev.x.should.equal(100); ev.x.should.equal(100);
ev.y.should.equal(150); ev.y.should.equal(150);
done(); done();
}); });
this.X.MoveWindow(this.wid, 100, 150);
}); });
it('should MoveResizeWindow correctly to x: 200, y: 250 and 500x100 pixels', function(done) { it('should MoveResizeWindow correctly to x: 200, y: 250 and 500x100 pixels', function(done) {
var self = this; var self = this;
this.X.MoveResizeWindow(this.wid, 200, 250, 500, 100);
this.X.once('event', function(ev) { this.X.once('event', function(ev) {
ev.type.should.equal(22); /* ConfigureNotify */ ev.type.should.equal(22); /* ConfigureNotify */
ev.x.should.equal(200); ev.x.should.equal(200);
@ -58,22 +59,23 @@ describe('ConfigureWindow', function() {
ev.width.should.equal(500); ev.width.should.equal(500);
done(); done();
}); });
this.X.MoveResizeWindow(this.wid, 200, 250, 500, 100);
}); });
it('should RaiseWindow correctly', function(done) { it('should RaiseWindow correctly', function(done) {
var self = this; var self = this;
this.X.RaiseWindow(this.wid);
this.X.once('event', function(ev) { this.X.once('event', function(ev) {
ev.type.should.equal(22); /* ConfigureNotify */ ev.type.should.equal(22); /* ConfigureNotify */
ev.aboveSibling.should.equal(self.wid_helper); ev.aboveSibling.should.equal(self.wid_helper);
done(); done();
}); });
this.X.RaiseWindow(this.wid);
}); });
after(function(done) { after(function(done) {
this.X.DestroyWindow(this.wid); this.X.DestroyWindow(this.wid);
this.X.DestroyWindow(this.wid_helper); this.X.DestroyWindow(this.wid_helper);
this.X.terminate();
this.X.on('end', done); this.X.on('end', done);
this.X.terminate();
}); });
}); });

View file

@ -12,13 +12,10 @@ describe('DPMS extension', function() {
if (!err) { if (!err) {
display = dpy; display = dpy;
X = display.client; X = display.client;
X.require('dpms', function(ext) { X.require('dpms', function(err, ext) {
if (util.isError(ext)) { should.not.exist(err);
done(ext);
} else {
dpms = ext; dpms = ext;
done(); done();
}
}); });
} else { } else {
done(err); done(err);

View file

@ -11,8 +11,8 @@ describe('RANDR extension', function() {
self.X = dpy.client; self.X = dpy.client;
self.screen = dpy.screen[0]; self.screen = dpy.screen[0];
self.root = self.screen.root; self.root = self.screen.root;
self.X.require('randr', function(ext) { self.X.require('randr', function(err, ext) {
util.isError(ext).should.equal(false); err.should.equal(null);
self.randr = ext; self.randr = ext;
/* We HAVE to QueryVersion before using it. Otherwise it does not work as expected */ /* We HAVE to QueryVersion before using it. Otherwise it does not work as expected */
self.randr.QueryVersion(1, 2, done); self.randr.QueryVersion(1, 2, done);

View file

@ -12,13 +12,10 @@ describe('XTEST extension', function() {
if (!err) { if (!err) {
display = dpy; display = dpy;
X = display.client; X = display.client;
X.require('xtest', function(ext) { X.require('xtest', function(err, ext) {
if (util.isError(ext)) { should.not.exist(err);
done(ext);
} else {
xtest = ext; xtest = ext;
done(); done();
}
}); });
} else { } else {
done(err); done(err);