adium 3670:add0c83648a5: Massive changes to dock icon drawing:
commits at adium.im
commits at adium.im
Fri Feb 18 20:45:34 UTC 2011
details: http://hg.adium.im/adium/rev/add0c83648a5
revision: 3670:add0c83648a5
author: Frank Dowsett <wixardy at adium.im>
date: Fri Feb 18 15:44:06 2011 -0500
Massive changes to dock icon drawing:
- Use NSDockTile for badging fixes #13439
- Remove flashing of the contact name* fixes #14452
- Use a constant size instead of the current screen's size fixes #13088
Fixes #616
*It's superfluous and may have been broken in 1.3 based on the reports from after 1.4 was released.
diffs (truncated from 2320 to 1000 lines):
diff -r 7905c08bc4d8 -r add0c83648a5 Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Fri Feb 18 01:01:13 2011 +0100
+++ b/Adium.xcodeproj/project.pbxproj Fri Feb 18 15:44:06 2011 -0500
@@ -301,8 +301,6 @@
341BD5700965EC3500CF83F5 /* OTRFingerprintDetailsWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 341BD56E0965EC3500CF83F5 /* OTRFingerprintDetailsWindow.nib */; };
341BD5710965EC3500CF83F5 /* OTRPrivateKeyGenerationWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 341BD56F0965EC3500CF83F5 /* OTRPrivateKeyGenerationWindow.nib */; };
341BD57B0965EC4700CF83F5 /* OTRPrefs.nib in Resources */ = {isa = PBXBuildFile; fileRef = 341BD5790965EC4700CF83F5 /* OTRPrefs.nib */; };
- 341BDF5E0969814A00CF83F5 /* BadgerDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 341BDF5D0969814900CF83F5 /* BadgerDefaults.plist */; };
- 341BDF700969829E00CF83F5 /* DockUnviewedContentDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 341BDF6F0969829E00CF83F5 /* DockUnviewedContentDefaults.plist */; };
342353D709D45726009FF634 /* AILogViewerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 342353D509D45725009FF634 /* AILogViewerWindowController.m */; };
3428328907D2643F004F01C9 /* ESStatusPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 3428328507D2643F004F01C9 /* ESStatusPreferences.m */; };
3428328B07D2643F004F01C9 /* ESStatusPreferencesPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 3428328707D2643F004F01C9 /* ESStatusPreferencesPlugin.m */; };
@@ -1105,9 +1103,6 @@
4BD6742E06001D1D0049CAF7 /* AIEmoticonPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = F5F0FE9D04B12CAC01A80106 /* AIEmoticonPreferences.m */; };
4BD6742F06001D1D0049CAF7 /* EmoticonPrefs.nib in Resources */ = {isa = PBXBuildFile; fileRef = F5F0FEA004B1336C01A80106 /* EmoticonPrefs.nib */; };
4BD6743106001D1E0049CAF7 /* EmoticonDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = F5F0FEA204B133AB01A80106 /* EmoticonDefaults.plist */; };
- 4BD6744506001D430049CAF7 /* AIContactStatusDockOverlaysPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B18A52C0459F8F200A8010A /* AIContactStatusDockOverlaysPlugin.m */; };
- 4BD6744906001D460049CAF7 /* DockOverlayDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4BB826B504C8876C00A8010A /* DockOverlayDefaults.plist */; };
- 4BD6745806001D5E0049CAF7 /* AIDockUnviewedContentPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B13322C0459BAB800A8010A /* AIDockUnviewedContentPlugin.m */; };
4BD6745E06001D740049CAF7 /* ESOpenMessageWindowContactAlertPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 344AB2C40579136900384CEE /* ESOpenMessageWindowContactAlertPlugin.m */; };
4BD6746306001D760049CAF7 /* ESSendMessageContactAlertPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 342DC5BF05783DE7000E1D83 /* ESSendMessageContactAlertPlugin.m */; };
4BD6746606001D770049CAF7 /* SendMessageContactAlert.nib in Resources */ = {isa = PBXBuildFile; fileRef = 342DC7FE05784463000E1D83 /* SendMessageContactAlert.nib */; };
@@ -1150,13 +1145,12 @@
5A1781860EC1215D00BA1E04 /* AIAutoScrollTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1781850EC1215D00BA1E04 /* AIAutoScrollTextView.m */; };
5A5F601D12962EC0007A2232 /* AISegmentedControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5F601A12962D06007A2232 /* AISegmentedControl.m */; };
5A5F601E12962ECE007A2232 /* AISegmentedControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5F601912962D06007A2232 /* AISegmentedControl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5A5F8BBD12D560E400019727 /* AIDockNameOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5F8BBC12D560E400019727 /* AIDockNameOverlay.m */; };
5A804FEA12BE9E84007CDC1B /* scandate.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DDDA6F12BDD5CE0048F6C0 /* scandate.m */; };
5A80508512BE9F00007CDC1B /* scandate.m in Sources */ = {isa = PBXBuildFile; fileRef = 31DDDA6F12BDD5CE0048F6C0 /* scandate.m */; };
5A94397B1279ECB800FDD81D /* AIImgurImageUploader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A94397A1279ECB800FDD81D /* AIImgurImageUploader.m */; };
5A9A9F8911F2951400328DF9 /* AIDoNothingContactAlertPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9A9F8811F2951400328DF9 /* AIDoNothingContactAlertPlugin.m */; };
5A9A9F8B11F295EB00328DF9 /* Stop sign.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9A9F8A11F295EB00328DF9 /* Stop sign.png */; };
- 63093C2F0892143500F118D3 /* newContentThreeDigits.png in Resources */ = {isa = PBXBuildFile; fileRef = 63093C2D0892143500F118D3 /* newContentThreeDigits.png */; };
- 63093C300892143500F118D3 /* newContentTwoDigits.png in Resources */ = {isa = PBXBuildFile; fileRef = 63093C2E0892143500F118D3 /* newContentTwoDigits.png */; };
6311F4710E340DD2004234B8 /* AISharedAdium.h in Headers */ = {isa = PBXBuildFile; fileRef = 6311F46F0E340DD2004234B8 /* AISharedAdium.h */; settings = {ATTRIBUTES = (Public, ); }; };
6311F4720E340DD2004234B8 /* AISharedAdium.m in Sources */ = {isa = PBXBuildFile; fileRef = 6311F4700E340DD2004234B8 /* AISharedAdium.m */; };
6318DBA10F8D93F200C5E584 /* WebKit Defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 347065E406015DC5004F0D20 /* WebKit Defaults.plist */; };
@@ -1433,7 +1427,6 @@
63EA62F0094B8705009C8453 /* AIXtraInfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63EA62EE094B8705009C8453 /* AIXtraInfoController.m */; };
63EA63DD094BB79A009C8453 /* StatusIconPreviewView.nib in Resources */ = {isa = PBXBuildFile; fileRef = 63336B3F094994A800970871 /* StatusIconPreviewView.nib */; };
63EA6409094BB9A9009C8453 /* AIStatusIconPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63EA6407094BB9A9009C8453 /* AIStatusIconPreviewController.m */; };
- 63FBAA480887779D00026246 /* AIDockBadger.m in Sources */ = {isa = PBXBuildFile; fileRef = 636AB7F2087E2B6700A87670 /* AIDockBadger.m */; };
6615618B0D84B875004B7946 /* AIFilterBarBackgroundBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 6615618A0D84B874004B7946 /* AIFilterBarBackgroundBox.m */; };
6E4D961406B739AC005235E9 /* DCJoinChatPanelPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E4D961206B739AC005235E9 /* DCJoinChatPanelPlugin.m */; };
6EC1684D06C170A000F9FAD3 /* DCInviteToChatPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC1684806C170A000F9FAD3 /* DCInviteToChatPlugin.m */; };
@@ -2309,8 +2302,6 @@
341BD5890965ECC200CF83F5 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = de; path = Resources/de.lproj/OTRPrefs.nib; sourceTree = "<group>"; };
341BD58A0965ECC800CF83F5 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = cs; path = Resources/cs.lproj/OTRPrefs.nib; sourceTree = "<group>"; };
341BD58B0965ECCD00CF83F5 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ca; path = Resources/ca.lproj/OTRPrefs.nib; sourceTree = "<group>"; };
- 341BDF5D0969814900CF83F5 /* BadgerDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = BadgerDefaults.plist; path = Resources/BadgerDefaults.plist; sourceTree = SOURCE_ROOT; };
- 341BDF6F0969829E00CF83F5 /* DockUnviewedContentDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = DockUnviewedContentDefaults.plist; path = Resources/DockUnviewedContentDefaults.plist; sourceTree = "<group>"; };
341DE02F07FE104700EB7B06 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = de; path = Resources/de.lproj/ESFileTransferProgressView.nib; sourceTree = "<group>"; };
341DE03407FE105600EB7B06 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ja; path = Resources/ja.lproj/ESFileTransferProgressView.nib; sourceTree = "<group>"; };
341DE03507FE106400EB7B06 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ja; path = Resources/ja.lproj/PasswordPrompt.nib; sourceTree = "<group>"; };
@@ -4000,16 +3991,12 @@
4B08399B07D235190034A001 /* DockIconSelectionSheet.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = DockIconSelectionSheet.nib; path = Resources/DockIconSelectionSheet.nib; sourceTree = "<group>"; };
4B09D5C005D5265800BC00F0 /* AIMetaContact.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIMetaContact.h; path = "Frameworks/Adium Framework/Source/AIMetaContact.h"; sourceTree = "<group>"; };
4B09D5C105D5265800BC00F0 /* AIMetaContact.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIMetaContact.m; path = "Frameworks/Adium Framework/Source/AIMetaContact.m"; sourceTree = "<group>"; };
- 4B13322B0459BAB800A8010A /* AIDockUnviewedContentPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIDockUnviewedContentPlugin.h; path = Source/AIDockUnviewedContentPlugin.h; sourceTree = "<group>"; };
- 4B13322C0459BAB800A8010A /* AIDockUnviewedContentPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIDockUnviewedContentPlugin.m; path = Source/AIDockUnviewedContentPlugin.m; sourceTree = "<group>"; };
4B14CF24085FBC5800C88949 /* AdiumSound.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AdiumSound.h; path = Source/AdiumSound.h; sourceTree = "<group>"; };
4B14CF25085FBC5800C88949 /* AdiumSound.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AdiumSound.m; path = Source/AdiumSound.m; sourceTree = "<group>"; };
4B14CF26085FBC5800C88949 /* AdiumSoundSets.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AdiumSoundSets.h; path = Source/AdiumSoundSets.h; sourceTree = "<group>"; };
4B14CF27085FBC5900C88949 /* AdiumSoundSets.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AdiumSoundSets.m; path = Source/AdiumSoundSets.m; sourceTree = "<group>"; };
4B14CF28085FBC5900C88949 /* AdiumSpeech.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AdiumSpeech.h; path = Source/AdiumSpeech.h; sourceTree = "<group>"; };
4B14CF29085FBC5900C88949 /* AdiumSpeech.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AdiumSpeech.m; path = Source/AdiumSpeech.m; sourceTree = "<group>"; };
- 4B18A52B0459F8F200A8010A /* AIContactStatusDockOverlaysPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIContactStatusDockOverlaysPlugin.h; path = "Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.h"; sourceTree = "<group>"; };
- 4B18A52C0459F8F200A8010A /* AIContactStatusDockOverlaysPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIContactStatusDockOverlaysPlugin.m; path = "Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.m"; sourceTree = "<group>"; };
4B191D880611C10800E8A4E7 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
4B191D890611C10800E8A4E7 /* ReadMe.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = ReadMe.rtf; sourceTree = "<group>"; };
4B22E15C085CAE2E001864DE /* AIAbstractListObjectMenu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIAbstractListObjectMenu.h; path = "Frameworks/Adium Framework/Source/AIAbstractListObjectMenu.h"; sourceTree = "<group>"; };
@@ -4134,7 +4121,6 @@
4BB2EB200D88D76100CA7A7D /* timestamp32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = timestamp32.png; path = Resources/timestamp32.png; sourceTree = "<group>"; };
4BB2EB210D88D76100CA7A7D /* timestamp32_transparent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = timestamp32_transparent.png; path = Resources/timestamp32_transparent.png; sourceTree = "<group>"; };
4BB5B78107D2DC4900CFE06F /* pref-status.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "pref-status.png"; path = "Resources/pref-status.png"; sourceTree = "<group>"; };
- 4BB826B504C8876C00A8010A /* DockOverlayDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist; name = DockOverlayDefaults.plist; path = "Plugins/Contact Status Dock Overlays/DockOverlayDefaults.plist"; sourceTree = "<group>"; };
4BB99726083D1A5F006ACD6F /* SMContactListShowBehaviorPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SMContactListShowBehaviorPlugin.h; path = Source/SMContactListShowBehaviorPlugin.h; sourceTree = SOURCE_ROOT; };
4BB99727083D1A5F006ACD6F /* SMContactListShowBehaviorPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = SMContactListShowBehaviorPlugin.m; path = Source/SMContactListShowBehaviorPlugin.m; sourceTree = SOURCE_ROOT; };
4BB99728083D1A5F006ACD6F /* SMContactListShowDetailsPane.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SMContactListShowDetailsPane.h; path = Source/SMContactListShowDetailsPane.h; sourceTree = SOURCE_ROOT; };
@@ -4219,6 +4205,8 @@
5A1781850EC1215D00BA1E04 /* AIAutoScrollTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIAutoScrollTextView.m; path = Source/AIAutoScrollTextView.m; sourceTree = "<group>"; };
5A5F601912962D06007A2232 /* AISegmentedControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AISegmentedControl.h; path = "Frameworks/AIUtilities Framework/Source/AISegmentedControl.h"; sourceTree = "<group>"; };
5A5F601A12962D06007A2232 /* AISegmentedControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AISegmentedControl.m; path = "Frameworks/AIUtilities Framework/Source/AISegmentedControl.m"; sourceTree = "<group>"; };
+ 5A5F8BBB12D560E400019727 /* AIDockNameOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIDockNameOverlay.h; path = "Plugins/Dock Icon Badging/AIDockNameOverlay.h"; sourceTree = "<group>"; };
+ 5A5F8BBC12D560E400019727 /* AIDockNameOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIDockNameOverlay.m; path = "Plugins/Dock Icon Badging/AIDockNameOverlay.m"; sourceTree = "<group>"; };
5A7642A811E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = Resources/sk_SK.lproj/AccountProxy.nib; sourceTree = "<group>"; };
5A7642A911E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = Resources/sk_SK.lproj/AIAdvancedInspectorPane.nib; sourceTree = "<group>"; };
5A7642AA11E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = Resources/sk_SK.lproj/AppearancePrefs.nib; sourceTree = "<group>"; };
@@ -4310,8 +4298,6 @@
5A9A9F8711F2951400328DF9 /* AIDoNothingContactAlertPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIDoNothingContactAlertPlugin.h; sourceTree = "<group>"; };
5A9A9F8811F2951400328DF9 /* AIDoNothingContactAlertPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIDoNothingContactAlertPlugin.m; sourceTree = "<group>"; };
5A9A9F8A11F295EB00328DF9 /* Stop sign.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Stop sign.png"; path = "Resources/Stop sign.png"; sourceTree = SOURCE_ROOT; };
- 63093C2D0892143500F118D3 /* newContentThreeDigits.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = newContentThreeDigits.png; sourceTree = "<group>"; };
- 63093C2E0892143500F118D3 /* newContentTwoDigits.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = newContentTwoDigits.png; sourceTree = "<group>"; };
6311F46F0E340DD2004234B8 /* AISharedAdium.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AISharedAdium.h; path = "Frameworks/Adium Framework/Source/AISharedAdium.h"; sourceTree = "<group>"; };
6311F4700E340DD2004234B8 /* AISharedAdium.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AISharedAdium.m; path = "Frameworks/Adium Framework/Source/AISharedAdium.m"; sourceTree = "<group>"; };
63125D8D0A75EBF000303EE9 /* AIPurpleLiveJournalAccount.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIPurpleLiveJournalAccount.h; path = "Plugins/Purple Service/AIPurpleLiveJournalAccount.h"; sourceTree = "<group>"; };
@@ -4581,8 +4567,6 @@
634DC5560F9C3B2F007B6479 /* AIStringUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIStringUtilities.h; path = "Frameworks/AIUtilities Framework/Source/AIStringUtilities.h"; sourceTree = "<group>"; };
6360B2580BF2EB93004CD99B /* AIWebKitDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIWebKitDelegate.h; path = "Plugins/WebKit Message View/AIWebKitDelegate.h"; sourceTree = "<group>"; };
6360B2590BF2EB93004CD99B /* AIWebKitDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIWebKitDelegate.m; path = "Plugins/WebKit Message View/AIWebKitDelegate.m"; sourceTree = "<group>"; };
- 636AB7F1087E2B6700A87670 /* AIDockBadger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIDockBadger.h; sourceTree = "<group>"; };
- 636AB7F2087E2B6700A87670 /* AIDockBadger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIDockBadger.m; sourceTree = "<group>"; };
636C6E5D0ED56D0100E0E528 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = /usr/lib/libcrypto.dylib; sourceTree = "<absolute>"; };
636D8C970E4E95A500E5F558 /* AIAddressBookController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIAddressBookController.m; path = "Frameworks/Adium Framework/Source/AIAddressBookController.m"; sourceTree = "<group>"; };
636D93660E4E9FD300E5F558 /* AdiumAddressBookAction_Yahoo.scpt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.scpt; name = AdiumAddressBookAction_Yahoo.scpt; path = "Frameworks/Adium Framework/Resources/AdiumAddressBookAction_Yahoo.scpt"; sourceTree = "<group>"; };
@@ -6059,8 +6043,6 @@
34F8A7FA05A8927F00577775 /* Applescript Filters */,
4BF4813B049A802E00A8010A /* Auto Linking */,
3436CD940CB5AB5B003A026E /* Bookmarking */,
- 636AB7EC087E2A2E00A87670 /* Dock Icon Badging */,
- 4B1332130459B98E00A8010A /* Dock Unviewed Content */,
11C157D504A88DE0008E0C76 /* Emoticons */,
3429BAF70703789D00EED705 /* File Transfer Messages */,
34CF9DEF085B8B3D00D87E37 /* iTunes Now Playing */,
@@ -6879,16 +6861,6 @@
name = "Contact Status Coloring";
sourceTree = "<group>";
};
- 4B1332130459B98E00A8010A /* Dock Unviewed Content */ = {
- isa = PBXGroup;
- children = (
- 341BDF6F0969829E00CF83F5 /* DockUnviewedContentDefaults.plist */,
- 4B13322B0459BAB800A8010A /* AIDockUnviewedContentPlugin.h */,
- 4B13322C0459BAB800A8010A /* AIDockUnviewedContentPlugin.m */,
- );
- name = "Dock Unviewed Content";
- sourceTree = "<group>";
- };
4B1332140459B9A000A8010A /* Dock Account Status */ = {
isa = PBXGroup;
children = (
@@ -6915,9 +6887,8 @@
4B18A51F0459F89300A8010A /* Contact and Chat Dock Overlays */ = {
isa = PBXGroup;
children = (
- 4B18A52B0459F8F200A8010A /* AIContactStatusDockOverlaysPlugin.h */,
- 4B18A52C0459F8F200A8010A /* AIContactStatusDockOverlaysPlugin.m */,
- 4BB826B504C8876C00A8010A /* DockOverlayDefaults.plist */,
+ 5A5F8BBB12D560E400019727 /* AIDockNameOverlay.h */,
+ 5A5F8BBC12D560E400019727 /* AIDockNameOverlay.m */,
);
name = "Contact and Chat Dock Overlays";
sourceTree = "<group>";
@@ -8322,19 +8293,6 @@
name = "Xtras Preview Views";
sourceTree = "<group>";
};
- 636AB7EC087E2A2E00A87670 /* Dock Icon Badging */ = {
- isa = PBXGroup;
- children = (
- 341BDF5D0969814900CF83F5 /* BadgerDefaults.plist */,
- 636AB7F1087E2B6700A87670 /* AIDockBadger.h */,
- 636AB7F2087E2B6700A87670 /* AIDockBadger.m */,
- 63093C2D0892143500F118D3 /* newContentThreeDigits.png */,
- 63093C2E0892143500F118D3 /* newContentTwoDigits.png */,
- );
- name = "Dock Icon Badging";
- path = "Plugins/Dock Icon Badging";
- sourceTree = "<group>";
- };
636D930E0E4E9DDD00E5F558 /* Address Book Integration */ = {
isa = PBXGroup;
children = (
@@ -9897,7 +9855,6 @@
34A48A1006F64382002C7C5F /* ContactListWindowBorderless.nib in Resources */,
4BE9FFE8055981AB00359B15 /* Adium.pch in Resources */,
4BD6743106001D1E0049CAF7 /* EmoticonDefaults.plist in Resources */,
- 4BD6744906001D460049CAF7 /* DockOverlayDefaults.plist in Resources */,
4BD6755406001E1E0049CAF7 /* DualWindowDefaults.plist in Resources */,
4BD6756B06001E320049CAF7 /* EventSoundDefaults.plist in Resources */,
4B191D8A0611C10800E8A4E7 /* License.txt in Resources */,
@@ -9967,8 +9924,6 @@
071C56330827933100399C0F /* Shared Dock Icon Images in Resources */,
4BB9972F083D1A74006ACD6F /* ContactListShowBehavior.nib in Resources */,
110763FA08676D05005987A5 /* BlockEditorWindow.nib in Resources */,
- 63093C2F0892143500F118D3 /* newContentThreeDigits.png in Resources */,
- 63093C300892143500F118D3 /* newContentTwoDigits.png in Resources */,
EE147A6D0896B18800A21377 /* ABSearch.png in Resources */,
EE147A790896B32400A21377 /* ABSearch.nib in Resources */,
632D801708E7E0A40032C187 /* XtrasManager.nib in Resources */,
@@ -9985,8 +9940,6 @@
341BD5700965EC3500CF83F5 /* OTRFingerprintDetailsWindow.nib in Resources */,
341BD5710965EC3500CF83F5 /* OTRPrivateKeyGenerationWindow.nib in Resources */,
341BD57B0965EC4700CF83F5 /* OTRPrefs.nib in Resources */,
- 341BDF5E0969814A00CF83F5 /* BadgerDefaults.plist in Resources */,
- 341BDF700969829E00CF83F5 /* DockUnviewedContentDefaults.plist in Resources */,
349710DD096C4C7700699948 /* Buttons.strings in Resources */,
343EC6C1096F7DEA00349098 /* StatusPreferencesAdvanced.nib in Resources */,
343EC9810970C29400349098 /* OfflineContactHidingDefaults.plist in Resources */,
@@ -10447,8 +10400,6 @@
4BD673B706001C5F0049CAF7 /* AIContactStatusColoringPlugin.m in Sources */,
4BD6741C06001CEF0049CAF7 /* AIMessageAliasPlugin.m in Sources */,
4BD6742E06001D1D0049CAF7 /* AIEmoticonPreferences.m in Sources */,
- 4BD6744506001D430049CAF7 /* AIContactStatusDockOverlaysPlugin.m in Sources */,
- 4BD6745806001D5E0049CAF7 /* AIDockUnviewedContentPlugin.m in Sources */,
4BD6745E06001D740049CAF7 /* ESOpenMessageWindowContactAlertPlugin.m in Sources */,
4BD6746306001D760049CAF7 /* ESSendMessageContactAlertPlugin.m in Sources */,
4BD6753006001E0D0049CAF7 /* AIDualWindowInterfacePlugin.m in Sources */,
@@ -10560,7 +10511,6 @@
34CF9DF5085B8B7900D87E37 /* ESiTunesPlugin.m in Sources */,
110763F608676CC9005987A5 /* RAFBlockEditorPlugin.m in Sources */,
110763F808676CC9005987A5 /* RAFBlockEditorWindowController.m in Sources */,
- 63FBAA480887779D00026246 /* AIDockBadger.m in Sources */,
EE147A800896B33400A21377 /* OWABSearchWindowController.m in Sources */,
633F175D08F905A800C76383 /* AIXtrasManager.m in Sources */,
348F57940936F3CC00288E41 /* ESEditStatusGroupWindowController.m in Sources */,
@@ -10761,6 +10711,7 @@
5A80508512BE9F00007CDC1B /* scandate.m in Sources */,
1154F50B12E1476900B8CA27 /* AILogByAccountWindowController.m in Sources */,
766ABAB61306D1020049FFB7 /* AIUnreadMessagesTooltip.m in Sources */,
+ 5A5F8BBD12D560E400019727 /* AIDockNameOverlay.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff -r 7905c08bc4d8 -r add0c83648a5 Frameworks/Adium Framework/Source/AIDockControllerProtocol.h
--- a/Frameworks/Adium Framework/Source/AIDockControllerProtocol.h Fri Feb 18 01:01:13 2011 +0100
+++ b/Frameworks/Adium Framework/Source/AIDockControllerProtocol.h Fri Feb 18 15:44:06 2011 -0500
@@ -34,12 +34,12 @@
- (void)setIconStateNamed:(NSString *)inName;
- (void)removeIconStateNamed:(NSString *)inName;
- (void)setIconState:(AIIconState *)iconState named:(NSString *)inName;
-- (CGFloat)dockIconScale;
- (NSImage *)baseApplicationIconImage;
+- (void)setOverlay:(NSImage *)image;
//Special access to icon pack loading
- (NSArray *)availableDockIconPacks;
-- (BOOL)currentIconSupportsIconStateNamed:(NSString *)inName;;
+- (BOOL)currentIconSupportsIconStateNamed:(NSString *)inName;
- (NSMutableDictionary *)iconPackAtPath:(NSString *)folderPath;
- (void)getName:(NSString **)outName previewState:(AIIconState **)outIconState forIconPackAtPath:(NSString *)folderPath;
- (AIIconState *)previewStateForIconPackAtPath:(NSString *)folderPath;
diff -r 7905c08bc4d8 -r add0c83648a5 Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.h
--- a/Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.h Fri Feb 18 01:01:13 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-
-#import <Adium/AIContactObserverManager.h>
-#import <Adium/AIContactAlertsControllerProtocol.h>
-#import <Adium/AIChatControllerProtocol.h>
-
-#define PREF_GROUP_DOCK_OVERLAYS @"Dock Overlays"
-#define DOCK_OVERLAY_DEFAULT_PREFS @"DockOverlayDefaults"
-
-#define KEY_DOCK_SHOW_STATUS @"Show status overlays"
-#define KEY_DOCK_SHOW_CONTENT @"Show content overlays"
-#define KEY_DOCK_OVERLAY_POSITION @"Overlay Position"
-
-#define DOCK_OVERLAY_ALERT_IDENTIFIER @"DockOverlay"
-
- at class AIIconState;
-
- at interface AIContactStatusDockOverlaysPlugin : AIPlugin <AIListObjectObserver, AIChatObserver, AIActionHandler> {
- NSMutableArray *overlayObjectsArray;
- AIIconState *overlayState;
-
- NSColor *signedOffColor;
- NSColor *signedOnColor;
- NSColor *unviewedContentColor;
-
- NSColor *backSignedOffColor;
- NSColor *backSignedOnColor;
- NSColor *backUnviewedContentColor;
-
- BOOL showStatus;
- BOOL showContent;
- BOOL overlayPosition;
- BOOL shouldAnimate;
-
- NSImage *image1;
- NSImage *image2;
-}
-
- at end
diff -r 7905c08bc4d8 -r add0c83648a5 Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.m
--- a/Plugins/Contact Status Dock Overlays/AIContactStatusDockOverlaysPlugin.m Fri Feb 18 01:01:13 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,455 +0,0 @@
-/*
- * 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.
- */
-
-#import "AIContactStatusDockOverlaysPlugin.h"
-#import <Adium/AIChatControllerProtocol.h>
-#import <Adium/AIContactControllerProtocol.h>
-#import <Adium/AIContentControllerProtocol.h>
-#import "AIDockController.h"
-#import <Adium/AIInterfaceControllerProtocol.h>
-#import <Adium/AIContactAlertsControllerProtocol.h>
-#import <AIUtilities/AIColorAdditions.h>
-#import <AIUtilities/AIDictionaryAdditions.h>
-#import <AIUtilities/AIParagraphStyleAdditions.h>
-#import <AIUtilities/AIArrayAdditions.h>
-#import <AIUtilities/AIImageAdditions.h>
-#import <Adium/AIAbstractListController.h>
-#import <Adium/AIAccount.h>
-#import <Adium/AIChat.h>
-#import <Adium/AIIconState.h>
-
-#define SMALLESTRADIUS 15
-#define RADIUSRANGE 36
-#define SMALLESTFONTSIZE 14
-#define FONTSIZERANGE 30
-
-#define DOCK_OVERLAY_ALERT_SHORT AILocalizedString(@"Display name in the dock icon",nil)
-#define DOCK_OVERLAY_ALERT_LONG DOCK_OVERLAY_ALERT_SHORT
-
- at interface AIContactStatusDockOverlaysPlugin ()
-- (void)_setOverlay;
-- (NSImage *)overlayImageFlash:(BOOL)flash;
-- (void)flushPreferenceColorCache;
-- (void)chatClosed:(NSNotification *)notification;
-- (void)removeDockOverlay:(NSTimer *)removeTimer;
- at end
-
- at implementation AIContactStatusDockOverlaysPlugin
-
-/*!
-* @brief Install
- */
-- (void)installPlugin
-{
- overlayObjectsArray = [[NSMutableArray alloc] init];
- overlayState = nil;
-
- //Register as a contact observer (For signed on / signed off)
- [[AIContactObserverManager sharedManager] registerListObjectObserver:self];
-
- //Register as a chat observer (for unviewed content)
- [adium.chatController registerChatObserver:self];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(chatClosed:)
- name:Chat_WillClose
- object:nil];
-
- //Prefs
- [adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_LIST_THEME];
- [adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_APPEARANCE];
-
- //
- image1 = [[NSImage alloc] initWithSize:NSMakeSize(128,128)];
- image2 = [[NSImage alloc] initWithSize:NSMakeSize(128,128)];
-
- //Install our contact alert
- [adium.contactAlertsController registerActionID:DOCK_OVERLAY_ALERT_IDENTIFIER withHandler:self];
-}
-
-- (void)uninstallPlugin
-{
- [[AIContactObserverManager sharedManager] unregisterListObjectObserver:self];
- [adium.chatController unregisterChatObserver:self];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [adium.preferenceController unregisterPreferenceObserver:self];
-}
-
-/*!
-* @brief Short description
- * @result A short localized description of the action
- */
-- (NSString *)shortDescriptionForActionID:(NSString *)actionID
-{
- return DOCK_OVERLAY_ALERT_SHORT;
-}
-
-/*!
-* @brief Long description
- * @result A longer localized description of the action which should take into account the details dictionary as appropraite.
- */
-- (NSString *)longDescriptionForActionID:(NSString *)actionID withDetails:(NSDictionary *)details
-{
- return DOCK_OVERLAY_ALERT_LONG;
-}
-
-/*!
-* @brief Image
- */
-- (NSImage *)imageForActionID:(NSString *)actionID
-{
- //XXX
- return [NSImage imageNamed:@"DockAlert" forClass:[self class]];
-}
-
-/*!
- * @brief Details pane
- * @result An <tt>AIModularPane</tt> to use for configuring this action, or nil if no configuration is possible.
- */
-- (AIModularPane *)detailsPaneForActionID:(NSString *)actionID
-{
- return nil;
-}
-
-/*!
-* @brief Perform an action
- *
- * @param actionID The ID of the action to perform
- * @param listObject The listObject associated with the event triggering the action. It may be nil
- * @param details If set by the details pane when the action was created, the details dictionary for this particular action
- * @param eventID The eventID which triggered this action
- * @param userInfo Additional information associated with the event; userInfo's type will vary with the actionID.
- */
-- (BOOL)performActionID:(NSString *)actionID forListObject:(AIListObject *)listObject withDetails:(NSDictionary *)details triggeringEventID:(NSString *)eventID userInfo:(id)userInfo
-{
- BOOL isMessageEvent = [adium.contactAlertsController isMessageEvent:eventID];
-
- if (isMessageEvent) {
- AIChat *chat;
-
- if ((chat = [userInfo objectForKey:@"AIChat"]) &&
- (chat != adium.interfaceController.activeChat) &&
- (![overlayObjectsArray containsObjectIdenticalTo:chat])) {
- [overlayObjectsArray addObject:chat];
-
- //Wait until the next run loop so this event is done processing (and our unviewed content count is right)
- [self performSelector:@selector(_setOverlay)
- withObject:nil
- afterDelay:0];
-
- /* The chat observer method is responsible for removing this overlay later */
- }
-
- } else if (listObject) {
- NSTimer *removeTimer;
-
- //Clear any current timer for this object o ahve its overlay removed
- if ((removeTimer = [listObject valueForProperty:@"DockOverlayRemoveTimer"])) [removeTimer invalidate];
-
- //Add a timer to remove this overlay
- removeTimer = [NSTimer scheduledTimerWithTimeInterval:5
- target:self
- selector:@selector(removeDockOverlay:)
- userInfo:listObject
- repeats:NO];
- [listObject setValue:removeTimer
- forProperty:@"DockOverlayRemoveTimer"
- notify:NotifyNever];
-
- if (![overlayObjectsArray containsObject:listObject]) {
- [overlayObjectsArray addObject:listObject];
- }
-
- //Wait until the next run loop so this event is done processing
- [self performSelector:@selector(_setOverlay)
- withObject:nil
- afterDelay:0];
- }
-
- return YES;
-}
-
-- (void)removeDockOverlay:(NSTimer *)removeTimer
-{
- AIListObject *inObject = [removeTimer userInfo];
-
- [overlayObjectsArray removeObjectIdenticalTo:inObject];
-
- [inObject setValue:nil
- forProperty:@"DockOverlayRemoveTimer"
- notify:NotifyNever];
-
- [self _setOverlay];
-}
-
-- (void)chatClosed:(NSNotification *)notification
-{
- AIChat *chat = [notification object];
-
- [overlayObjectsArray removeObjectIdenticalTo:chat];
-
- [self _setOverlay];
-}
-
-/*!
-* @brief Allow multiple actions?
- *
- * If this method returns YES, every one of this action associated with the triggering event will be executed.
- * If this method returns NO, only the first will be.
- *
- * Don't allow multiple dock actions to occur. While a series of "Bounce every 5 seconds," "Bounce every 10 seconds,"
- * and so on actions could be combined sanely, a series of "Bounce once" would make the dock go crazy.
- */
-- (BOOL)allowMultipleActionsWithID:(NSString *)actionID
-{
- return NO;
-}
-
-- (void)preferencesChangedForGroup:(NSString *)group key:(NSString *)key
- object:(AIListObject *)object preferenceDict:(NSDictionary *)prefDict firstTime:(BOOL)firstTime
-{
- if ([group isEqualToString:PREF_GROUP_LIST_THEME]) {
- //Grab colors from status coloring plugin's prefs
- [self flushPreferenceColorCache];
- signedOffColor = [[[prefDict objectForKey:KEY_SIGNED_OFF_COLOR] representedColor] retain];
- signedOnColor = [[[prefDict objectForKey:KEY_SIGNED_ON_COLOR] representedColor] retain];
- unviewedContentColor = [[[prefDict objectForKey:KEY_UNVIEWED_COLOR] representedColor] retain];
-
- backSignedOffColor = [[[prefDict objectForKey:KEY_LABEL_SIGNED_OFF_COLOR] representedColor] retain];
- backSignedOnColor = [[[prefDict objectForKey:KEY_LABEL_SIGNED_ON_COLOR] representedColor] retain];
- backUnviewedContentColor = [[[prefDict objectForKey:KEY_LABEL_UNVIEWED_COLOR] representedColor] retain];
-
- } else if ([group isEqualToString:PREF_GROUP_APPEARANCE]) {
- if (!key || [key isEqualToString:KEY_ANIMATE_DOCK_ICON]) {
- BOOL newShouldAnimate = [[prefDict objectForKey:KEY_ANIMATE_DOCK_ICON] boolValue];
- if (newShouldAnimate != shouldAnimate) {
- shouldAnimate = newShouldAnimate;
-
- //Redo our overlay to respect our new preference
- if (!firstTime) [self _setOverlay];
- }
- }
- }
-}
-
-
-- (void)flushPreferenceColorCache
-{
- [signedOffColor release]; signedOffColor = nil;
- [signedOnColor release]; signedOnColor = nil;
- [unviewedContentColor release]; unviewedContentColor = nil;
- [backSignedOffColor release]; backSignedOffColor = nil;
- [backSignedOnColor release]; backSignedOnColor = nil;
- [backUnviewedContentColor release]; backUnviewedContentColor = nil;
-}
-
-- (NSSet *)updateListObject:(AIListObject *)inObject keys:(NSSet *)inModifiedKeys silent:(BOOL)silent
-{
- if ([inObject isKindOfClass:[AIAccount class]]) {
- //When an account signs on or off, force an overlay update as it may have silently changed
- //contacts' statuses
- if ([inModifiedKeys containsObject:@"isOnline"]) {
- BOOL madeChanges = NO;
-
- for (AIListObject *listObject in [[overlayObjectsArray copy] autorelease]) {
- if (([listObject respondsToSelector:@selector(account)]) &&
- ([(id)listObject account] == inObject) &&
- ([overlayObjectsArray containsObjectIdenticalTo:listObject])) {
- [overlayObjectsArray removeObject:listObject];
- madeChanges = YES;
- }
- }
-
- if (madeChanges) [self _setOverlay];
- }
- }
-
- return nil;
-}
-
-/*!
- * @brief When a chat no longer has unviewed content, remove it from display
- */
-- (NSSet *)updateChat:(AIChat *)inChat keys:(NSSet *)inModifiedKeys silent:(BOOL)silent
-{
- if (inModifiedKeys == nil || [inModifiedKeys containsObject:KEY_UNVIEWED_CONTENT]) {
-
- if (![inChat unviewedContentCount]) {
- if ([overlayObjectsArray containsObjectIdenticalTo:inChat]) {
- [overlayObjectsArray removeObjectIdenticalTo:inChat];
- [self _setOverlay];
- }
- }
- }
-
- return nil;
-}
-
-- (void)_setOverlay
-{
- //Remove & release the current overlay state
- if (overlayState) {
- [adium.dockController removeIconStateNamed:@"ContactStatusOverlay"];
- [overlayState release]; overlayState = nil;
- }
-
- //Create & set the new overlay state
- if ([overlayObjectsArray count] != 0) {
- //Set the state
- if (shouldAnimate) {
- overlayState = [[AIIconState alloc] initWithImages:[NSArray arrayWithObjects:[self overlayImageFlash:NO], [self overlayImageFlash:YES], nil]
- delay:0.5f
- looping:YES
- overlay:YES];
- } else {
- overlayState = [[AIIconState alloc] initWithImage:[self overlayImageFlash:NO]
- overlay:YES];
- }
-
- [adium.dockController setIconState:overlayState named:@"ContactStatusOverlay"];
- }
-}
-
-- (NSImage *)overlayImageFlash:(BOOL)flash
-{
- NSEnumerator *enumerator;
- ESObjectWithProperties *object;
- NSFont *font;
- NSParagraphStyle *paragraphStyle;
- CGFloat dockIconScale;
- CGFloat iconHeight;
- CGFloat top, bottom;
- NSImage *image = (flash ? image1 : image2);
-
- //Pre-calc some sizes
- dockIconScale = 1- [adium.dockController dockIconScale];
- iconHeight = (SMALLESTRADIUS + (RADIUSRANGE * dockIconScale));
-
- top = 126;
- bottom = top - iconHeight;
-
- //Set up the string details
- font = [NSFont boldSystemFontOfSize:(SMALLESTFONTSIZE + (FONTSIZERANGE * dockIconScale))];
- paragraphStyle = [NSParagraphStyle styleWithAlignment:NSCenterTextAlignment lineBreakMode:NSLineBreakByClipping];
-
- //Clear our image
- [image lockFocus];
- [[NSColor clearColor] set];
- NSRectFillUsingOperation(NSMakeRect(0, 0, 128, 128), NSCompositeCopy);
-
- //Draw overlays for each contact
- enumerator = [overlayObjectsArray reverseObjectEnumerator];
- while ((object = [enumerator nextObject]) && !(top < 0) && bottom < 128) {
- CGFloat left, right, arcRadius, stringInset;
- NSBezierPath *path;
- NSColor *backColor = nil, *textColor = nil, *borderColor = nil;
-
- //Create the pill frame
- arcRadius = (iconHeight / 2.0f);
- stringInset = (iconHeight / 4.0f);
- left = 1 + arcRadius;
- right = 127 - arcRadius;
-
- path = [NSBezierPath bezierPath];
- [path setLineWidth:((iconHeight/2.0f) * 0.13333f)];
- //Top
- [path moveToPoint: NSMakePoint(left, top)];
- [path lineToPoint: NSMakePoint(right, top)];
-
- //Right rounded cap
- [path appendBezierPathWithArcWithCenter:NSMakePoint(right, top - arcRadius)
- radius:arcRadius
- startAngle:90
- endAngle:0
- clockwise:YES];
- [path lineToPoint: NSMakePoint(right + arcRadius, bottom + arcRadius)];
- [path appendBezierPathWithArcWithCenter:NSMakePoint(right, bottom + arcRadius)
- radius:arcRadius
- startAngle:0
- endAngle:270
- clockwise:YES];
-
- //Bottom
- [path moveToPoint: NSMakePoint(right, bottom)];
- [path lineToPoint: NSMakePoint(left, bottom)];
-
- //Left rounded cap
- [path appendBezierPathWithArcWithCenter:NSMakePoint(left, bottom + arcRadius)
- radius:arcRadius
- startAngle:270
- endAngle:180
- clockwise:YES];
- [path lineToPoint: NSMakePoint(left - arcRadius, top - arcRadius)];
- [path appendBezierPathWithArcWithCenter:NSMakePoint(left, top - arcRadius) radius:arcRadius startAngle:180 endAngle:90 clockwise:YES];
-
- if ([object integerValueForProperty:KEY_UNVIEWED_CONTENT]) { //Unviewed
- if (flash) {
- backColor = [NSColor whiteColor];
- textColor = [NSColor blackColor];
- } else {
- backColor = backUnviewedContentColor;
- textColor = unviewedContentColor;
- }
- } else if ([object boolValueForProperty:@"signedOn"]) { //Signed on
- backColor = backSignedOnColor;
- textColor = signedOnColor;
-
- } else if ([object boolValueForProperty:@"signedOff"]) { //Signed off
- backColor = backSignedOffColor;
- textColor = signedOffColor;
-
- }
-
- if (!backColor) {
- backColor = [NSColor whiteColor];
- }
- if (!textColor) {
- textColor = [NSColor blackColor];
- }
-
- //Lighten/Darken the back color slightly
- if ([backColor colorIsDark]) {
- backColor = [backColor darkenBy:-0.15f];
- borderColor = [backColor darkenBy:-0.3f];
- } else {
- backColor = [backColor darkenBy:0.15f];
- borderColor = [backColor darkenBy:0.3f];
- }
-
- //Draw
- [backColor set];
- [path fill];
- [borderColor set];
- [path stroke];
-
- //Get the object's display name
- [object.displayName drawInRect:NSMakeRect(0 + stringInset, bottom + 1, 128 - (stringInset * 2), top - bottom)
- withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, textColor, NSForegroundColorAttributeName, nil]];
- /*
- nameString = [[[NSAttributedString alloc] initWithString:contact.displayName attributes:[NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, textColor, NSForegroundColorAttributeName, nil]] autorelease];
- [nameString drawInRect:NSMakeRect(0 + stringInset, bottom + 1, 128 - (stringInset * 2), top - bottom)];*/
-
- //Move down to the next pill
- top -= (iconHeight + 7.0f * dockIconScale);
- bottom = top - iconHeight;
- }
-
- [image unlockFocus];
-
- return image;
-}
-
- at end
diff -r 7905c08bc4d8 -r add0c83648a5 Plugins/Contact Status Dock Overlays/DockOverlayDefaults.plist
--- a/Plugins/Contact Status Dock Overlays/DockOverlayDefaults.plist Fri Feb 18 01:01:13 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>Show status overlays</key>
- <true/>
- <key>Show content overlays</key>
- <true/>
- <key>Overlay Position</key>
- <true/>
- </dict>
-</plist>
diff -r 7905c08bc4d8 -r add0c83648a5 Plugins/Dock Icon Badging/AIDockBadger.h
--- a/Plugins/Dock Icon Badging/AIDockBadger.h Fri Feb 18 01:01:13 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-#import <Adium/AIChatControllerProtocol.h>
-
- at class AIIconState;
-
- at interface AIDockBadger : AIPlugin <AIChatObserver> {
- AIIconState *overlayState;
- NSImage *badgeTwoDigits, *badgeThreeDigits;
- NSInteger lastUnviewedContentCount;
-
- BOOL shouldBadge;
- BOOL showConversationCount;
-}
-
- at end
diff -r 7905c08bc4d8 -r add0c83648a5 Plugins/Dock Icon Badging/AIDockBadger.m
--- a/Plugins/Dock Icon Badging/AIDockBadger.m Fri Feb 18 01:01:13 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-/*
- * 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.
- */
-
-#import "AIDockBadger.h"
-#import <Adium/AIChatControllerProtocol.h>
-#import <Adium/AIContactControllerProtocol.h>
-#import <Adium/AIContentControllerProtocol.h>
-#import <Adium/AIStatusControllerProtocol.h>
-#import "AIDockController.h"
-#import <Adium/AIInterfaceControllerProtocol.h>
-#import <Adium/AIContactAlertsControllerProtocol.h>
-#import <AIUtilities/AIColorAdditions.h>
-#import <AIUtilities/AIDictionaryAdditions.h>
-#import <AIUtilities/AIParagraphStyleAdditions.h>
-#import <AIUtilities/AIArrayAdditions.h>
-#import <AIUtilities/AIImageAdditions.h>
-#import <Adium/AIAbstractListController.h>
-#import <Adium/AIAccount.h>
-#import <Adium/AIChat.h>
-#import <Adium/AIIconState.h>
-
- at interface AIDockBadger ()
-- (void)removeOverlay;
-- (void)_setOverlay;
- at end
-
- at implementation AIDockBadger
-
-#pragma mark Birth and death
-
-/*!
- * @brief Install
- */
-- (void)installPlugin
-{
- overlayState = nil;
-
- //Register our default preferences
- [adium.preferenceController registerDefaults:[NSDictionary dictionaryNamed:@"BadgerDefaults"
- forClass:[self class]]
- forGroup:PREF_GROUP_APPEARANCE];
-
- //Observe pref changes
- [adium.preferenceController registerPreferenceObserver:self forGroup:PREF_GROUP_APPEARANCE];
-
- // Register as an observer of the status preferences for unread conversation count
- [adium.preferenceController registerPreferenceObserver:self
- forGroup:PREF_GROUP_STATUS_PREFERENCES];
-}
-
-/*!
- * @brief Uninstall
- */
-- (void)uninstallPlugin
-{
- [adium.chatController unregisterChatObserver:self];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [adium.preferenceController unregisterPreferenceObserver:self];
-}
-
-#pragma mark Signals to update
-
-/*!
- * @brief Update our overlay when a chat updates with a relevant key
- */
-- (NSSet *)updateChat:(AIChat *)inChat keys:(NSSet *)inModifiedKeys silent:(BOOL)silent
-{
- if (!inModifiedKeys || [inModifiedKeys containsObject:KEY_UNVIEWED_CONTENT]) {
- [self performSelector:@selector(_setOverlay)
- withObject:nil
- afterDelay:0];
- }
-
- return nil;
-}
-
-/*!
- * @brief Update our overlay when a chat closes
- */
-- (void)chatClosed:(NSNotification *)notification
-{
- [self performSelector:@selector(_setOverlay)
- withObject:nil
- afterDelay:0];
-}
-
-#pragma mark Preference observing
-- (void)preferencesChangedForGroup:(NSString *)group key:(NSString *)key
- object:(AIListObject *)object preferenceDict:(NSDictionary *)prefDict firstTime:(BOOL)firstTime
-{
- if ([group isEqualToString:PREF_GROUP_APPEARANCE] && (!key || [key isEqualToString:KEY_BADGE_DOCK_ICON])) {
- BOOL newShouldBadge = [[prefDict objectForKey:KEY_BADGE_DOCK_ICON] boolValue];
- if (newShouldBadge != shouldBadge) {
- shouldBadge = newShouldBadge;
-
- if (shouldBadge) {
- //Register as a chat observer (for unviewed content). If there is any unviewed content, our overlay will be set.
- [adium.chatController registerChatObserver:self];
-
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(chatClosed:)
- name:Chat_WillClose
- object:nil];
- } else {
- //Remove any existing overlay
- [self removeOverlay];
-
- //Stop observing
- [adium.chatController unregisterChatObserver:self];
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- }
- }
-
- if ([group isEqualToString:PREF_GROUP_STATUS_PREFERENCES]) {
- showConversationCount = [[prefDict objectForKey:KEY_STATUS_CONVERSATION_COUNT] boolValue];
-
- [self _setOverlay];
- }
-}
-
-#pragma mark Work methods
-
-- (NSImage *)numberedBadge:(NSInteger)count
-{
- if(!badgeTwoDigits) {
- badgeTwoDigits = [[NSImage imageNamed:@"newContentTwoDigits"] retain];
- badgeThreeDigits = [[NSImage imageNamed:@"newContentThreeDigits"] retain];
- }
-
- NSImage *badge = nil, *badgeToComposite = nil;
- NSString *numString = nil;
-
- //999 unread messages should be enough for anyone
- if (count >= 1000) {
- count = 999;
- }
-
- badgeToComposite = ((count < 10) ? badgeTwoDigits : badgeThreeDigits);
- numString = [[NSNumber numberWithInteger:count] description];
-
- NSRect rect = { NSZeroPoint, [badgeToComposite size] };
- NSFont *font = [NSFont fontWithName:@"Helvetica-Bold" size:24];
-
- if (!font) font = [NSFont systemFontOfSize:24];
-
- NSDictionary *atts = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSColor whiteColor], NSForegroundColorAttributeName,
- font, NSFontAttributeName,
- nil];
-
- NSSize numSize = [numString sizeWithAttributes:atts];
- rect.origin.x = (rect.size.width / 2) - (numSize.width / 2);
- rect.origin.y = (rect.size.height / 2) - (numSize.height / 2);
-
- badge = [[NSImage alloc] initWithSize:rect.size];
- [badge setFlipped:YES];
- [badge lockFocus];
- [badgeToComposite compositeToPoint:NSMakePoint(0, rect.size.height) operation:NSCompositeSourceOver];
-
- [numString drawInRect:rect
- withAttributes:atts];
-
- [badge unlockFocus];
-
- return [badge autorelease];
-}
-
-/*!
- * @brief Remove any existing dock overlay
- */
-- (void)removeOverlay
-{
- if (overlayState) {
- [adium.dockController removeIconStateNamed:@"UnviewedContentCount"];
- [overlayState release]; overlayState = nil;
- }
-}
-
-/*!
- * @brief Update our overlay to the current unviewed content count
- */
-- (void)_setOverlay
-{
More information about the commits
mailing list