grub2: bring back build of aros-side grub2 tools
[AROS.git] / rom / intuition / addgadget.c
blob1e4a2d70a2a10a902bd7feab54cba4d75fd751eb
1 /*
2 Copyright © 1995-2013, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
6 Add a single gadget to a window.
7 */
9 #include <proto/layers.h>
10 #include "intuition_intern.h"
12 /*****************************************************************************
14 NAME */
15 #include <intuition/intuition.h>
16 #include <proto/intuition.h>
18 AROS_LH3(UWORD, AddGadget,
20 /* SYNOPSIS */
21 AROS_LHA(struct Window *, window, A0),
22 AROS_LHA(struct Gadget *, gadget, A1),
23 AROS_LHA(ULONG , position, D0),
25 /* LOCATION */
26 struct IntuitionBase *, IntuitionBase, 7, Intuition)
28 /* FUNCTION
29 Adds a single gadget to a window.
31 INPUTS
32 window - Add gadget to this window
33 gadget - Add this gadget
34 position - The position to add the gadget in the list of
35 gadgets already in the window. Use 0 to insert the
36 gadget before all others or ~0 to append it to the
37 list.
39 RESULT
40 The position where the gadget was really inserted.
42 NOTES
43 This just adds the gadget to the list. It will not be visible
44 until you refresh the window.
46 EXAMPLE
48 BUGS
50 SEE ALSO
52 INTERNALS
54 *****************************************************************************/
56 AROS_LIBFUNC_INIT
58 struct Gadget *pred;
59 UWORD count;
61 EXTENDUWORD(position);
63 DEBUG_ADDGADGET(dprintf("AddGadget: Window 0x%lx Gadget 0x%lx Pos %ld\n",
64 window, gadget, position));
66 if (!window) return 0;
67 if (!gadget) return 0;
69 gadget->GadgetType &= ~GTYP_REQGADGET;
71 pred = (struct Gadget *)&window->FirstGadget;
72 count = 0;
74 /* Send all GA_RelSpecial BOOPSI gadgets in the list the GM_LAYOUT msg */
75 DoGMLayout(gadget, window, NULL, 1, TRUE, IntuitionBase);
77 //obtain semaphore here. gadget list must NOT be accessed while it's being modified!
78 #ifdef USEGADGETLOCK
79 LOCKGADGET(IntuitionBase)
80 #else
81 LOCKWINDOWLAYERS(window);
82 #endif
84 while (position && pred->NextGadget)
86 position --;
87 pred = pred->NextGadget;
88 count ++;
91 gadget->NextGadget = pred->NextGadget;
92 pred->NextGadget = gadget;
94 #ifdef USEGADGETLOCK
95 UNLOCKGADGET(IntuitionBase)
96 #else
97 UNLOCKWINDOWLAYERS(window);
98 #endif
100 DEBUG_ADDGADGET(dprintf("AddGadget: Pos %ld\n", count));
102 return count;
103 AROS_LIBFUNC_EXIT
104 } /* AddGadget */