2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
7 #include <proto/layers.h>
9 #include "intuition_intern.h"
10 #include "inputhandler_actions.h"
12 #ifdef CGXSHOWHIDESUPPORT
13 #undef ChangeLayerVisibility
14 struct HideWindowActionMsg
16 struct IntuiActionMsg msg
;
17 struct Window
*window
;
20 static VOID
int_hidewindow(struct HideWindowActionMsg
*msg
,
21 struct IntuitionBase
*IntuitionBase
);
24 #ifdef ChangeLayerVisibility
25 struct HideWindowActionMsg
27 struct IntuiActionMsg msg
;
28 struct Window
*window
;
31 static VOID
int_hidewindow(struct HideWindowActionMsg
*msg
,
32 struct IntuitionBase
*IntuitionBase
);
35 /*****************************************************************************
38 #include <proto/intuition.h>
40 AROS_LH1(VOID
, HideWindow
,
43 AROS_LHA(struct Window
*, window
, A0
),
46 struct IntuitionBase
*, IntuitionBase
, 141, Intuition
)
49 Make a window invisible.
52 window - The window to affect.
58 This function is compatible with AmigaOS v4.
71 *****************************************************************************/
75 #ifdef CGXSHOWHIDESUPPORT
76 struct HideWindowActionMsg msg
;
78 DEBUG_HIDEWINDOW(dprintf("HideWindow: Window 0x%lx\n", (ULONG
) window
));
81 if (window
->Flags
& WFLG_BACKDROP
) return;
84 DoASyncAction((APTR
)int_hidewindow
, &msg
.msg
, sizeof(msg
), IntuitionBase
);
87 #ifdef ChangeLayerVisibility
88 struct HideWindowActionMsg msg
;
90 DEBUG_HIDEWINDOW(dprintf("HideWindow: Window 0x%lx\n", window
));
93 DoASyncAction((APTR
)int_hidewindow
, &msg
.msg
, sizeof(msg
), IntuitionBase
);
100 #ifdef CGXSHOWHIDESUPPORT
101 static VOID
int_hidewindow(struct HideWindowActionMsg
*msg
,
102 struct IntuitionBase
*IntuitionBase
)
104 struct Window
*window
= msg
->window
;
105 struct Library
*CGXSystemBase
;
109 if (!ResourceExisting(window
, RESOURCE_WINDOW
, IntuitionBase
)) return;
111 if (window
->Flags
& WFLG_BACKDROP
) return;
113 if (((struct IntWindow
*)(window
))->specialflags
& SPFLAG_NOICONIFY
) return;
115 if ((CGXSystemBase
= OpenLibrary("cgxsystem.library", 0)))
117 CGXHideWindow(window
);
118 ((struct IntWindow
*)(window
))->specialflags
|= SPFLAG_ICONIFIED
;
119 CloseLibrary(CGXSystemBase
);
124 #ifdef ChangeLayerVisibility
125 static VOID
int_hidewindow(struct HideWindowActionMsg
*msg
,
126 struct IntuitionBase
*IntuitionBase
)
128 struct Window
*window
= msg
->window
;
129 struct Screen
*screen
;
131 if (!ResourceExisting(window
, RESOURCE_WINDOW
, IntuitionBase
)) return;
133 screen
= window
->WScreen
;
135 if (IsWindowVisible(window
))
137 struct Requester
*req
;
139 LOCK_REFRESH(screen
);
143 ChangeLayerVisibility(BLAYER(window
), FALSE
);
145 ChangeLayerVisibility(WLAYER(window
), FALSE
);
147 for (req
= window
->FirstRequest
; req
; req
= req
->OlderRequest
)
149 ChangeLayerVisibility(req
->ReqLayer
, FALSE
);
152 UNLOCK_REFRESH(screen
);
154 CheckLayers(screen
, IntuitionBase
);