From 783ac4b4169a50187c8ea375baed383cdefdc554 Mon Sep 17 00:00:00 2001 From: sidorares Date: Thu, 21 Jul 2011 14:09:44 +1000 Subject: [PATCH] client.atoms - std atoms (hardcoded) + atoms cache --- lib/x11/stdatoms.js | 72 +++++++++++++++++++++++++++++++++++++++++++++ lib/x11/xcore.js | 32 ++++++++++---------- 2 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 lib/x11/stdatoms.js diff --git a/lib/x11/stdatoms.js b/lib/x11/stdatoms.js new file mode 100644 index 0000000..ffa5349 --- /dev/null +++ b/lib/x11/stdatoms.js @@ -0,0 +1,72 @@ +// pre-defined atoms. generated automatically with genstdatoms.js + +module.exports = { + PRIMARY: 1, + SECONDARY: 2, + ARC: 3, + ATOM: 4, + BITMAP: 5, + CARDINAL: 6, + COLORMAP: 7, + CURSOR: 8, + CUT_BUFFER0: 9, + CUT_BUFFER1: 10, + CUT_BUFFER2: 11, + CUT_BUFFER3: 12, + CUT_BUFFER4: 13, + CUT_BUFFER5: 14, + CUT_BUFFER6: 15, + CUT_BUFFER7: 16, + DRAWABLE: 17, + FONT: 18, + INTEGER: 19, + PIXMAP: 20, + POINT: 21, + RECTANGLE: 22, + RESOURCE_MANAGER: 23, + RGB_COLOR_MAP: 24, + RGB_BEST_MAP: 25, + RGB_BLUE_MAP: 26, + RGB_DEFAULT_MAP: 27, + RGB_GRAY_MAP: 28, + RGB_GREEN_MAP: 29, + RGB_RED_MAP: 30, + STRING: 31, + VISUALID: 32, + WINDOW: 33, + WM_COMMAND: 34, + WM_HINTS: 35, + WM_CLIENT_MACHINE: 36, + WM_ICON_NAME: 37, + WM_ICON_SIZE: 38, + WM_NAME: 39, + WM_NORMAL_HINTS: 40, + WM_SIZE_HINTS: 41, + WM_ZOOM_HINTS: 42, + MIN_SPACE: 43, + NORM_SPACE: 44, + MAX_SPACE: 45, + END_SPACE: 46, + SUPERSCRIPT_X: 47, + SUPERSCRIPT_Y: 48, + SUBSCRIPT_X: 49, + SUBSCRIPT_Y: 50, + UNDERLINE_POSITION: 51, + UNDERLINE_THICKNESS: 52, + STRIKEOUT_ASCENT: 53, + STRIKEOUT_DESCENT: 54, + ITALIC_ANGLE: 55, + X_HEIGHT: 56, + QUAD_WIDTH: 57, + WEIGHT: 58, + POINT_SIZE: 59, + RESOLUTION: 60, + COPYRIGHT: 61, + NOTICE: 62, + FONT_NAME: 63, + FAMILY_NAME: 64, + FULL_NAME: 65, + CAP_HEIGHT: 66, + WM_CLASS: 67, + WM_TRANSIENT_FOR: 68 +} \ No newline at end of file diff --git a/lib/x11/xcore.js b/lib/x11/xcore.js index f016453..e62ddc3 100644 --- a/lib/x11/xcore.js +++ b/lib/x11/xcore.js @@ -15,6 +15,7 @@ require('./unpackbuffer').addUnpack(Buffer); var xerrors = require('./xerrors'); var coreRequests = require('./corereqs'); +var stdatoms = require('./corereqs'); function XClient(stream) { @@ -50,30 +51,31 @@ function XClient(stream) this.seq_num = 0; // incremented in each request. (even if we don't expect reply) // in/out packets indexed by sequence ID - this.requests = {}; + //this.requests = {}; this.replies = {}; - this.events = {}; - + //this.events = {}; + this.atoms = stdatoms; + this.event_consumers = {}; // maps window id to eventemitter TODO: bad name this.importRequestsFromTemplates(this, coreRequests); - this.startHandshake(); - - // TODO: bad name - this.event_consumers = {}; // maps window id to eventemitter - + // TODO: this is potentially async and probably has to be synchronised with 'connect' event + /* // import available extentions // TODO: lazy import on first call? - /* this.ext = {}; this.ListExtensions( function(err, extentionsList ) { for (ext in extentionsList) { - var extRequests = require('./ext/' + extentionsList[ext]); - // TODO: need to call QueryExtention to get [major opcode, first event, first error] - importRequestsFromTemplates(this, extRequests); + try { + X.QueryExtension(ext, function(e) { + var extRequests = require('./ext/' + extentionsList[ext]); + importRequestsFromTemplates(this, extRequests); + }); + } catch (e) { + // do not import if module not defined + } } - } + }); */ - // init comon extentions - + this.startHandshake(); } util.inherits(XClient, EventEmitter);