Belarusian
[AROS.git] / rom / intuition / addgadget.c
blobc207fc89ee51ca620b21b6cadc84aafe1f96d519
1 /*
2 Copyright © 1995-2007, 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 HISTORY
56 *****************************************************************************/
58 AROS_LIBFUNC_INIT
60 struct Gadget *pred;
61 UWORD count;
63 EXTENDUWORD(position);
65 DEBUG_ADDGADGET(dprintf("AddGadget: Window 0x%lx Gadget 0x%lx Pos %ld\n",
66 window, gadget, position));
68 if (!window) return 0;
69 if (!gadget) return 0;
71 gadget->GadgetType &= ~GTYP_REQGADGET;
73 pred = (struct Gadget *)&window->FirstGadget;
74 count = 0;
76 /* Send all GA_RelSpecial BOOPSI gadgets in the list the GM_LAYOUT msg */
77 DoGMLayout(gadget, window, NULL, 1, TRUE, IntuitionBase);
79 //obtain semaphore here. gadget list must NOT be accessed while it's being modified!
80 #ifdef USEGADGETLOCK
81 LOCKGADGET
82 #else
83 LOCKWINDOWLAYERS(window);
84 #endif
86 while (position && pred->NextGadget)
88 position --;
89 pred = pred->NextGadget;
90 count ++;
93 gadget->NextGadget = pred->NextGadget;
94 pred->NextGadget = gadget;
96 #ifdef USEGADGETLOCK
97 UNLOCKGADGET
98 #else
99 UNLOCKWINDOWLAYERS(window);
100 #endif
102 DEBUG_ADDGADGET(dprintf("AddGadget: Pos %ld\n", count));
104 return count;
105 AROS_LIBFUNC_EXIT
106 } /* AddGadget */