mirror of
https://github.com/danbulant/node-x11
synced 2026-06-24 17:21:47 +00:00
ChangePropery request
This commit is contained in:
parent
783ac4b416
commit
adb7de62bf
6 changed files with 77 additions and 10 deletions
|
|
@ -187,6 +187,20 @@ module.exports = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
ChangeProperty: [
|
||||||
|
// mode: 0 replace, 1 prepend, 2 append
|
||||||
|
// format: 8/16/32
|
||||||
|
function(mode, wid, name, type, units, data)
|
||||||
|
{
|
||||||
|
var padded4 = (data.length + 3) >> 2;
|
||||||
|
var pad = new Buffer( (padded4<<2) - data.length);
|
||||||
|
var format = 'CCSLLLCxxxLaa';
|
||||||
|
var requestLength = 6 + padded4;
|
||||||
|
var dataLenInFormatUnits = data.length / (units >> 3);
|
||||||
|
return [format, [18, mode, requestLength, wid, name, type, units, dataLenInFormatUnits, data, pad] ];
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
QueryPointer: [
|
QueryPointer: [
|
||||||
[ 'CxSL', [38, 2] ],
|
[ 'CxSL', [38, 2] ],
|
||||||
function(buf) {
|
function(buf) {
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,8 @@ UnpackStream.prototype.pack = function(format, arguments)
|
||||||
} else if (f == 'p') {
|
} else if (f == 'p') {
|
||||||
packetlength += xutil.padded_length(arguments[arg++].length);
|
packetlength += xutil.padded_length(arguments[arg++].length);
|
||||||
} else if (f == 'a') {
|
} else if (f == 'a') {
|
||||||
packetlength += arguments[arg++].length;
|
packetlength += arguments[arg].length;
|
||||||
|
arg++;
|
||||||
} else {
|
} else {
|
||||||
// this is a fixed-length format, get length from argument_length table
|
// this is a fixed-length format, get length from argument_length table
|
||||||
packetlength += argument_length[f];
|
packetlength += argument_length[f];
|
||||||
|
|
@ -228,9 +229,6 @@ UnpackStream.prototype.pack = function(format, arguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
var buf = new Buffer(packetlength);
|
var buf = new Buffer(packetlength);
|
||||||
for (var i=0; i < packetlength; ++i)
|
|
||||||
buf[i] = 255;
|
|
||||||
|
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
var arg = 0;
|
var arg = 0;
|
||||||
for (var i = 0; i < format.length; ++i)
|
for (var i = 0; i < format.length; ++i)
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ require('./unpackbuffer').addUnpack(Buffer);
|
||||||
|
|
||||||
var xerrors = require('./xerrors');
|
var xerrors = require('./xerrors');
|
||||||
var coreRequests = require('./corereqs');
|
var coreRequests = require('./corereqs');
|
||||||
var stdatoms = require('./corereqs');
|
var stdatoms = require('./stdatoms');
|
||||||
|
|
||||||
function XClient(stream)
|
function XClient(stream)
|
||||||
{
|
{
|
||||||
|
|
@ -120,9 +120,10 @@ XClient.prototype.importRequestsFromTemplates = function(target, reqs)
|
||||||
if (callback)
|
if (callback)
|
||||||
this.replies[this.seq_num] = [reqName, callback];
|
this.replies[this.seq_num] = [reqName, callback];
|
||||||
|
|
||||||
//console.log([format, requestArguments]);
|
|
||||||
client.pack_stream.pack(format, requestArguments);
|
client.pack_stream.pack(format, requestArguments);
|
||||||
|
var b = client.pack_stream.write_queue[0];
|
||||||
client.pack_stream.flush();
|
client.pack_stream.flush();
|
||||||
|
|
||||||
} else if (templateType == 'Array'){
|
} else if (templateType == 'Array'){
|
||||||
var format = reqTemplate[0];
|
var format = reqTemplate[0];
|
||||||
var requestArguments = [];
|
var requestArguments = [];
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
function padded_length(len)
|
function padded_length(len)
|
||||||
{
|
{
|
||||||
|
return ((len + 3) >> 2) << 2;
|
||||||
|
/*
|
||||||
var rem = len % 4;
|
var rem = len % 4;
|
||||||
var padded_length = len;
|
var pl = len;
|
||||||
if (rem)
|
if (rem)
|
||||||
padded_length = len + 4 - rem;
|
return len + 4 - rem;
|
||||||
return padded_length;
|
return len;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make it return buffer?
|
// TODO: make it return buffer?
|
||||||
|
|
|
||||||
23
test/changeprop.js
Normal file
23
test/changeprop.js
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
var x11 = require('../lib/x11');
|
||||||
|
|
||||||
|
var xclient = x11.createClient();
|
||||||
|
var PointerMotion = x11.eventMask.PointerMotion;
|
||||||
|
|
||||||
|
xclient.on('connect', function(display) {
|
||||||
|
var X = this;
|
||||||
|
var root = display.screen[0].root;
|
||||||
|
var wid = X.AllocID();
|
||||||
|
var white = display.screen[0].white_pixel;
|
||||||
|
var black = display.screen[0].black_pixel;
|
||||||
|
|
||||||
|
X.CreateWindow(wid, root, 10, 10, 400, 300, 1, 1, 0, { backgroundPixel: white, eventMask: PointerMotion });
|
||||||
|
X.MapWindow(wid);
|
||||||
|
|
||||||
|
// mode: 0 replace, 1 prepend, 2 append
|
||||||
|
// mode, wid, name, type, format, data
|
||||||
|
X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS');
|
||||||
|
|
||||||
|
setInterval(function() {
|
||||||
|
X.ChangeProperty(0, wid, xclient.atoms.WM_NAME, xclient.atoms.STRING, 8, 'Hello, NodeJS ' + new Date());
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
28
test/genstdatoms.js
Normal file
28
test/genstdatoms.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
var x11 = require('../lib/x11');
|
||||||
|
|
||||||
|
var xclient = x11.createClient();
|
||||||
|
var atomId = 1;
|
||||||
|
xclient.on('connect', function(display) {
|
||||||
|
var X = this;
|
||||||
|
function listAtoms()
|
||||||
|
{
|
||||||
|
function getAtom(a)
|
||||||
|
{
|
||||||
|
X.GetAtomName(a, function(str) {
|
||||||
|
if (a == 1)
|
||||||
|
console.log('module.exports = {')
|
||||||
|
if (a != 68)
|
||||||
|
console.log(' %s: %d,', str, a);
|
||||||
|
else
|
||||||
|
console.log(' %s: %d\n}', str, a);
|
||||||
|
listAtoms();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (atomId <= 68)
|
||||||
|
getAtom(atomId);
|
||||||
|
else
|
||||||
|
X.terminate();
|
||||||
|
atomId++;
|
||||||
|
}
|
||||||
|
listAtoms();
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue