xref: /inferno-os/module/wmsrv.m (revision 23f4e5e2f2a701a86f4d79995352603bdf718ba7)
1Wmsrv: module{
2	PATH: con "/dis/lib/wmsrv.dis";
3
4	init:	fn(): 	(chan of (string, chan of (string, ref Draw->Wmcontext)),
5		chan of (ref Client, chan of string),
6		chan of (ref Client, array of byte, Sys->Rwrite));
7
8	find:	fn(p: Draw->Point): ref Client;
9	top:	fn(): ref Client;
10
11	Window: adt {
12		tag:	string;
13		r:	Draw->Rect;
14		img:	ref Draw->Image;
15	};
16
17	Client: adt {
18		kbd:		chan of int;
19		ptr:		chan of ref Draw->Pointer;
20		ctl:		chan of string;
21		stop:		chan of int;
22		flags:	int;			# general purpose.
23		cursor:	string;		# hack.
24		wins:	list of ref Window;
25		znext:	cyclic ref Client;
26
27		# private:
28		images:	chan of (ref Draw->Point, ref Draw->Image, chan of int);
29		id:		int;				# index into clients array
30		fid:		int;
31		token:	int;
32		wmctxt:	ref Draw->Wmcontext;
33
34		window:	fn(c: self ref Client, tag: string): ref Window;
35		contains:	fn(c: self ref Client, p: Draw->Point): int;
36		image:	fn(c: self ref Client, tag: string):	ref Draw->Image;
37		setimage:	fn(c: self ref Client, tag: string,  i: ref Draw->Image): int;	# only in response to some msgs.
38		setorigin:	fn(c: self ref Client, tag: string, o: Draw->Point): int;		# only in response to some msgs.
39		top:		fn(c: self ref Client);			# bring to top.
40		bottom:	fn(c: self ref Client);			# send to bottom.
41		hide:		fn(w: self ref Client);		# move offscreen.
42		unhide:	fn(w: self ref Client);		# move onscreen.
43		remove:	fn(w: self ref Client);
44	};
45};
46
47