From e5be17ac46a7021524a4456be1894bdbdbb7ef20 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Tue, 9 Dec 2014 10:31:34 +0100 Subject: [PATCH 1/4] src: fix CreateWindow attributes encoding - Every attribute must have 4 byte length. - Add test. --- lib/corereqs.js | 10 +++++----- test/core-CreateWindow.js | 9 +++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/corereqs.js b/lib/corereqs.js index ca6697b..13f224d 100644 --- a/lib/corereqs.js +++ b/lib/corereqs.js @@ -24,15 +24,15 @@ var valueMask = { }, bitGravity : { mask: 0x00000010, - format: 'C' + format: 'Cxxx' }, winGravity : { mask: 0x00000020, - format: 'C' + format: 'Cxxx' }, backingStore : { mask: 0x00000040, - format: 'C' + format: 'Cxxx' }, backingPlanes : { mask: 0x00000080, @@ -44,11 +44,11 @@ var valueMask = { }, overrideRedirect : { mask: 0x00000200, - format: 'C' + format: 'Cxxx' }, saveUnder : { mask: 0x00000400, - format: 'C' + format: 'Cxxx' }, eventMask : { mask: 0x00000800, diff --git a/test/core-CreateWindow.js b/test/core-CreateWindow.js index 1cbc04e..11aa147 100644 --- a/test/core-CreateWindow.js +++ b/test/core-CreateWindow.js @@ -48,4 +48,13 @@ describe('CreateWindow request', function() { }); }); + it('should work with any kind of attributes too', function(done) { + var wid = X.AllocID(); + X.CreateWindow(wid, display.screen[0].root, 0, 0, 1, 1, 0, 0, 0, 0, { overrideRedirect : true }); // 1x1 pixel window + X.QueryTree(display.screen[0].root, function(err, list) { + should.not.exist(err); + list.children.should.containEql(wid); + done(); + }); + }); }); From 28e934348784f1cf1f3da61ff53fbe5a5aa67974 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Tue, 9 Dec 2014 10:32:39 +0100 Subject: [PATCH 2/4] src: fix CreateGC attributes encoding - Every attribute must have 4 byte length. - Add test. --- lib/corereqs.js | 32 ++++++++++++++++---------------- test/createGC.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 test/createGC.js diff --git a/lib/corereqs.js b/lib/corereqs.js index 13f224d..eeccf11 100644 --- a/lib/corereqs.js +++ b/lib/corereqs.js @@ -70,7 +70,7 @@ var valueMask = { CreateGC: { 'function' : { // TODO: alias? _function? mask: 0x00000001, - format: 'C' + format: 'Cxxx' }, planeMask : { mask: 0x00000002, @@ -86,27 +86,27 @@ var valueMask = { }, lineWidth : { mask: 0x00000010, - format: 'S' + format: 'Sxx' }, lineStyle : { mask: 0x00000020, - format: 'C' + format: 'Cxxx' }, capStyle : { mask: 0x00000040, - format: 'C' + format: 'Cxxx' }, joinStyle : { mask: 0x00000080, - format: 'C' + format: 'Cxxx' }, fillStyle : { mask: 0x00000100, - format: 'C' + format: 'Cxxx' }, fillRule : { mask: 0x00000200, - format: 'C' + format: 'Cxxx' }, tile : { mask: 0x00000400, @@ -118,11 +118,11 @@ var valueMask = { }, tileStippleXOrigin : { mask: 0x00001000, - format: 's' + format: 'sxx' }, tileStippleYOrigin : { mask: 0x00002000, - format: 's' + format: 'sxx' }, font : { mask: 0x00004000, @@ -130,19 +130,19 @@ var valueMask = { }, subwindowMode : { mask: 0x00008000, - format: 'C' + format: 'Cxxx' }, graphicsExposures : { mask: 0x00010000, - format: 'C' + format: 'Cxxx' }, clipXOrigin : { mask: 0x00020000, - format: 'S' + format: 'Sxx' }, clipYOrigin : { mask: 0x00040000, - format: 'S' + format: 'Sxx' }, clipMask : { mask: 0x00080000, @@ -150,15 +150,15 @@ var valueMask = { }, dashOffset : { mask: 0x00100000, - format: 'S' + format: 'Sxx' }, dashes : { mask: 0x00200000, - format: 'C' + format: 'Cxxx' }, arcMode : { mask: 0x00400000, - format: 'C' + format: 'Cxxx' } }, ConfigureWindow: { diff --git a/test/createGC.js b/test/createGC.js new file mode 100644 index 0000000..4762671 --- /dev/null +++ b/test/createGC.js @@ -0,0 +1,46 @@ +var x11 = require('../lib'); +var should = require('should'); + +describe('CreateGC', function() { + before(function(done) { + var self = this; + this.client = x11.createClient(function(err, dpy) { + should.not.exist(err); + self.X = dpy.client; + self.root = dpy.screen[0].root; + self.white = dpy.screen[0].white_pixel; + self.black = dpy.screen[0].black_pixel; + self.wid = self.X.AllocID(); + self.X.CreateWindow(self.wid, self.root, 0, 0, 1, 1); // 1x1 pixel window + self.X.MapWindow(self.wid); + self.X.QueryTree(self.root, function(err, list) { + should.not.exist(err); + list.children.indexOf(self.wid).should.not.equal(-1); + done(); + }); + }); + }); + + it('should create a Graphic Context correctly', function() { + var self = this; + this.client.on('error', function(err) { + should.not.exist(err); + }); + + this.gc = this.X.AllocID(); + this.X.CreateGC(this.gc, + this.wid, + { + foreground: this.black, + background: this.white, + lineStyle : 0 + } + ); + }); + + after(function(done) { + this.X.DestroyWindow(this.wid); + this.X.on('end', done); + this.X.terminate(); + }); +}); From ca5bcb7df4fe685e850615f4fb0ce572aadd590d Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Tue, 9 Dec 2014 10:34:49 +0100 Subject: [PATCH 3/4] test: clean configure-request test --- test/configure-request.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/configure-request.js b/test/configure-request.js index 8715e57..77e952d 100644 --- a/test/configure-request.js +++ b/test/configure-request.js @@ -9,7 +9,6 @@ describe('ConfigureRequest', function() { self.X = dpy.client; self.root = dpy.screen[0].root; self.wid = self.X.AllocID(); - self.wid_helper = self.X.AllocID(); /* self.X acts like a WM */ self.X.ChangeWindowAttributes(self.root, { eventMask: x11.eventMask.SubstructureRedirect }); self.X.CreateWindow(self.wid, self.root, 0, 0, 1, 1); // 1x1 pixel window @@ -30,7 +29,6 @@ describe('ConfigureRequest', function() { var client = x11.createClient(function(err, dpy) { should.not.exist(err); self.X.once('event', function(ev) { - console.log(ev); ev.name.should.equal('ConfigureRequest'); ev.x.should.equal(0); ev.y.should.equal(20); From 5712dfd4c9d7651af9089fc3c3ec294b6b7a6ad2 Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Tue, 9 Dec 2014 16:15:03 +0100 Subject: [PATCH 4/4] src: maskList.sort @ packValueMask must be numeric --- lib/corereqs.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/corereqs.js b/lib/corereqs.js index eeccf11..57fca8d 100644 --- a/lib/corereqs.js +++ b/lib/corereqs.js @@ -221,7 +221,12 @@ function packValueMask(reqname, values) masksList.push(valueBit); bitmask |= valueBit; } - masksList.sort(); + + /* numeric sort */ + masksList.sort(function(a, b) { + return a - b; + }); + var args = []; for (m in masksList) {