FrameGetRect, FrameHitTest requests

This commit is contained in:
Andrey Sidorov 2012-06-07 12:17:24 +10:00
parent 41ceeb67d8
commit d7765b01bf

View file

@ -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);
});
*/
});
}