rkeys
Version:
A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11
80 lines (79 loc) • 2.32 kB
JavaScript
// Generated by LiveScript 1.3.0
(function(){
var Evem, Util, X11, Root, X, me;
Evem = require('events').EventEmitter;
Util = require('util');
X11 = require('x11');
Root = require('./helper').root;
X = require('./helper').x;
module.exports = me = import$(clone$(new Evem()), {
init: function(cb){
me.removeAllListeners();
return X.InternAtom(false, '_NET_ACTIVE_WINDOW', function(xerr){
if (xerr) {
return cb(wrapXerr("x.InternAtom _NET_ACTIVE_WINDOW failed", xerr));
}
X.ChangeWindowAttributes(Root, {
eventMask: X11.eventMask.PropertyChange
});
X.on('event', function(it){
if (it.atom !== X.atoms._NET_ACTIVE_WINDOW) {
return;
}
return getActiveWindowState(function(err, s){
if (err) {
return log(err);
}
if (s == null) {
return;
}
if (s.wid === me.current.wid) {
return;
}
me.current = s;
log2("active-window=" + Util.inspect(s));
return me.emit('changed');
});
});
return getActiveWindowState(cb);
});
},
current: {
title: '',
wid: 0
}
});
function getActiveWindowState(cb){
return X.GetProperty(0, Root, X.atoms._NET_ACTIVE_WINDOW, 0, 0, 10000000, function(xerr, p){
var wid;
if (xerr) {
return cb(wrapXerr("X.GetProperty _NET_ACTIVE_WINDOW failed", xerr));
}
if (!(wid = p.data.readUInt32LE(0))) {
return cb();
}
return X.GetProperty(0, wid, X.atoms.WM_NAME, 0, 0, 10000000, function(xerr, p){
if (xerr) {
return cb(wrapXerr("X.GetProperty WM_NAME failed (wid=" + wid + ")", xerr));
}
return cb(null, {
title: p.data.toString(),
wid: wid
});
});
});
}
function wrapXerr(msg, xerr){
var ref$;
return ref$ = clone$(new Error(msg + ". " + xerr.message)), ref$.xerr = xerr, ref$;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
function clone$(it){
function fun(){} fun.prototype = it;
return new fun;
}
}).call(this);