UNPKG

rkeys

Version:

A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11

80 lines (79 loc) 2.32 kB
// 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);