Today's lesson in not using Apple's private methods: somewhere between old/886f95f00431 and #9620 Apple changed their document icon setup process. Use the new methods and fix #9620.
(transplanted from 5cf365ce9352d25978ffd6073d3bc07573aba518)
/*
* Adium is the legal property of its developers, whose names are listed in the copyright file included
* with this source distribution.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation; either version 2 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program; if not,
* write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* Implementation note: Each AIStatusType has its own NSMutableDictionary, statusDictsByServiceCodeUniqueID.
* statusDictsByServiceCodeUniqueID is keyed by serviceCodeUniqueID; each object is an NSMutableSet of NSDictionaries.
* Each of these dictionaries has KEY_STATUS_NAME, KEY_STATUS_DESCRIPTION, and KEY_STATUS_TYPE.
*
* @param statusName A name which will be passed back to accounts of this service. Internal use only. Use the AIStatusController.h #defines where appropriate.
* @param description A human-readable localized description which will be shown to the user. Use the AIStatusController.h #defines where appropriate.
* @param type An AIStatusType, the general type of this status.
* @param service The AIService for which to register the status
* @brief Add menu items for a particular type of status
*
* @param type The AIStatusType, used for determining the icon of the menu items
* @param target The target of the created menu items
* @param statusDicts An NSSet of NSDictionary objects, which should each represent a status of the passed type
* @param menuItems The NSMutableArray to which to add the menuItems
* @param alreadyAddedTitles NSMutableSet of NSString titles which have already been added and should not be duplicated. Will be updated as items are added.
* @brief Return the set of all unavailable statuses in use by online or connection accounts
*
* @param activeUnvailableStatusType Pointer to an AIStatusType; returns by reference the most popular unavailable type
* @param activeUnvailableStatusName Pointer to an NSString*; returns by reference a status name if all states are in the same name, or nil if they differ
* @param allOnlineAccountsAreUnvailable Pointer to a BOOL; returns by reference YES is all online accounts are unavailable, NO if one or more is available