Copyright (C) 1994, Digital Equipment Corp.
by Steve Glassman, Mark Manasse and Greg Nelson
<*PRAGMA LL*>Partitioning following the efforts of Steve.Freeman@computer-lab.cambridge.ac.uk - 92-05-13
UNSAFE INTERFACENTClientF ; IMPORT Ctypes, IntRefTbl, NTClient, NTScreenType, Point, ProperSplit, Region, TrestleOnNT, Trestle, TrestleClass, TrestleComm, VBT, WinDef; REVEAL TrestleClass.RootVBT <: ProperSplit.T; TrestleOnNT.Display <: T_Abs; TYPE T_Abs <: T_Rel; T_Rel = NTClient.T_Public OBJECT (* protection = self *) dead (*, hasMessenger, hasSelectThread *) := FALSE; vbts : IntRefTbl.T; sel: SelArray := NIL; (*params: Trestle.Parameters;*) screens: REF ARRAY OF NTScreenType.T; (* Types of the screens on the NT server. *) defaultScreen: CARDINAL; (* index in screens of default screen for this NT server. *) (* The next fields are protected by VBT.mu and self *) current, mouseFocus: VBT.T := NIL; (* The child that has received a FirstDown but no corresponding LastUp, or NIL if there is no such child. *) otherCages: BOOLEAN := FALSE; (* protection = scheduler *) inst: TEXT; END; TYPE Child = ProperSplit.Child OBJECT (* fields below protected by parent lock *) hwnd : WinDef.HWND; conn : NTClient.T; nwValid := FALSE; nw : Point.T; (* The nw field is the location of the northwest corner of the window on the root window, if nwValid is TRUE.*) inside := FALSE; (* whether the cursor is inside the window. *) isNTFocus, underNTFocus := FALSE; (* The boolean isNTFocus is true if this window has the X keyboard focus, and underNTFocus is true if the XNTkeyboard focus is an ancestor of this window. *) owns : OwnsArray := NIL; recentlyOutside := TRUE; (* true if the cursor has been outside our window since the last time a takefocus message was sent *) width, height: CARDINAL; (* width and height of NT window. *) oldWidth, oldHeight := LAST(INTEGER); serial : Ctypes.UnsignedLong; userPosition := FALSE; (* indicates whether the position to be set was generated by a user-specification in global coordinates *) (* everywhereCage = TRUE, => ignore all mouse motion events *) everywhereCage: BOOLEAN := TRUE; cage : VBT.Cage; badR := Region.Empty; (* The actual bad region of a Child ur is ur.badR union bad(ur.ch). *) sh, sv: VBT.SizeRange; (* The last hor and ver sizeranges that were reported to NT. *) csid: WinDef.HCURSOR; (* The last cursor that was reported to NT. *) cageCovered := FALSE; (* TRUE during delivery of a button click, to avoid setting the cage twice. *) END; TYPE SelectionRecord = RECORD v : VBT.T := NIL; ts : VBT.TimeStamp := 0; END; SelArray = REF ARRAY OF SelectionRecord; OwnsArray = REF ARRAY OF BOOLEAN; TYPE NewScreenProp = REF RECORD len, format: INTEGER; data : REF ARRAY OF Ctypes.char END; PROCEDURE Kill (trsl: NTClient.T); <* LL.sup = trsl *>
clean way to close a Trestle
---------- various utilities ----------
PROCEDURE ValidateNW (trsl: NTClient.T; ch: Child; st: NTScreenType.T) RAISES {TrestleComm.Failure}; PROCEDURE SetTitle(trsl: NTClient.T; v: VBT.T; ch: Child) RAISES {TrestleComm.Failure}; <* LL = trsl *> PROCEDURE SetDecoration (trsl : NTClient.T; v : VBT.T; ch : Child; hwnd : WinDef.HWND; old, new: TrestleClass.Decoration) RAISES {TrestleComm.Failure}; PROCEDURE GetDomain (ur: Child; VAR (* OUT*) width, height: CARDINAL);
Return the domain of ur's NT window, or 0,0 when the window is unmapped, and clear ur.reshapeComing. LL = ur.ch.parent
PROCEDURE AdjustCoverage (xcon: NTClient.T; d: [-1 .. 1] := 0) RAISES {TrestleComm.Failure};
see TrestleOnNT.Enter()
PROCEDURE Delete (trsl: NTClient.T; ch: VBT.T; ur: Child); PROCEDURE Reshape (ch: VBT.T; width, height: CARDINAL; sendMoved := FALSE);
Reshape ch to new width and height. LL = VBT.mu
PROCEDURE Connect (inst: TEXT; t: NTClient.T := NIL): Trestle.T RAISES {TrestleComm.Failure};
If t is NIL, allocate a new T and return it. In any case, connect t to the X server named inst.
---------- connection management ----------
PROCEDURE DoConnect ( self : TrestleClass.ConnectClosure; inst : TEXT; localOnly: BOOLEAN; VAR (* OUT*) t : Trestle.T ): BOOLEAN;
Apply procedure for TrestleClass.ConnectClosure. Establishes connection with NT server
END NTClientF.