2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
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 /*****************************************************************************
18 AROS_LH3(BOOL
, PutIconTagList
,
21 AROS_LHA(CONST_STRPTR
, name
, A0
),
22 AROS_LHA(struct DiskObject
*, icon
, A1
),
23 AROS_LHA(struct TagItem
*, tags
, A2
),
26 struct IconBase
*, IconBase
, 31, Icon
)
44 *****************************************************************************/
48 struct TagItem
*tstate
= tags
;
49 struct TagItem
*tag
= NULL
;
52 LONG defaultType
= -1;
53 STRPTR defaultName
= NULL
;
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
));
71 case ICONPUTA_PutDefaultType
:
72 defaultType
= tag
->ti_Data
;
73 tag
->ti_Tag
= TAG_IGNORE
; /* avoid recursion */
76 case ICONPUTA_PutDefaultName
:
77 defaultName
= (STRPTR
) tag
->ti_Data
;
78 tag
->ti_Tag
= TAG_IGNORE
; /* avoid recursion */
82 errorCode
= (LONG
*) tag
->ti_Data
;
85 case ICONPUTA_NotifyWorkbench
:
86 notifyWorkbench
= tag
->ti_Data
;
88 case ICONPUTA_OnlyUpdatePosition
:
89 onlyUpdatePosition
= tag
->ti_Data
;
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
106 ICONPUTA_PutDefaultName
, (IPTR
) defaultIconName
,
107 TAG_MORE
, (IPTR
) tags
113 else if (defaultName
!= NULL
)
115 BPTR file
= OpenDefaultIcon(defaultName
, MODE_NEWFILE
);
119 success
= WriteIcon(file
, icon
, tags
);
122 CloseDefaultIcon(file
);
125 else if (name
!= NULL
)
127 BPTR file
= OpenIcon(name
, onlyUpdatePosition
? MODE_OLDFILE
: MODE_NEWFILE
);
130 success
= WriteIcon(file
, icon
, tags
);
137 /* Notify workbench if we added/changed the icon */
138 D(bug("[%s]\tsuccess=%d\n", __func__
, success
));
139 if (success
&& name
&& notifyWorkbench
&& WorkbenchBase
) {
142 lock
= Lock(name
, SHARED_LOCK
);
144 parent
= ParentDir(lock
);
146 UpdateWorkbench(FilePart(name
), parent
, UPDATEWB_ObjectAdded
);
154 if (errorCode
!= NULL
)
159 } /* PutIconTagList() */