From d7765b01bfe2ae1cfa03c6f70044470a5b0893a9 Mon Sep 17 00:00:00 2001 From: Andrey Sidorov Date: Thu, 7 Jun 2012 12:17:24 +1000 Subject: [PATCH] FrameGetRect, FrameHitTest requests --- lib/x11/ext/apple-wm.js | 106 ++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 36 deletions(-) diff --git a/lib/x11/ext/apple-wm.js b/lib/x11/ext/apple-wm.js index 8a6dbf5..364f5e2 100644 --- a/lib/x11/ext/apple-wm.js +++ b/lib/x11/ext/apple-wm.js @@ -40,49 +40,80 @@ exports.requireExt = function(display, callback) X.pack_stream.flush(); } -/* + ext.FrameRect = { + Titlebar: 1, + Tracking: 2, + Growbox: 3 + }; + + ext.FrameGetRect = function(frame_class, frame_rect, ix, iy, iw, ih, ox, oy, ow, oh, cb) + { + X.seq_num++; + X.pack_stream.pack('CCSSSSSSSSSSS', [ext.majorOpcode, 1, 6, frame_class, frame_rect, ix, iy, iw, ih, ox, oy, ow, oh, cb]); + X.replies[X.seq_num] = [ + function(buf, opt) { + var res = buf.unpack('SSSS'); + return { + x: res[0], + y: res[1], + w: res[2], + h: res[3] + }; + }, + cb + ]; + X.pack_stream.flush(); + } + + ext.FrameHitTest = function(frame_class, px, py, ix, iy, iw, ih, ox, oy, ow, oh, cb) + { + X.seq_num++; + X.pack_stream.pack('CCSSxxSSSSSSSSSS', [ext.majorOpcode, 2, 7, frame_class, px, py, ix, iy, iw, ih, ox, oy, ow, oh]); + X.replies[X.seq_num] = [ + function(buf, opt) { + var res = buf.unpack('L'); + return res[0]; + }, + cb + ]; + X.pack_stream.flush(); + } + // from /usr/include/Xplugin.h -enum xp_frame_class_enum { - XP_FRAME_CLASS_DECOR_LARGE = 1 << 0, - XP_FRAME_CLASS_RESERVED1 = 1 << 1, - XP_FRAME_CLASS_RESERVED2 = 1 << 2, - XP_FRAME_CLASS_RESERVED3 = 1 << 3, - XP_FRAME_CLASS_DECOR_SMALL = 1 << 4, - XP_FRAME_CLASS_RESERVED5 = 1 << 5, - XP_FRAME_CLASS_RESERVED6 = 1 << 6, - XP_FRAME_CLASS_DECOR_NONE = 1 << 7, - XP_FRAME_CLASS_RESERVED8 = 1 << 8, - XP_FRAME_CLASS_BEHAVIOR_MANAGED = 1 << 15, - XP_FRAME_CLASS_BEHAVIOR_TRANSIENT = 1 << 16, - XP_FRAME_CLASS_BEHAVIOR_STATIONARY = 1 << 17, -}; -typedef enum xp_frame_class_enum xp_frame_class; + ext.FrameClass = { + DecorLarge: 1, + Reserved1: 2, + Reserved2: 4, + Reserved3: 8, + DecorSmall: 16, + Reserved5: 32, + Reserved6: 64, + Reserved8: 128, + Managed: 1<<15, + Transient: 1<<16, + Stationary: 1<<17 + }; -// Attributes of window frames. - -enum xp_frame_attr_enum { - XP_FRAME_ATTR_ACTIVE = 0x0001, - XP_FRAME_ATTR_URGENT = 0x0002, - XP_FRAME_ATTR_TITLE = 0x0004, - XP_FRAME_ATTR_PRELIGHT = 0x0008, - XP_FRAME_ATTR_SHADED = 0x0010, - XP_FRAME_ATTR_CLOSE_BOX = 0x0100, - XP_FRAME_ATTR_COLLAPSE = 0x0200, - XP_FRAME_ATTR_ZOOM = 0x0400, - XP_FRAME_ATTR_CLOSE_BOX_CLICKED = 0x0800, - XP_FRAME_ATTR_COLLAPSE_BOX_CLICKED = 0x1000, - XP_FRAME_ATTR_ZOOM_BOX_CLICKED = 0x2000, - XP_FRAME_ATTR_GROW_BOX = 0x4000, -}; -typedef enum xp_frame_attr_enum xp_frame_attr; - -*/ + ext.FrameAttr = { + Active: 1, + Urgent: 2, + Title: 4, + Prelight: 8, + Shaded: 16, + CloseBox: 0x100, + Collapse: 0x200, + Zoom: 0x400, + CloseBoxClicked: 0x800, + CollapseBoxClicked: 0x1000, + ZoomBoxClicked: 0x2000, + GrowBox: 0x4000 + }; ext.FrameDraw = function(screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title) { X.seq_num++; - var titleReqWords = xutil.padded_length(title.length); + var titleReqWords = xutil.padded_length(title.length)/4; X.pack_stream.pack('CCSLLSSSSSSSSSSLp', [ext.majorOpcode, 3, 9+titleReqWords, screen, window, frameClass, attr, ix, iy, iw, ih, ox, oy, ow, oh, title.length, title]); X.pack_stream.flush(); } @@ -167,11 +198,14 @@ typedef enum xp_frame_attr_enum xp_frame_attr; X.pack_stream.flush(); } + callback(ext); + /* ext.QueryVersion(function(err, vers) { ext.major = vers[0]; ext.minor = vers[1]; ext.patch = vers[2]; callback(ext); }); + */ }); }