mirror of
https://github.com/danbulant/node-x11
synced 2026-06-24 17:21:47 +00:00
SCREEN-SAVER extension
This commit is contained in:
parent
5d6bdee7de
commit
58e526d913
2 changed files with 136 additions and 0 deletions
28
examples/smoketest/sstest.js
Normal file
28
examples/smoketest/sstest.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
var x11 = require('../../lib/x11');
|
||||||
|
|
||||||
|
x11.createClient(function(display) {
|
||||||
|
var X = display.client;
|
||||||
|
var root = display.screen[0].root;
|
||||||
|
//X.ForceScreenSaver(0);
|
||||||
|
X.SetScreenSaver(20, 10, 2, 2);
|
||||||
|
|
||||||
|
|
||||||
|
X.require('screen-saver', function(SS) {
|
||||||
|
SS.SelectInput(root, SS.eventMask.Notify|SS.eventMask.Cycle);
|
||||||
|
//console.log(SS);
|
||||||
|
//setTimeout(function() {
|
||||||
|
// X.ForceScreenSaver(1);
|
||||||
|
//}, 5000);
|
||||||
|
setInterval(function() {
|
||||||
|
SS.QueryInfo(root, function(err, info) {
|
||||||
|
console.log(info.until);
|
||||||
|
//SS.SelectInput(root, SS.eventMask.Notify|SS.eventMask.Cycle);
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
X.on('event', function(ev) {
|
||||||
|
console.log(ev);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
X.on('error', function(err) { console.log(err); });
|
||||||
|
|
||||||
|
});
|
||||||
108
lib/x11/ext/screen-saver.js
Normal file
108
lib/x11/ext/screen-saver.js
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
// http://www.x.org/releases/X11R7.6/doc/scrnsaverproto/saver.pdf
|
||||||
|
|
||||||
|
var x11 = require('..');
|
||||||
|
// TODO: move to templates
|
||||||
|
|
||||||
|
exports.requireExt = function(display, callback)
|
||||||
|
{
|
||||||
|
var X = display.client;
|
||||||
|
X.QueryExtension('MIT-SCREEN-SAVER', function(err, ext) {
|
||||||
|
|
||||||
|
if (!ext.present)
|
||||||
|
return callback(new Error('extension not available'));
|
||||||
|
|
||||||
|
|
||||||
|
ext.QueryVersion = function(clientMaj, clientMin, cb)
|
||||||
|
{
|
||||||
|
X.seq_num++;
|
||||||
|
X.pack_stream.pack('CCSCCxx', [ext.majorOpcode, 0, 2, clientMaj, clientMin]);
|
||||||
|
X.replies[X.seq_num] = [
|
||||||
|
function(buf, opt) {
|
||||||
|
var res = buf.unpack('CC');
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
cb
|
||||||
|
];
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.State = {
|
||||||
|
Off: 0,
|
||||||
|
On: 1,
|
||||||
|
Disabled: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
ext.Kind = {
|
||||||
|
Blanked: 0,
|
||||||
|
Internal: 1,
|
||||||
|
External: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
ext.QueryInfo = function(drawable, callback)
|
||||||
|
{
|
||||||
|
X.seq_num++;
|
||||||
|
X.pack_stream.pack('CCSL', [ext.majorOpcode, 1, 2, drawable]);
|
||||||
|
X.replies[X.seq_num] = [
|
||||||
|
function(buf, opt) {
|
||||||
|
var info = {};
|
||||||
|
info.state = opt;
|
||||||
|
var res = buf.unpack('LLLLC');
|
||||||
|
info.window = res[0];
|
||||||
|
info.until = res[1];
|
||||||
|
info.idle = res[2];
|
||||||
|
info.eventMask = res[3];
|
||||||
|
info.kind = res[4]
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
callback
|
||||||
|
];
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.eventMask = {
|
||||||
|
Notify: 1,
|
||||||
|
Cycle: 2
|
||||||
|
};
|
||||||
|
|
||||||
|
ext.SelectInput = function( drawable, eventMask )
|
||||||
|
{
|
||||||
|
X.seq_num++;
|
||||||
|
console.log('CCSLL', [ext.majorOpcode, 2, 3, drawable, eventMask]);
|
||||||
|
X.pack_stream.pack('CCSLL', [ext.majorOpcode, 2, 3, drawable, eventMask]);
|
||||||
|
X.pack_stream.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.QueryVersion(1, 1, function(err, vers) {
|
||||||
|
|
||||||
|
ext.major = vers[0];
|
||||||
|
ext.minor = vers[1];
|
||||||
|
callback(ext);
|
||||||
|
});
|
||||||
|
|
||||||
|
ext.events = {
|
||||||
|
ScreenSaverNotify: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.NotifyState = {
|
||||||
|
Off: 0,
|
||||||
|
On: 1,
|
||||||
|
Cycle: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
X.eventParsers[ext.firstEvent + ext.events.ScreenSaverNotify] = function(type, seq, extra, code, raw)
|
||||||
|
{
|
||||||
|
var event = {};
|
||||||
|
event.state = code;
|
||||||
|
event.seq = seq;
|
||||||
|
event.time = extra;
|
||||||
|
// CCSL = type, code, seq, extra
|
||||||
|
var values = raw.unpack('LLCC');
|
||||||
|
event.root = values[0];
|
||||||
|
event.saverWindow = values[1];
|
||||||
|
event.kind = values[2];
|
||||||
|
event.forced = values[1];
|
||||||
|
event.name = 'ScreenSaverNotify';
|
||||||
|
return event;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue