summaryrefslogtreecommitdiff
path: root/module/wmsrv.m
diff options
context:
space:
mode:
Diffstat (limited to 'module/wmsrv.m')
-rw-r--r--module/wmsrv.m46
1 files changed, 46 insertions, 0 deletions
diff --git a/module/wmsrv.m b/module/wmsrv.m
new file mode 100644
index 00000000..d1b82621
--- /dev/null
+++ b/module/wmsrv.m
@@ -0,0 +1,46 @@
+Wmsrv: module{
+ PATH: con "/dis/lib/wmsrv.dis";
+
+ init: fn(): (chan of (string, chan of (string, ref Draw->Wmcontext)),
+ chan of (ref Client, chan of string),
+ chan of (ref Client, array of byte, Sys->Rwrite));
+
+ find: fn(p: Draw->Point): ref Client;
+ top: fn(): ref Client;
+
+ Window: adt {
+ tag: string;
+ r: Rect;
+ img: ref Draw->Image;
+ };
+
+ Client: adt {
+ kbd: chan of int;
+ ptr: chan of ref Draw->Pointer;
+ ctl: chan of string;
+ stop: chan of int;
+ flags: int; # general purpose.
+ cursor: string; # hack.
+ wins: list of ref Window;
+ znext: cyclic ref Client;
+
+ # private:
+ images: chan of (ref Draw->Point, ref Draw->Image, chan of int);
+ id: int; # index into clients array
+ fid: int;
+ token: int;
+ wmctxt: ref Draw->Wmcontext;
+
+ window: fn(c: self ref Client, tag: string): ref Window;
+ contains: fn(c: self ref Client, p: Draw->Point): int;
+ image: fn(c: self ref Client, tag: string): ref Draw->Image;
+ setimage: fn(c: self ref Client, tag: string, i: ref Draw->Image): int; # only in response to some msgs.
+ setorigin: fn(c: self ref Client, tag: string, o: Draw->Point): int; # only in response to some msgs.
+ top: fn(c: self ref Client); # bring to top.
+ bottom: fn(c: self ref Client); # send to bottom.
+ hide: fn(w: self ref Client); # move offscreen.
+ unhide: fn(w: self ref Client); # move onscreen.
+ remove: fn(w: self ref Client);
+ };
+};
+