include/muimaster/macros.h: get() compiler delint
[AROS.git] / workbench / libs / icon / puticontaglist.c
blob22dcdd2edc6188479d576fbc1cb160ff636fa1dd
1 /*
2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <aros/debug.h>
8 #include <utility/tagitem.h>
9 #include <proto/icon.h>
10 #include <proto/workbench.h>
12 #include "icon_intern.h"
14 /*****************************************************************************
16 NAME */
18 AROS_LH3(BOOL, PutIconTagList,
20 /* SYNOPSIS */
21 AROS_LHA(CONST_STRPTR, name, A0),
22 AROS_LHA(struct DiskObject *, icon, A1),
23 AROS_LHA(struct TagItem *, tags, A2),
25 /* LOCATION */
26 struct IconBase *, IconBase, 31, Icon)
28 /* FUNCTION
30 INPUTS
32 RESULT
34 NOTES
36 EXAMPLE
38 BUGS
40 SEE ALSO
42 INTERNALS
44 *****************************************************************************/
46 AROS_LIBFUNC_INIT
48 struct TagItem *tstate = tags;
49 struct TagItem *tag = NULL;
51 BOOL success = FALSE;
52 LONG defaultType = -1;
53 STRPTR defaultName = NULL;
54 LONG error = 0;
55 LONG *errorCode = NULL;
57 BOOL notifyWorkbench = FALSE;
58 BOOL onlyUpdatePosition = FALSE;
60 /* Check input parameters ----------------------------------------------*/
61 D(bug("[%s] Icon %p\n", __func__, icon));
62 if (icon == NULL) return FALSE;
64 /* Parse taglist -------------------------------------------------------*/
65 while ((tag = NextTagItem(&tstate)) != NULL)
67 D(bug("[%s]\tTag (0x%08x, 0x%p)\n", __func__, tag->ti_Tag, (APTR)tag->ti_Data));
68 switch (tag->ti_Tag)
71 case ICONPUTA_PutDefaultType:
72 defaultType = tag->ti_Data;
73 tag->ti_Tag = TAG_IGNORE; /* avoid recursion */
74 break;
76 case ICONPUTA_PutDefaultName:
77 defaultName = (STRPTR) tag->ti_Data;
78 tag->ti_Tag = TAG_IGNORE; /* avoid recursion */
79 break;
81 case ICONA_ErrorCode:
82 errorCode = (LONG *) tag->ti_Data;
83 break;
85 case ICONPUTA_NotifyWorkbench:
86 notifyWorkbench = tag->ti_Data;
87 break;
88 case ICONPUTA_OnlyUpdatePosition:
89 onlyUpdatePosition = tag->ti_Data;
90 break;
94 D(bug("[%s]\tdefaultType=%d\n", __func__, defaultType));
95 D(bug("[%s]\tdefaultName='%s'\n", __func__, defaultName));
96 D(bug("[%s]\tname='%s'\n", __func__, name));
97 if (defaultType != -1)
99 CONST_STRPTR defaultIconName = GetDefaultIconName(defaultType);
101 if (defaultIconName != NULL)
103 success = PutIconTags
105 NULL, icon,
106 ICONPUTA_PutDefaultName, (IPTR) defaultIconName,
107 TAG_MORE, (IPTR) tags
109 if (!success)
110 error = IoErr();
113 else if (defaultName != NULL)
115 BPTR file = OpenDefaultIcon(defaultName, MODE_NEWFILE);
117 if (file != BNULL)
119 success = WriteIcon(file, icon, tags);
120 if (!success)
121 error = IoErr();
122 CloseDefaultIcon(file);
125 else if (name != NULL)
127 BPTR file = OpenIcon(name, onlyUpdatePosition ? MODE_OLDFILE : MODE_NEWFILE);
128 if (file != BNULL)
130 success = WriteIcon(file, icon, tags);
131 if (!success)
132 error = IoErr();
133 CloseIcon(file);
137 /* Notify workbench if we added/changed the icon */
138 D(bug("[%s]\tsuccess=%d\n", __func__, success));
139 if (success && name && notifyWorkbench && WorkbenchBase) {
140 BPTR lock, parent;
142 lock = Lock(name, SHARED_LOCK);
143 if (lock) {
144 parent = ParentDir(lock);
145 if (parent) {
146 UpdateWorkbench(FilePart(name), parent, UPDATEWB_ObjectAdded);
147 UnLock(parent);
149 UnLock(lock);
153 SetIoErr(error);
154 if (errorCode != NULL)
155 *errorCode = error;
156 return success;
158 AROS_LIBFUNC_EXIT
159 } /* PutIconTagList() */