NAME ChangeWorkbenchSelectionA -- Change the selection states of icons displayed by Workbench. (V44) SYNOPSIS success = ChangeWorkbenchSelectionA(name,hook,tags) D0 A0 A1 A2 bool changeworkbenchselectiona(strptr name,struct hook *hook, struct tagitem *tags); success = ChangeWorkbenchSelection(name,hook,...); bool changeworkbenchselection(strptr name,struct hook *hook,...); FUNCTION The icons displayed inside each Workbench window can be in selected or in unselected state. This routine allows you to change this state for every icon found in a particular window. INPUTS name -- Name of the drawer whose icons should be submitted to the callback hook for testing; pass NULL as the name to have the icons in the Workbench backdrop (where disks and AppIcons live) passed through the hook. Note that the drawer whose icons you want to change must be open before you can make any changes. hook -- hook to be invoked for each icon in the window. The hook code will be invoked with the following parameters action = hookFunc(hook,reserved,ism) D0 A0 A2 A1 ULONG hookFunc(struct hook *hook,aptr reserved, struct iconselectmsg *ism); The reserved parameter will be set to NULL (V44). The iconselectmsg contents are as follows: ism_Length Size of the iconselectmsg data structure (in bytes). Since this message may need to grow in the future, always compare this value against the message size you expect. For V44, ism_Length is guaranteed to contain a value of 36. Expect this value to become larger in the future. ism_Drawer A lock on the drawer the object in question resides in. This may be NULL for the Workbench backdrop (where disks and AppIcons live). ism_Name Name of the object in question; please note that for disk icons the name does not end with a colon character (":"). ism_Type This is one of WBDISK, WBDRAWER, WBTOOL, WBPROJECT, WBGARBAGE, WBDEVICE, WBKICK or WBAPPICON. ism_Selected TRUE if the object in question is currently selected, FALSE otherwise. ism_Tags The list of tag items passed to ChangeWorkbenchSelectionA(). ism_DrawerWindow If the object in question is a drawer or disk and its associated window is currently open, then you will find a pointer to it here. ism_ParentWindow This is a pointer to the window the object resides in. ism_Left ism_Top ism_Width ism_Height These denote the position and size of the object in question, relative to the top left edge of the window it resides in. With the exception of the ism_Left and ism_Top members, the iconselectmsg is read-only. the ism_left/ism_top members can be used to change the position of the icon. You hook code must return one of the following values: ISMACTION_Unselect Unselect the icon ISMACTION_Select Select the icon ISMACTION_Ignore Do not change the selection state of the icon. ISMACTION_Stop Do not change the selection state of the icon. Do not invoke the hook function again. tags -- Additional options. TAGS No tags are defined yet (V44). RESULTS result -- FALSE if the drawer in question could not be found, TRUE otherwise. If FALSE is returned, you can query the error code using dos.library/ioerr(). EXAMPLE /* Select the icon labeled "Prefs" in the drawer "SYS:". */ struct hook hook; /* This hook code is responsible for selecting the icon. */ bool SelectPrefs(struct hook *hook,aptr reserved,struct iconselectmsg *ism) { /* remember the old icon select status; if the icon name * does not match "Prefs", this is what we will return, * not changing anything. */ bool selected = ism->ism_selected; /* If the name matches, select it. Otherwise, leave its * select state alone. */ if(Stricmp(ism->ism_Name,"Prefs") == 0) selected = TRUE; return(selected); } . . . /* Set up the hook data structure. */ hook.h_Entry = HookEntry; hook.h_SubEntry = (HOOKFUNC)SelectPrefs; /* And finally change the selection. */ ChangeWorkbenchSelection("SYS:",&hook,TAG_END); NOTES The name of the drawer to work on is interpreted relative to the current directory of the program to call ChangeWorkbenchSelectionA(). For this function call to succeed, Workbench must be open. This means that the LoadWB command was executed and the Workbench screen has been opened. While the user is dragging icons, no on-screen rendering may take place. In this state Workbench may refuse to execute the ChangeWorkbenchSelection() call and return an error code instead (ERROR_OBJECT_IN_USE). SEE ALSO dos.library/ioerr