2 Copyright © 1995-2013, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
7 #include <proto/layers.h>
8 #include "intuition_intern.h"
9 #include "inputhandler_actions.h"
11 struct RequestActionMsg
13 struct IntuiActionMsg msg
;
14 struct Requester
*requester
;
15 struct Window
*window
;
19 static VOID
int_request(struct RequestActionMsg
*msg
,
20 struct IntuitionBase
*IntuitionBase
);
22 /*****************************************************************************
25 #include <proto/intuition.h>
27 AROS_LH2(BOOL
, Request
,
30 AROS_LHA(struct Requester
*, requester
, A0
),
31 AROS_LHA(struct Window
* , window
, A1
),
34 struct IntuitionBase
*, IntuitionBase
, 40, Intuition
)
37 Add a requester to specified window and display it.
40 requester - The requester to be displayed
41 window - The window to which the requester belongs
44 TRUE if requester was opened successfully, FALSE else.
53 EndRequest(), InitRequester()
57 *****************************************************************************/
61 struct RequestActionMsg msg
;
63 DEBUG_REQUEST(dprintf("Request: requester 0x%lx window 0x%lx\n", requester
, window
));
65 SANITY_CHECKR(window
,FALSE
)
66 SANITY_CHECKR(requester
,FALSE
)
69 msg
.requester
= requester
;
71 DoSyncAction((APTR
)int_request
, &msg
.msg
, IntuitionBase
);
73 DEBUG_REQUEST(dprintf("Request: requester (layer 0x%lx) setup %d\n",requester
->ReqLayer
,msg
.success
));
81 static VOID
int_request(struct RequestActionMsg
*msg
,
82 struct IntuitionBase
*IntuitionBase
)
84 struct LayersBase
*LayersBase
= GetPrivIBase(IntuitionBase
)->LayersBase
;
85 struct Requester
*requester
= msg
->requester
;
86 struct Window
*window
= msg
->window
;
87 //ULONG layerflags = 0;
88 int left
, top
, right
, bottom
;
90 struct Gadget
*gadgets
;
91 int wleft
= window
->LeftEdge
+ window
->BorderLeft
;
92 int wtop
= window
->TopEdge
+ window
->BorderTop
;
93 int wright
= window
->LeftEdge
+ window
->Width
- window
->BorderRight
- 1;
94 int wbottom
= window
->TopEdge
+ window
->Height
- window
->BorderBottom
- 1;
96 if (requester
->Flags
& POINTREL
)
98 if (requester
== window
->DMRequest
)
100 left
= window
->LeftEdge
+ window
->MouseX
+ requester
->RelLeft
;
101 top
= window
->TopEdge
+ window
->MouseY
+ requester
->RelTop
;
102 if (left
+ requester
->Width
- 1 > wright
)
103 left
= wright
- requester
->Width
+ 1;
104 if (top
+ requester
->Height
- 1 > wbottom
)
105 top
= wbottom
- requester
->Height
+ 1;
109 left
= (wleft
+ wright
- requester
->Width
) >> 1;
110 top
= (wtop
+ wbottom
- requester
->Height
) >> 1;
111 left
+= requester
->RelLeft
;
112 top
+= requester
->RelTop
;
117 left
= wleft
+ requester
->LeftEdge
;
118 top
= wtop
+ requester
->TopEdge
;
123 else if (left
> wright
)
128 else if (top
> wbottom
)
131 right
= left
+ requester
->Width
- 1;
132 bottom
= top
+ requester
->Height
- 1;
137 if (bottom
> wbottom
)
140 requester
->ReqLayer
= NULL
;
142 if ((right
>= left
) && (bottom
>= top
))
144 requester
->ReqLayer
= CreateUpfrontHookLayer(
145 &window
->WScreen
->LayerInfo
146 , window
->WScreen
->RastPort
.BitMap
151 , (requester
->Flags
& SIMPLEREQ
? LAYERSIMPLE
: LAYERSMART
)
156 if (requester
->ReqLayer
)
158 requester
->ReqLayer
->Window
= window
;
159 requester
->RWindow
= window
;
161 requester
->LeftEdge
= left
- wleft
;
162 requester
->TopEdge
= top
- wtop
;
164 gadgets
= requester
->ReqGadget
;
165 requester
->ReqGadget
= NULL
;
167 requester
->OlderRequest
= window
->FirstRequest
;
168 window
->FirstRequest
= requester
;
170 requester
->Flags
|= REQACTIVE
;
172 AddGList(window
, gadgets
, 0, -1, requester
);
174 render_requester(requester
, IntuitionBase
);
180 msg
->success
= FALSE
;