adium 5517:0fbb04961745: Merged adium-1.6 into libotr4.0.0.

commits at adium.im commits at adium.im
Mon May 27 22:53:24 UTC 2013


details:	http://hg.adium.im/adium/rev/0fbb04961745
revision:	5517:0fbb04961745
branch:		libotr4.0.0
author:		Thijs Alkemade <me at thijsalkema.de>
date:		Tue May 28 00:52:55 2013 +0200

Merged adium-1.6 into libotr4.0.0.

diffs (truncated from 50406 to 1000 lines):

diff -r 88cdaeb864d1 -r 0fbb04961745 Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj	Tue May 28 00:24:27 2013 +0200
+++ b/Adium.xcodeproj/project.pbxproj	Tue May 28 00:52:55 2013 +0200
@@ -843,7 +843,6 @@
 		34DC8ADC0A7EEEF7003E1636 /* AIContextMenuTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E1E8176063A3EEC00EB00F7 /* AIContextMenuTextView.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		34DC8ADD0A7EEEF7003E1636 /* AIContextMenuTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E1E8177063A3EEC00EB00F7 /* AIContextMenuTextView.m */; };
 		34DC8AE00A7EEEF7003E1636 /* AIMessageEntryTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B5827E80613CE9D0004BD25 /* AIMessageEntryTextView.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		34DC8AE10A7EEEF7003E1636 /* AIMessageEntryTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5827E90613CE9D0004BD25 /* AIMessageEntryTextView.m */; };
 		34DC8AE40A7EEEF7003E1636 /* stackImage.png in Resources */ = {isa = PBXBuildFile; fileRef = 349DDD5206406A7D00542726 /* stackImage.png */; };
 		34DC8AE50A7EEEF7003E1636 /* AILocalizationAssistance.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D189B1076131850075A380 /* AILocalizationAssistance.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		34DC8AE70A7EEEF7003E1636 /* AILocalizationButtonCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 078C5CD0079EFF87004C75A4 /* AILocalizationButtonCell.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -1019,6 +1018,7 @@
 		4F1CB6400D640DA40073A1E6 /* get-info-advanced.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 4F1CB63C0D640DA40073A1E6 /* get-info-advanced.tiff */; };
 		4F1CB6410D640DA40073A1E6 /* get-info-events.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 4F1CB63D0D640DA40073A1E6 /* get-info-events.tiff */; };
 		4F1CB64C0D640F4F0073A1E6 /* ContactInfoInspector.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4F1CB64B0D640F4F0073A1E6 /* ContactInfoInspector.xib */; };
+		5A0BBC4317400544002A7BE0 /* emoticons_menu at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0BBC4217400544002A7BE0 /* emoticons_menu at 2x.png */; };
 		5A0D236A16F4C7BC005DF211 /* STTwitterAppOnly.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D236816F4C7BC005DF211 /* STTwitterAppOnly.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
 		5A1781860EC1215D00BA1E04 /* AIAutoScrollTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1781850EC1215D00BA1E04 /* AIAutoScrollTextView.m */; };
 		5A17D65D130F76B4002C852F /* AIGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A17D65C130F76B4002C852F /* AIGradientView.m */; };
@@ -1357,6 +1357,9 @@
 		76731DE515F90582007728C3 /* libgpgerror.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE115F90538007728C3 /* libgpgerror.framework */; };
 		767870E41634045D00BD0E4D /* AIMessageViewTopBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 767870E31634045C00BD0E4D /* AIMessageViewTopBarController.m */; };
 		76889DEB12D3CA17007AEF00 /* get-info.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 76889DEA12D3CA17007AEF00 /* get-info.tiff */; };
+		76980AC1173E6C8800FBDA15 /* libidn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76980AC0173E6C8800FBDA15 /* libidn.framework */; };
+		76980AC5173E6CA700FBDA15 /* libidn.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 76980AC0173E6C8800FBDA15 /* libidn.framework */; };
+		769D634B17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 769D634A17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib */; };
 		76A79E0B16349477007A0497 /* AIGroupChat.h in Headers */ = {isa = PBXBuildFile; fileRef = 76A79E0916349477007A0497 /* AIGroupChat.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		76A79E0C16349477007A0497 /* AIGroupChat.m in Sources */ = {isa = PBXBuildFile; fileRef = 76A79E0A16349477007A0497 /* AIGroupChat.m */; };
 		76AA110C1635585E00A6EC4B /* AIAccountSelectionTopBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76AA11091635585E00A6EC4B /* AIAccountSelectionTopBar.xib */; };
@@ -1365,6 +1368,7 @@
 		76B8B8EC16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76B8B8EA16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.m */; };
 		76B8B8ED16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76B8B8EB16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.xib */; };
 		76C1AF9C125A906A00D269A9 /* AIAdiumURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 76C1AF9B125A906A00D269A9 /* AIAdiumURLProtocol.m */; };
+		76FBDAC91733B9CA00C9F10B /* STTwitterHTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FBDAC61733B9C900C9F10B /* STTwitterHTML.m */; };
 		76FF925A14B524B40043E23B /* AIIRCConsoleController.h in Headers */ = {isa = PBXBuildFile; fileRef = 76FF925814B524B40043E23B /* AIIRCConsoleController.h */; };
 		76FF925B14B524B40043E23B /* AIIRCConsoleController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76FF925914B524B40043E23B /* AIIRCConsoleController.m */; };
 		76FF926414B62A980043E23B /* AIConsole.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76FF926314B62A980043E23B /* AIConsole.xib */; };
@@ -1414,6 +1418,11 @@
 		9719C92F1530EE4800217FBE /* FriBidi.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9719C92B1530EDF700217FBE /* FriBidi.framework */; };
 		9719C9301530EE4800217FBE /* ShortcutRecorder.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 9719C92D1530EE0C00217FBE /* ShortcutRecorder.framework */; };
 		9722ABC813257D7F00CAB486 /* ContactListWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9722ABC713257D7F00CAB486 /* ContactListWindow.xib */; };
+		972AB3A11493CF2300381105 /* emoticons_menu.png in Resources */ = {isa = PBXBuildFile; fileRef = 974C7524148570E2000686BA /* emoticons_menu.png */; };
+		972AB3A21493D1BA00381105 /* MessageViewEmoticonsMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 974C752C148578F6000686BA /* MessageViewEmoticonsMenu.xib */; };
+		97483A011486DD87002D1FA8 /* AIMessageEntryTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B5827E90613CE9D0004BD25 /* AIMessageEntryTextView.m */; };
+		97483A051486E92C002D1FA8 /* AIMessageViewEmoticonsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 974C753314857BF4000686BA /* AIMessageViewEmoticonsController.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		97483A061486E93E002D1FA8 /* AIMessageViewEmoticonsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 974C753414857BF4000686BA /* AIMessageViewEmoticonsController.m */; };
 		9760D24613E49A560031FA1A /* AboutDialog_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 9760D24513E49A560031FA1A /* AboutDialog_bg.png */; };
 		97AF5CDB13191DE200550C41 /* AIContactListUserPictureMenuController.m in Sources */ = {isa = PBXBuildFile; fileRef = 97AF5CDA13191DE200550C41 /* AIContactListUserPictureMenuController.m */; };
 		97AF5CF413191E9A00550C41 /* ContactListChangeUserPictureMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 97AF5CF313191E9A00550C41 /* ContactListChangeUserPictureMenu.xib */; };
@@ -1678,6 +1687,7 @@
 				11EE1CCF0CDD01120097F246 /* libglib.framework in Copy Frameworks */,
 				11EE1CD00CDD01120097F246 /* libgmodule.framework in Copy Frameworks */,
 				11EE1CD10CDD01120097F246 /* libgobject.framework in Copy Frameworks */,
+				76980AC5173E6CA700FBDA15 /* libidn.framework in Copy Frameworks */,
 				11EE1CD20CDD01120097F246 /* libgthread.framework in Copy Frameworks */,
 				7664EAA6162E0874008CF995 /* libffi.framework in Copy Frameworks */,
 				11EE1CD30CDD01120097F246 /* libintl.framework in Copy Frameworks */,
@@ -3867,6 +3877,7 @@
 		4F1CB63C0D640DA40073A1E6 /* get-info-advanced.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "get-info-advanced.tiff"; path = "Resources/get-info-advanced.tiff"; sourceTree = "<group>"; };
 		4F1CB63D0D640DA40073A1E6 /* get-info-events.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "get-info-events.tiff"; path = "Resources/get-info-events.tiff"; sourceTree = "<group>"; };
 		4F1CB64B0D640F4F0073A1E6 /* ContactInfoInspector.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = ContactInfoInspector.xib; path = Resources/ContactInfoInspector.xib; sourceTree = "<group>"; };
+		5A0BBC4217400544002A7BE0 /* emoticons_menu at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "emoticons_menu at 2x.png"; path = "Resources/emoticons_menu at 2x.png"; sourceTree = "<group>"; };
 		5A0D236816F4C7BC005DF211 /* STTwitterAppOnly.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = STTwitterAppOnly.m; path = "Plugins/Twitter Plugin/STTwitter/STTwitterAppOnly.m"; sourceTree = "<group>"; };
 		5A0D236916F4C7BC005DF211 /* STTwitterAppOnly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STTwitterAppOnly.h; path = "Plugins/Twitter Plugin/STTwitter/STTwitterAppOnly.h"; sourceTree = "<group>"; };
 		5A1781840EC1215D00BA1E04 /* AIAutoScrollTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIAutoScrollTextView.h; path = Source/AIAutoScrollTextView.h; sourceTree = "<group>"; };
@@ -4418,6 +4429,8 @@
 		767870E21634045C00BD0E4D /* AIMessageViewTopBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIMessageViewTopBarController.h; path = Source/AIMessageViewTopBarController.h; sourceTree = "<group>"; };
 		767870E31634045C00BD0E4D /* AIMessageViewTopBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIMessageViewTopBarController.m; path = Source/AIMessageViewTopBarController.m; sourceTree = "<group>"; };
 		76889DEA12D3CA17007AEF00 /* get-info.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "get-info.tiff"; path = "Resources/get-info.tiff"; sourceTree = "<group>"; };
+		76980AC0173E6C8800FBDA15 /* libidn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libidn.framework; path = Frameworks/libidn.framework; sourceTree = "<group>"; };
+		769D634A17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AMPurpleJabberDiscoveryBrowser.xib; path = "Plugins/Purple Service/AMPurpleJabberDiscoveryBrowser.xib"; sourceTree = "<group>"; };
 		76A79E0916349477007A0497 /* AIGroupChat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIGroupChat.h; path = "Frameworks/Adium Framework/Source/AIGroupChat.h"; sourceTree = "<group>"; };
 		76A79E0A16349477007A0497 /* AIGroupChat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIGroupChat.m; path = "Frameworks/Adium Framework/Source/AIGroupChat.m"; sourceTree = "<group>"; };
 		76AA11091635585E00A6EC4B /* AIAccountSelectionTopBar.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AIAccountSelectionTopBar.xib; path = "Plugins/Dual Window Interface/AIAccountSelectionTopBar.xib"; sourceTree = "<group>"; };
@@ -4430,6 +4443,10 @@
 		76B8B8EB16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AIOTRTopBarLoggingWarningController.xib; path = Source/AIOTRTopBarLoggingWarningController.xib; sourceTree = "<group>"; };
 		76C1AF9A125A906A00D269A9 /* AIAdiumURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIAdiumURLProtocol.h; path = "Plugins/WebKit Message View/AIAdiumURLProtocol.h"; sourceTree = "<group>"; };
 		76C1AF9B125A906A00D269A9 /* AIAdiumURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIAdiumURLProtocol.m; path = "Plugins/WebKit Message View/AIAdiumURLProtocol.m"; sourceTree = "<group>"; };
+		76FBDAC51733B9C900C9F10B /* STTwitterHTML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STTwitterHTML.h; path = "Plugins/Twitter Plugin/STTwitter/STTwitterHTML.h"; sourceTree = "<group>"; };
+		76FBDAC61733B9C900C9F10B /* STTwitterHTML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = STTwitterHTML.m; path = "Plugins/Twitter Plugin/STTwitter/STTwitterHTML.m"; sourceTree = "<group>"; };
+		76FBDAC71733B9C900C9F10B /* STTwitterOAuthOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STTwitterOAuthOSX.h; path = "Plugins/Twitter Plugin/STTwitter/STTwitterOAuthOSX.h"; sourceTree = "<group>"; };
+		76FBDAC81733B9C900C9F10B /* STTwitterOAuthOSX.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = STTwitterOAuthOSX.m; path = "Plugins/Twitter Plugin/STTwitter/STTwitterOAuthOSX.m"; sourceTree = "<group>"; };
 		76FF925814B524B40043E23B /* AIIRCConsoleController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIIRCConsoleController.h; path = "Plugins/Purple Service/AIIRCConsoleController.h"; sourceTree = "<group>"; };
 		76FF925914B524B40043E23B /* AIIRCConsoleController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIIRCConsoleController.m; path = "Plugins/Purple Service/AIIRCConsoleController.m"; sourceTree = "<group>"; };
 		76FF926314B62A980043E23B /* AIConsole.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = AIConsole.xib; path = "Frameworks/Adium Framework/Resources/AIConsole.xib"; sourceTree = "<group>"; };
@@ -4482,6 +4499,10 @@
 		9719C92B1530EDF700217FBE /* FriBidi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FriBidi.framework; path = Frameworks/FriBidi.framework; sourceTree = "<group>"; };
 		9719C92D1530EE0C00217FBE /* ShortcutRecorder.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ShortcutRecorder.framework; path = Frameworks/ShortcutRecorder.framework; sourceTree = "<group>"; };
 		9722ABC713257D7F00CAB486 /* ContactListWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ContactListWindow.xib; path = Resources/ContactListWindow.xib; sourceTree = "<group>"; };
+		974C7524148570E2000686BA /* emoticons_menu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = emoticons_menu.png; path = Resources/emoticons_menu.png; sourceTree = "<group>"; };
+		974C752C148578F6000686BA /* MessageViewEmoticonsMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MessageViewEmoticonsMenu.xib; path = Resources/MessageViewEmoticonsMenu.xib; sourceTree = "<group>"; };
+		974C753314857BF4000686BA /* AIMessageViewEmoticonsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIMessageViewEmoticonsController.h; path = Source/AIMessageViewEmoticonsController.h; sourceTree = "<group>"; };
+		974C753414857BF4000686BA /* AIMessageViewEmoticonsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIMessageViewEmoticonsController.m; path = Source/AIMessageViewEmoticonsController.m; sourceTree = "<group>"; };
 		9760D24513E49A560031FA1A /* AboutDialog_bg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AboutDialog_bg.png; path = Resources/AboutDialog_bg.png; sourceTree = "<group>"; };
 		979AA6A514D59DC8008730DF /* AIBoolToControlTextColorTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIBoolToControlTextColorTransformer.h; path = "Frameworks/Adium Framework/Source/AIBoolToControlTextColorTransformer.h"; sourceTree = "<group>"; };
 		979AA6A614D59DC8008730DF /* AIBoolToControlTextColorTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIBoolToControlTextColorTransformer.m; path = "Frameworks/Adium Framework/Source/AIBoolToControlTextColorTransformer.m"; sourceTree = "<group>"; };
@@ -4787,6 +4808,7 @@
 				811035180CDE783800EC6038 /* SecurityInterface.framework in Frameworks */,
 				633405990F9C2C00003C77A9 /* AIUtilities.framework in Frameworks */,
 				3485D8EB09EB446900232CC4 /* Adium.framework in Frameworks */,
+				76980AC1173E6C8800FBDA15 /* libidn.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -5006,6 +5028,13 @@
 		11C157D504A88DE0008E0C76 /* Emoticons */ = {
 			isa = PBXGroup;
 			children = (
+				11C157D804A88E04008E0C76 /* AIEmoticonController.h */,
+				11C157D904A88E04008E0C76 /* AIEmoticonController.m */,
+				974C753314857BF4000686BA /* AIMessageViewEmoticonsController.h */,
+				974C753414857BF4000686BA /* AIMessageViewEmoticonsController.m */,
+				974C752C148578F6000686BA /* MessageViewEmoticonsMenu.xib */,
+				974C7524148570E2000686BA /* emoticons_menu.png */,
+				5A0BBC4217400544002A7BE0 /* emoticons_menu at 2x.png */,
 				C4243C920638E4EA007AD2D9 /* BGEmoticonMenuPlugin.h */,
 				C4243C930638E4EA007AD2D9 /* BGEmoticonMenuPlugin.m */,
 			);
@@ -5653,6 +5682,7 @@
 		346545090C8F69280046ED68 /* Discovery Browsing */ = {
 			isa = PBXGroup;
 			children = (
+				769D634A17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib */,
 				81DAED500C26F4F700780E4C /* AMPurpleJabberServiceDiscoveryBrowsing.h */,
 				81DAED510C26F4F700780E4C /* AMPurpleJabberServiceDiscoveryBrowsing.m */,
 				3465451A0C8F6A670046ED68 /* AMPurpleJabberServiceDiscoveryBrowserController.h */,
@@ -5842,8 +5872,6 @@
 				34B82C80085A85D800864531 /* AIChatController.m */,
 				F55B415C03AB8B5601A8010A /* AIContentController.h */,
 				F55B415D03AB8B5601A8010A /* AIContentController.m */,
-				11C157D804A88E04008E0C76 /* AIEmoticonController.h */,
-				11C157D904A88E04008E0C76 /* AIEmoticonController.m */,
 				34CA15520CAFDFB2009AA5E3 /* sidebarActionWidget.png */,
 				C6EE434115C0AA6F00A4B96C /* sidebarActionWidget at 2x.png */,
 				34A9707D0C96602200F46006 /* sidebarStatusAreaBackground.png */,
@@ -7346,6 +7374,10 @@
 				5A3B4D7116D878AB00903E40 /* STTwitterOAuth.h */,
 				5A3B4D7216D878AB00903E40 /* STTwitterOAuth.m */,
 				5A3B4D7516D878AB00903E40 /* STTwitterOAuthProtocol.h */,
+				76FBDAC51733B9C900C9F10B /* STTwitterHTML.h */,
+				76FBDAC61733B9C900C9F10B /* STTwitterHTML.m */,
+				76FBDAC71733B9C900C9F10B /* STTwitterOAuthOSX.h */,
+				76FBDAC81733B9C900C9F10B /* STTwitterOAuthOSX.m */,
 				5A3B4D7616D878AC00903E40 /* Vendor */,
 			);
 			name = STTwitter;
@@ -8284,6 +8316,7 @@
 		979AA6A914D59EF3008730DF /* Others */ = {
 			isa = PBXGroup;
 			children = (
+				76980AC0173E6C8800FBDA15 /* libidn.framework */,
 				7664EAA4162E086A008CF995 /* libffi.framework */,
 				76731DE015F90538007728C3 /* libgcrypt.framework */,
 				76731DE115F90538007728C3 /* libgpgerror.framework */,
@@ -9177,6 +9210,7 @@
 				112B47670F82E0FC00690E84 /* AIXtraInfo.h in Headers */,
 				34F17FCE0F8EAC34009C5A39 /* AIListOutlineView+Drawing.h in Headers */,
 				63B0EC9D0F8FBB660062476B /* AIProxyListObject.h in Headers */,
+				97483A051486E92C002D1FA8 /* AIMessageViewEmoticonsController.h in Headers */,
 				76A79E0B16349477007A0497 /* AIGroupChat.h in Headers */,
 				5A6298E31682BD9D00F51DED /* AIAdvancedPreferencePane.h in Headers */,
 			);
@@ -9634,6 +9668,7 @@
 				1150A9960FBE48D600E0BD31 /* ESIRCAccountView.xib in Resources */,
 				34D8153F13B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib in Resources */,
 				5A22D6E214834F44004E15F7 /* AIFacebookXMPPAccountView.xib in Resources */,
+				769D634B17393CBE008B97BC /* AMPurpleJabberDiscoveryBrowser.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -9857,6 +9892,8 @@
 				5A4BD56A13F86B7E00A4D3F7 /* Preferences-Icons.xib in Resources */,
 				5A4BD57F13F86BC500A4D3F7 /* Preferences-General.xib in Resources */,
 				7EC033B214590E0700CF24FB /* MessageWindow.xib in Resources */,
+				972AB3A11493CF2300381105 /* emoticons_menu.png in Resources */,
+				972AB3A21493D1BA00381105 /* MessageViewEmoticonsMenu.xib in Resources */,
 				5A27FA7E14A272330063489D /* pref-messagestyle.png in Resources */,
 				5A1E3A1214DCE60400724574 /* Preferences-Xtras.xib in Resources */,
 				5A8F637614DD1B21008412C8 /* Preferences-Privacy.xib in Resources */,
@@ -9929,6 +9966,7 @@
 				C613B143164112B3006683FF /* events-dock-name.tiff in Resources */,
 				C613B1451641210B006683FF /* events-contact.tiff in Resources */,
 				76B8B8ED16AF3A46009126FE /* AIOTRTopBarLoggingWarningController.xib in Resources */,
+				5A0BBC4317400544002A7BE0 /* emoticons_menu at 2x.png in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -10585,6 +10623,7 @@
 				5A3B4D7E16D878AC00903E40 /* STHTTPRequest.m in Sources */,
 				5A0D236A16F4C7BC005DF211 /* STTwitterAppOnly.m in Sources */,
 				5A4B77E916FBDDC700DF398C /* NSData+Base64.m in Sources */,
+				76FBDAC91733B9CA00C9F10B /* STTwitterHTML.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -10657,7 +10696,6 @@
 				34DC8AD80A7EEEF7003E1636 /* DCJoinChatWindowController.m in Sources */,
 				34DC8ADB0A7EEEF7003E1636 /* AIAccountPlusFieldPromptController.m in Sources */,
 				34DC8ADD0A7EEEF7003E1636 /* AIContextMenuTextView.m in Sources */,
-				34DC8AE10A7EEEF7003E1636 /* AIMessageEntryTextView.m in Sources */,
 				34DC8AE80A7EEEF7003E1636 /* AILocalizationButtonCell.m in Sources */,
 				34DC8AEA0A7EEEF7003E1636 /* AILocalizationTextField.m in Sources */,
 				34DC8AEC0A7EEEF7003E1636 /* AILocalizationButton.m in Sources */,
@@ -10691,6 +10729,8 @@
 				112B47680F82E0FC00690E84 /* AIXtraInfo.m in Sources */,
 				34F17FCF0F8EAC34009C5A39 /* AIListOutlineView+Drawing.m in Sources */,
 				63B0EC9C0F8FBB660062476B /* AIProxyListObject.m in Sources */,
+				97483A011486DD87002D1FA8 /* AIMessageEntryTextView.m in Sources */,
+				97483A061486E93E002D1FA8 /* AIMessageViewEmoticonsController.m in Sources */,
 				76FF926814B62AB80043E23B /* AIConsoleController.m in Sources */,
 				5AEE60011602BAE200304672 /* AIBoolToControlTextColorTransformer.m in Sources */,
 				76A79E0C16349477007A0497 /* AIGroupChat.m in Sources */,
@@ -12388,6 +12428,10 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
 			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
 			};
 			name = Debug;
 		};
@@ -12395,6 +12439,10 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
 			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
 			};
 			name = Release;
 		};
@@ -12402,6 +12450,10 @@
 			isa = XCBuildConfiguration;
 			baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
 			buildSettings = {
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/Frameworks\"",
+				);
 			};
 			name = "Release-Debug";
 		};
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/gfx/Adium-Extra.png
Binary file AdiumHelp/gfx/Adium-Extra.png has changed
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/gfx/Adium-Xtras.png
Binary file AdiumHelp/gfx/Adium-Xtras.png has changed
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/gfx/Chat window-Encryption.png
Binary file AdiumHelp/gfx/Chat window-Encryption.png has changed
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/gfx/pref-sm.png
Binary file AdiumHelp/gfx/pref-sm.png has changed
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/pgs/AdiumDocumentation.html
--- a/AdiumHelp/pgs/AdiumDocumentation.html	Tue May 28 00:24:27 2013 +0200
+++ b/AdiumHelp/pgs/AdiumDocumentation.html	Tue May 28 00:52:55 2013 +0200
@@ -37,7 +37,7 @@
 							<li><a href="Accounts-CreatingAccounts.html">Creating accounts â–¸</a></li>
 							<li><a href="Accounts-ContactIcons.html">Contact icons â–¸</a></li>
 							<li><a href="Accounts-SettingYourStatus.html">Setting your status â–¸</a></li>
-							<li>Specific account use
+							<li>Service-specific information
 								<ul>
 									<li><a href="ServiceInformation-IRCSupport.html">IRC â–¸</a></li>
 									<li><a href="ServiceInformation-TwitterSupport.html">Twitter â–¸</a></li>
@@ -109,11 +109,15 @@
 					<td><ul>
 							<li><a href="AdvancedFeatures-AdiumXtras.html">Adium Xtras â–¸</a></li>
 							<li><a href="AdvancedFeatures-GrowlSupport.html">Growl support â–¸</a></li>
+							<li><a href="AdvancedFeatures-FileTransfer.html">File transfer â–¸</a></li>
 							<li><a href="AdvancedFeatures-AddressBookIntegration.html">Address Book integration â–¸</a></li>
-							<li><a href="AdvancedFeatures-FileTransfer.html">File transfer â–¸</a></li>
-							<li><a href="AdvancedFeatures-DirectConnect.html">AIM: Direct Connect â–¸</a></li>
-							<li><a href="AdvancedFeatures-SearchForBuddyBy Email.html">AIM: Search for buddy by email address â–¸</a></li>
-							<li><a href="AdvancedFeatures-NudgeBuzz.html">MSN: Nudge / Yahoo: Buzz â–¸</a></li>
+							<li><a href="AdvancedFeatures-OTREncryption.html">OTR encryption â–¸</a></li>
+							<li>Service-specific information</li>
+							<ul>
+								<li><a href="AdvancedFeatures-DirectConnect.html">AIM: Direct Connect â–¸</a></li>
+								<li><a href="AdvancedFeatures-SearchForBuddyBy Email.html">AIM: Search for buddy by email address â–¸</a></li>
+								<li><a href="AdvancedFeatures-NudgeBuzz.html">MSN: Nudge / Yahoo: Buzz â–¸</a></li>
+							</ul>
 						</ul></td>
 				</tr>
 			</table>
@@ -144,7 +148,7 @@
 	</div>
 <div class="taskboxline">
 		<div class="taskboxheader">
-			<h3>Information about the services supported</h3>
+			<h3>Services supported</h3>
 		</div>
 		<div class="taskboxtable">
 			<table width="100%" border="0" cellspacing="0" cellpadding="0" summary="One column table with heading">
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html
--- a/AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html	Tue May 28 00:24:27 2013 +0200
+++ b/AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html	Tue May 28 00:52:55 2013 +0200
@@ -23,7 +23,7 @@
 			<h3>Installing Adium Xtras</h3>
 		</div>
 		<div class="taskboxtext">
-			<p>To install an Xtra from the <a class="ext_link" href="http://xtras.adium.im/">AdiumXtras website</a>, click the install link on the Xtra's webpage. To install an extra that you have already downloaded, simply doubleclick it. In either case, Adium will launch and put the Xtra into the correct place for you.</p>
+			<p>To install an Xtra from the <a class="ext_link" href="http://xtras.adium.im/">AdiumXtras website</a>, click the install link on the Xtra's webpage. To install an Xtra that you have already downloaded, simply doubleclick it. In either case, Adium will launch and put the Xtra into the correct place for you.</p>
 		</div>
 	</div>
 	<div class="taskboxline">
@@ -32,7 +32,7 @@
 		</div>
 		<div class="taskboxtext">
 			<p>Xtras are stored in subfolders of this folder: (Your Home Folder)/Library/Application Support/Adium 2.0. Each folder contains a different type of Xtra.</p>
-			<p align="center"> <img src="../gfx/Adium-Extra.png" alt="" width="400" height="112" /></p>
+			<p align="center"> <img src="../gfx/Adium-Xtras.png" alt="" width="400" height="112" /></p>
 			<ul>
 				<li>Contact List - Contact list layouts and themes (<a href="AdvancedFeatures-AdiumXtras-ListLayouts.html">.ListLayout</a>, <a href="AdvancedFeatures-AdiumXtras-ListTheme.html">.ListTheme</a>)</li>
 				<li>Dock Icons - Dock-icon packs (<a href="AdvancedFeatures-AdiumXtras-DockIcons.html">.AdiumIcon</a>)</li>
diff -r 88cdaeb864d1 -r 0fbb04961745 AdiumHelp/pgs/AdvancedFeatures-OTREncryption.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AdiumHelp/pgs/AdvancedFeatures-OTREncryption.html	Tue May 28 00:52:55 2013 +0200
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<meta name="keywords" content="otr, encryption, off-the-record" />
+<meta name="description" content="otr encryption" />
+<title>OTR encryption</title>
+<link href="../css/topicpage.css" type="text/css" rel="stylesheet" media="all" />
+</head>
+<body>
+<div id="banner"> <a name="tabs" id="tabs"></a>
+	<div id="navleft"><a class="navleftsty" href="../AdiumHelp.html">Adium Help</a> <a class="navleftsty" href="AdiumDocumentation.html">Adium Documentation</a></div>
+</div>
+<div id="mainbox">
+	<div id="caticon"> <img src="../gfx/AdiumIcon.png" alt="Adium Icon" height="32" width="32" border="0" /> </div>
+	<div id="pagetitle">
+		<h1>OTR encryption</h1>
+	</div>
+	<p><a href="http://www.cypherpunks.ca/otr/">Off-the-Record (OTR) Messaging</a> enables you to have private conversations over instant messaging. According to the OTR Development Team, it aims to provide the following:</p>
+	<ul>
+		<li>"Encryption: No one else can read your instant messages."</li>
+		<li>"Authentication: You are assured the correspondent is who you think it is."</li>
+		<li>"Deniability: The messages you send do not have digital signatures that are checkable by a third party. Anyone can forge messages after a conversation to make them look like they came from you. However, during a conversation, your correspondent is assured the messages he sees are authentic and unmodified."</li>
+		<li>"Perfect forward secrecy: If you lose control of your private keys, no previous conversation is compromised."</li>
+	</ul>
+	<div class="taskboxline">
+		<div class="taskboxheader">
+			<h3>Setup</h3>
+		</div>
+		<div class="taskboxtext">
+			<ul>
+				<li>Generate an OTR fingerprint:</li>
+			<ol>
+				<li>Open the preferences, accessible via the <strong>Adium</strong> menu in the menu bar, and select the <strong>Encryption</strong> pane.</li>
+				<li>Click the <strong>Generate</strong> button. This fingerprint is unique for the account selected in the dropdown.</li>
+			</ol>
+				<li>Make sure you have the "Encryption" (lock) item in the chat window's toolbar. If not, click "Customise Toolbar..." from the <strong>View</strong> menu and add it.</li>
+			</ul>
+			<p align="center"> <img src="../gfx/Chat window-Encryption.png" alt="" width="" height="" /></p>
+		</div>
+	</div>
+	<div class="taskboxline">
+		<div class="taskboxheader">
+			<h3>Initiating an OTR-encrypted chat</h3>
+		</div>
+		<div class="taskboxtext">
+			<p></p>
+			<ol>
+				<li>Open a chat with the contact with whom you want to have a private conversation.</li>
+				<li>Notice the "Encryption" item in the toolbar appears unlocked. It signifies the chat currently is not encrypted. Click the icon and select "Initiate Encrypted OTR Chat".</li>
+				<li>You will be prompted to verify the fingerprint. If you are certain of its trustworthy origin click "Accept".</li>
+				<li>Notice the previously unlocked icon is now locked and the message "Encrypted OTR chat initiated" is displayed in the message view.</li>
+			</ol>
+		</div>
+	</div>
+	<div class="taskboxline">
+		<div class="taskboxheader">
+			<h3>Encryption settings</h3>
+		</div>
+		<div class="taskboxtext">
+			<p>There are four different settings which can be adjusted on a per-account and on a per-contact basis: "Disable chat encryption", "Encrypt chats as requested", "Encrypt chats automatically" and "Force encryption and refuse plaintext".</p>
+			<p><strong>Per-account</strong></p>
+			<ul>
+				<li>Open preferences, select the <strong>Accounts</strong> pane and double-click the account.</li>
+				<li>Click the "Privacy" tab and choose your option for this account from the dropdown.</li>
+			</ul>
+			<p><strong>Per-contact</strong></p>
+			<ul>
+				<li>In the chat window/tab you have open with the contact in question, click the lock in the toolbar and choose your option via "Encryption Settings".</li>
+			</ul>
+		</div>
+	</div>
+	<div class="taskboxline">
+		<div class="taskboxheader">
+			<h3>Disabling chat logging on your computer</h3>
+		</div>
+		<div class="taskboxtext">
+			<p>By default, Adium stores all of your chats locally. You might want to disable logging of chats on your computer entirely or just for OTR-encrypted chats or specific accounts.</p>
+			<ul>
+				<li>Open preferences, select the <strong>Messages</strong> pane.</li>
+				<li>Tick the appropriate checkboxes.</li>
+			</ul>
+		</div>
+	</div>
+</div>
+<script type="text/javascript" src="../js/help.js"></script>
+</body>
+</html>
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AIColorAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIColorAdditions.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AIColorAdditions.m	Tue May 28 00:52:55 2013 +0200
@@ -151,26 +151,9 @@
 
 + (NSDictionary *)colorNamesDictionary
 {
-	if (!RGBColorValues) {
-		RGBColorValues = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
-						  [NSColor colorWithHTMLString:@"#000"],    @"black",
-						  [NSColor colorWithHTMLString:@"#c0c0c0"], @"silver",
-						  [NSColor colorWithHTMLString:@"#808080"], @"gray",
-						  [NSColor colorWithHTMLString:@"#808080"], @"grey",
-						  [NSColor colorWithHTMLString:@"#fff"],    @"white",
-						  [NSColor colorWithHTMLString:@"#800000"], @"maroon",
-						  [NSColor colorWithHTMLString:@"#f00"],    @"red",
-						  [NSColor colorWithHTMLString:@"#800080"], @"purple",
-						  [NSColor colorWithHTMLString:@"#f0f"],    @"fuchsia",
-						  [NSColor colorWithHTMLString:@"#008000"], @"green",
-						  [NSColor colorWithHTMLString:@"#0f0"],    @"lime",
-						  [NSColor colorWithHTMLString:@"#808000"], @"olive",
-						  [NSColor colorWithHTMLString:@"#ff0"],    @"yellow",
-						  [NSColor colorWithHTMLString:@"#000080"], @"navy",
-						  [NSColor colorWithHTMLString:@"#00f"],    @"blue",
-						  [NSColor colorWithHTMLString:@"#008080"], @"teal",
-						  [NSColor colorWithHTMLString:@"#0ff"],    @"aqua",
-						  nil];
+	static dispatch_once_t onceToken;
+	dispatch_once(&onceToken, ^{
+		RGBColorValues = [[NSMutableDictionary alloc] init];
 		NSArray *paths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:defaultRGBTxtLocation1 error:NULL];
 		for (NSString *middlePath in paths) {
 			NSString *path = [defaultRGBTxtLocation1 stringByAppendingPathComponent:[middlePath stringByAppendingPathComponent:defaultRGBTxtLocation2]];
@@ -183,7 +166,29 @@
 				break;
 			}
 		}
-	}
+		[RGBColorValues addEntriesFromDictionary:@{
+		 @"black": [NSColor colorWithHTMLString:@"#000"],
+		 @"silver": [NSColor colorWithHTMLString:@"#c0c0c0"],
+		 @"gray": [NSColor colorWithHTMLString:@"#808080"],
+		 @"grey": [NSColor colorWithHTMLString:@"#808080"],
+		 @"white": [NSColor colorWithHTMLString:@"#fff"],
+		 @"maroon": [NSColor colorWithHTMLString:@"#800000"],
+		 @"red": [NSColor colorWithHTMLString:@"#f00"],
+		 @"purple": [NSColor colorWithHTMLString:@"#800080"],
+		 @"fuchsia": [NSColor colorWithHTMLString:@"#f0f"],
+		 @"green": [NSColor colorWithHTMLString:@"#008000"],
+		 @"lime": [NSColor colorWithHTMLString:@"#0f0"],
+		 @"olive": [NSColor colorWithHTMLString:@"#808000"],
+		 @"yellow": [NSColor colorWithHTMLString:@"#ff0"],
+		 @"navy": [NSColor colorWithHTMLString:@"#000080"],
+		 @"blue": [NSColor colorWithHTMLString:@"#00f"],
+		 @"teal": [NSColor colorWithHTMLString:@"#008080"],
+		 @"aqua": [NSColor colorWithHTMLString:@"#0ff"],
+		 @"indigo": [NSColor colorWithHTMLString:@"#4b0082"],
+		 @"crimson": [NSColor colorWithHTMLString:@"#dc143c"]
+		 }];
+	});
+	
 	return RGBColorValues;
 }
 
@@ -534,7 +539,9 @@
 		NSDictionary *colorValues = [self colorNamesDictionary];
 		colorValue = [colorValues objectForKey:str];
 		if (!colorValue) colorValue = [colorValues objectForKey:[str lowercaseString]];
-		if (!colorValue) {
+		if (colorValue) {
+			return colorValue;
+		} else {
 #if COLOR_DEBUG
 			NSLog(@"+[NSColor(AIColorAdditions) colorWithHTMLString:] called with unrecognised color name (str is %@); returning %@", str, defaultColor);
 #endif
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AICompletingTextField.m
--- a/Frameworks/AIUtilities Framework/Source/AICompletingTextField.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AICompletingTextField.m	Tue May 28 00:52:55 2013 +0200
@@ -220,10 +220,9 @@
 	
 	[possibleCompletions release];
 	
+	//When the AICompletingTextfield is modified to be able to provide multiple choices of completions, the entire array can be used later.
 	if ([sortedArray count] > 0){
 		return [sortedArray objectAtIndex:0];
-		//When the AICompletingTextfield is modified to be able to provide multiple choices of completions, the entire array can be used later.
-		//return sortedArray;
 	}
 	
 	return nil;
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AIDateFormatterAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIDateFormatterAdditions.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AIDateFormatterAdditions.m	Tue May 28 00:52:55 2013 +0200
@@ -609,8 +609,6 @@
 			[newFormat appendString:@"%%"];
 			[scanner setScanLocation:[scanner scanLocation] - [span length] + 1];
 		
-		} else {
-			//NSLog(@"Unhandled format %@", span);
 		}
 	}
 
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AIImageViewWithImagePicker.m
--- a/Frameworks/AIUtilities Framework/Source/AIImageViewWithImagePicker.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AIImageViewWithImagePicker.m	Tue May 28 00:52:55 2013 +0200
@@ -263,7 +263,7 @@
 	
 	//Draw our original image as 50% transparent
 	[dragImage lockFocus];
-	[[self image] dissolveToPoint:NSZeroPoint fraction:0.5f];
+	[[self image] drawAtPoint:NSZeroPoint fromRect:NSMakeRect(0, 0, self.image.size.width, self.image.size.height) operation:NSCompositeCopy fraction:0.5f];
 	[dragImage unlockFocus];
 	
 	//We want the image to resize
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m
--- a/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AISmoothTooltipTracker.m	Tue May 28 00:52:55 2013 +0200
@@ -276,12 +276,8 @@
 #if LOG_TRACKING_INFO
 	NSLog(@"%@: Visible: %i ; Point %@ in %@ = %i", self,
 		  [[view window] isVisible],
-/*		  NSStringFromPoint([[view superview] convertPoint:[[view window] convertScreenToBase:mouseLocation] fromView:[[view window] contentView]]),*/
 		  NSStringFromPoint([[view window] convertScreenToBase:mouseLocation]),
-/*		  NSStringFromRect([view frame]),*/
 		  NSStringFromRect([[[view window] contentView] convertRect:[view frame] fromView:[view superview]]),
-/*		  NSPointInRect([[view window] convertScreenToBase:mouseLocation], [view frame])*/
-		  /*NSPointInRect([[view superview] convertPoint:[[view window] convertScreenToBase:mouseLocation] fromView:[[view window] contentView]],[view frame])*/
 		  NSPointInRect([[view window] convertScreenToBase:mouseLocation],[[[view window] contentView] convertRect:[view frame] fromView:[view superview]]));
 #endif
 	
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AIStringAdditions.m
--- a/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AIStringAdditions.m	Tue May 28 00:52:55 2013 +0200
@@ -283,82 +283,6 @@
 	return [string autorelease];
 }
 
-//- (NSString *)stringByEncodingURLEscapes
-//{
-//    NSScanner *s = [NSScanner scannerWithString:self];
-//    NSCharacterSet *notUrlCode = [[NSCharacterSet characterSetWithCharactersInString:
-//        @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),;/?:@=&"] 		invertedSet];
-//    NSMutableString *encodedString = [[NSMutableString alloc] initWithString:@""];
-//    NSString *read;
-//    
-//    while (![s isAtEnd])
-//    {
-//        [s scanUpToCharactersFromSet:notUrlCode intoString:&read];
-//        if (read)
-//            [encodedString appendString:read];
-//        if (![s isAtEnd])
-//        {
-//            [encodedString appendFormat:@"%%%x", [self characterAtIndex:[s scanLocation]]];
-//            [s setScanLocation:[s scanLocation]+1];
-//        }
-//    }
-//    
-//    return [encodedString autorelease];
-//}
-//
-//- (NSString *)stringByDecodingURLEscapes
-//{
-//    NSScanner *s = [NSScanner scannerWithString:self];
-//    NSMutableString *decodedString = [[NSMutableString alloc] initWithString:@""];
-//    NSString *read;
-//    
-//    while (![s isAtEnd])
-//    {
-//        [s scanUpToString:@"%" intoString:&read];
-//        if (read)
-//            [decodedString appendString:read];
-//        if (![s isAtEnd])
-//        {
-//            [decodedString appendString:[NSString stringWithFormat:@"%c", 
-//                [[NSString stringWithFormat:@"%li",
-//                    strtol([[self substringWithRange:NSMakeRange([s scanLocation]+1, 2)] cString], 
-//                        NULL, 16)] 
-//                intValue]]];
-//                
-//            [s setScanLocation:[s scanLocation]+3];
-//
-//        }
-//    }
-//    return [decodedString autorelease];
-//
-//}
-//
-//- (BOOL)isURLEncoded
-//{
-//    NSCharacterSet *notUrlCode = [[NSCharacterSet characterSetWithCharactersInString:
-//        @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),;/?:@=&"] 		invertedSet];
-//    NSCharacterSet *notHexSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCEFabcdef"]
-//        invertedSet];
-//    NSScanner *s = [NSScanner scannerWithString:self]; 
-//    
-//    if ([self rangeOfCharacterFromSet:notUrlCode].location != NSNotFound)
-//        return NO;
-//    
-//    while (![s isAtEnd])
-//    {
-//        [s scanUpToString:@"%" intoString:nil];
-//        
-//        if ([[self substringWithRange:NSMakeRange([s scanLocation]+1, 2)] rangeOfCharacterFromSet:notHexSet].location != NSNotFound)
-//            return NO;
-//    }
-//    
-//    return YES;
-//}
-
-
-
-
-
 //stringByEncodingURLEscapes
 // Percent escape all characters except for a-z, A-Z, 0-9, '_', and '-'
 // Convert spaces to '+'
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/AIUtilities Framework/Source/AITextViewWithPlaceholder.m
--- a/Frameworks/AIUtilities Framework/Source/AITextViewWithPlaceholder.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/AIUtilities Framework/Source/AITextViewWithPlaceholder.m	Tue May 28 00:52:55 2013 +0200
@@ -24,9 +24,6 @@
 
 - (void)setPlaceholderString:(NSString *)inPlaceholderString
 {
-  //  NSDictionary *attributes;
-	
-//	attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSColor grayColor], NSForegroundColorAttributeName, nil];
 	[self setPlaceholder:[[[NSAttributedString alloc] initWithString:inPlaceholderString
 														  attributes:nil] autorelease]];
 }
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIAbstractListController.m
--- a/Frameworks/Adium Framework/Source/AIAbstractListController.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAbstractListController.m	Tue May 28 00:52:55 2013 +0200
@@ -610,11 +610,20 @@
 		id<AIContainingObject> listObject = (id<AIContainingObject>)(item.listObject);
 		proxyListObject = [AIProxyListObject proxyListObjectForListObject:[listObject visibleObjectAtIndex:idx]
 															 inListObject:listObject];
-
-	} else if (hideRoot)
-		proxyListObject = [AIProxyListObject proxyListObjectForListObject:[contactList visibleObjectAtIndex:idx]
-															 inListObject:contactList];
-	else
+		
+	} else if (hideRoot) {
+		if ([contactList isKindOfClass:[AIGroupChat class]]) {
+			NSString *nick = [(AIGroupChat *)contactList visibleObjectAtIndex:idx];
+			AIListObject *listObject = [(AIGroupChat *)contactList contactForNick:nick];
+			
+			proxyListObject = [AIProxyListObject proxyListObjectForListObject:listObject
+																 inListObject:contactList
+																	 withNick:nick];
+		} else {
+			proxyListObject = [AIProxyListObject proxyListObjectForListObject:[contactList visibleObjectAtIndex:idx]
+																 inListObject:contactList];
+		}
+	} else
 		proxyListObject = [AIProxyListObject proxyListObjectForListObject:contactList
 															 inListObject:nil];
 	
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIAccount.m
--- a/Frameworks/Adium Framework/Source/AIAccount.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAccount.m	Tue May 28 00:52:55 2013 +0200
@@ -1183,7 +1183,6 @@
 		}
 		
 		AIChat *newChat = [adium.chatController chatWithContact:contact];
-		//		NSLog(@"Making new chat %@ in chat window %@:%@",newChat,chatWindowController,[chatWindowController containerID]);
 		[adium.interfaceController openChat:newChat inContainerWithID:[chatWindowController containerID] atIndex:index];
 		return newChat;
 	} else {
@@ -1204,7 +1203,6 @@
 			[newParticipants addObject:[[participants objectAtIndex:i] objectsByEvaluatingSpecifier]];
 		}
 		
-		//AIChat *newChat = [adium.chatController chatWithName:name identifier:nil onAccount:self chatCreationInfo:nil];
 		DCJoinChatViewController *chatController = [DCJoinChatViewController joinChatView];
 		[chatController doJoinChatWithName:name onAccount:self chatCreationInfo:nil invitingContacts:newParticipants withInvitationMessage:@"Hey, wanna join my chat?"];
 		return [adium.chatController existingChatWithName:name onAccount:self];
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIAddressBookUserIconSource.m
--- a/Frameworks/Adium Framework/Source/AIAddressBookUserIconSource.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAddressBookUserIconSource.m	Tue May 28 00:52:55 2013 +0200
@@ -137,7 +137,6 @@
 	if (useABImages) {
 		NSNumber		*tagNumber;
 		NSImage			*image;
-		//		AIListContact	*parentContact;
 		NSString		*uniqueID;
 		id				setOrObject;
 		
@@ -164,7 +163,7 @@
 						 asynchronously:YES
 							  forObject:listObject];
 			
-		} else /*if ([setOrObject isKindOfClass:[NSSet class]])*/{
+		} else {
 			//Apply the image to each listObject at the appropriate priority
 			for (AIListObject *listObject in [[(NSSet *)setOrObject copy] autorelease]) {
 				[AIUserIcons userIconSource:self
@@ -224,7 +223,7 @@
 				[trackingDict setObject:objectSet forKey:tagNumber];
 			}
 
-		} else /*if ([previousValue isKindOfClass:[NSMutableSet class]])*/{
+		} else {
 			//Add the new object to the previously-created set
 			[(NSMutableSet *)previousValue addObject:inObject];
 		}
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIChat.m
--- a/Frameworks/Adium Framework/Source/AIChat.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIChat.m	Tue May 28 00:52:55 2013 +0200
@@ -641,6 +641,7 @@
 		AIContentMessage	*messageContent;
 		messageContent = [AIContentMessage messageInChat:self
 											  withSource:self.account
+											  sourceNick:nil
 											 destination:self.listObject
 													date:nil
 												 message:attributedMessage
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentMessage.h
--- a/Frameworks/Adium Framework/Source/AIContentMessage.h	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentMessage.h	Tue May 28 00:52:55 2013 +0200
@@ -45,7 +45,15 @@
 		 withSource:(id)inSource
 		destination:(id)inDest
 			   date:(NSDate *)inDate
-			message:(NSAttributedString *)inMessage 
+			message:(NSAttributedString *)inMessage
+		  autoreply:(BOOL)inAutoReply;
+
++ (id)messageInChat:(AIChat *)inChat
+		 withSource:(id)inSource
+		 sourceNick:(NSString *)inSourceNick
+		destination:(id)inDest
+			   date:(NSDate *)inDate
+			message:(NSAttributedString *)inMessage
 		  autoreply:(BOOL)inAutoreply;
 
 /*!	@brief	Create an AIContentMessage.
@@ -56,6 +64,7 @@
  */
 - (id)initWithChat:(AIChat *)inChat
 			source:(id)inSource
+		sourceNick:(NSString *)inSourceNick
 	   destination:(id)inDest
 			  date:(NSDate *)inDate
 		   message:(NSAttributedString *)inMessage
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentMessage.m
--- a/Frameworks/Adium Framework/Source/AIContentMessage.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentMessage.m	Tue May 28 00:52:55 2013 +0200
@@ -23,7 +23,6 @@
 
 @implementation AIContentMessage
 
-//Create a content message
 + (id)messageInChat:(AIChat *)inChat
 		 withSource:(id)inSource
 		destination:(id)inDest
@@ -31,8 +30,27 @@
 			message:(NSAttributedString *)inMessage
 		  autoreply:(BOOL)inAutoReply
 {
+	return [[[self alloc] initWithChat:inChat
+								source:inSource
+							sourceNick:nil
+						   destination:inDest
+								  date:inDate
+							   message:inMessage
+							 autoreply:inAutoReply] autorelease];
+}
+
+//Create a content message
++ (id)messageInChat:(AIChat *)inChat
+		 withSource:(id)inSource
+		 sourceNick:(NSString *)inSourceNick
+		destination:(id)inDest
+			   date:(NSDate *)inDate
+			message:(NSAttributedString *)inMessage
+		  autoreply:(BOOL)inAutoReply
+{
     return [[[self alloc] initWithChat:inChat
 								source:inSource
+							sourceNick:inSourceNick
 						   destination:inDest
 								  date:inDate
 							   message:inMessage
@@ -48,12 +66,13 @@
 //Init
 - (id)initWithChat:(AIChat *)inChat
 			source:(id)inSource
+		sourceNick:(NSString *)inSourceNick
 	   destination:(id)inDest
 			  date:(NSDate *)inDate
 		   message:(NSAttributedString *)inMessage
 		 autoreply:(BOOL)inAutoReply
 {
-	if ((self = [super initWithChat:inChat source:inSource destination:inDest date:inDate message:inMessage])) {
+	if ((self = [super initWithChat:inChat source:inSource sourceNick:inSourceNick destination:inDest date:inDate message:inMessage])) {
 		isAutoreply = inAutoReply;
 		encodedMessage = nil;
 		encodedMessageAccountData = nil;
@@ -78,7 +97,7 @@
 	[classes addObject:@"message"];
 	if(isAutoreply) [classes addObject:@"autoreply"];
 	if(self.chat.isGroupChat) {
-		AIGroupChatFlags flags = [(AIGroupChat *)self.chat flagsForContact:(AIListContact *)self.source];
+		AIGroupChatFlags flags = [(AIGroupChat *)self.chat flagsForNick:self.sourceNick];
 		if (flags & AIGroupChatOp)
 			[classes addObject:@"op"];
 		if (flags & AIGroupChatHalfOp)
@@ -95,7 +114,7 @@
 {
     if (!self.chat.isGroupChat) return @"";
     
-	AIGroupChatFlags flags = [(AIGroupChat *)self.chat flagsForContact:(AIListContact *)self.source];
+	AIGroupChatFlags flags = [(AIGroupChat *)self.chat flagsForNick:self.sourceNick];
 	
 	if ((flags & AIGroupChatFounder) == AIGroupChatFounder) {
 		return @"~";
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentObject.h
--- a/Frameworks/Adium Framework/Source/AIContentObject.h	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentObject.h	Tue May 28 00:52:55 2013 +0200
@@ -38,6 +38,7 @@
     AIChat				*chat;
     AIListObject		*source;
     AIListObject		*destination;
+	NSString			*sourceNick;
     BOOL				outgoing;
     
 	NSAttributedString	*message;
@@ -86,6 +87,13 @@
 			  date:(NSDate*)inDate
 		   message:(NSAttributedString *)inMessage;
 
+- (id)initWithChat:(AIChat *)inChat
+			source:(AIListObject *)inSource
+		sourceNick:(NSString *)inSourceNick
+	   destination:(AIListObject *)inDest
+			  date:(NSDate*)inDate
+		   message:(NSAttributedString *)inMessage;
+
 /*!	@brief	The type of content.
  *
  *	@par	There is at least one type defined for every concrete subclass of \c AIContentObject.
@@ -254,4 +262,6 @@
  */
 @property (nonatomic) BOOL postProcessContent;
 
+ at property (nonatomic, retain) NSString *sourceNick;
+
 @end
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentObject.m
--- a/Frameworks/Adium Framework/Source/AIContentObject.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentObject.m	Tue May 28 00:52:55 2013 +0200
@@ -24,7 +24,7 @@
 @implementation AIContentObject
 
 @synthesize source, destination, date, isOutgoing = outgoing, chat, message, userInfo;
- at synthesize filterContent, trackContent, displayContent, displayContentImmediately, sendContent, postProcessContent;
+ at synthesize filterContent, trackContent, displayContent, displayContentImmediately, sendContent, postProcessContent, sourceNick;
 
 - (id)initWithChat:(AIChat *)inChat
 			source:(AIListObject *)inSource
@@ -33,12 +33,23 @@
 {
 	return [self initWithChat:inChat source:inSource destination:inDest date:inDate message:nil];
 }
+
 - (id)initWithChat:(AIChat *)inChat
 			source:(AIListObject *)inSource
 	   destination:(AIListObject *)inDest
 			  date:(NSDate*)inDate
 		   message:(NSAttributedString *)inMessage
 {
+	return [self initWithChat:inChat source:inSource sourceNick:nil destination:inDest date:inDate message:inMessage];
+}
+
+- (id)initWithChat:(AIChat *)inChat
+			source:(AIListObject *)inSource
+		sourceNick:(NSString *)inSourceNick
+	   destination:(AIListObject *)inDest
+			  date:(NSDate*)inDate
+		   message:(NSAttributedString *)inMessage
+{
     if ((self = [super init]))
 	{
 		//Default Behavior
@@ -51,6 +62,7 @@
 	
 		//Store source, dest, chat, ...
 		source = [inSource retain];
+		sourceNick = [inSourceNick retain];
 		destination = [inDest retain];
 		message = [inMessage retain];
 		date = [(inDate ? inDate : [NSDate date]) retain];
@@ -66,6 +78,7 @@
 - (void)dealloc
 {
     [source release]; source = nil;
+	[sourceNick release]; sourceNick = nil;
     [destination release]; destination = nil;
 	[date release]; date = nil;
 	[message release]; message = nil;
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentTopic.h
--- a/Frameworks/Adium Framework/Source/AIContentTopic.h	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentTopic.h	Tue May 28 00:52:55 2013 +0200
@@ -27,8 +27,9 @@
 
 + (id)topicInChat:(AIChat *)inChat
 	   withSource:(id)inSource
+	   sourceNick:(NSString *)inSourceNick
 	  destination:(id)inDest
-			 date:(NSDate *)inDate 
+			 date:(NSDate *)inDate
 		  message:(NSAttributedString *)inMessage;
 
 @property (nonatomic) BOOL actuallyBlank;
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIContentTopic.m
--- a/Frameworks/Adium Framework/Source/AIContentTopic.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIContentTopic.m	Tue May 28 00:52:55 2013 +0200
@@ -20,12 +20,14 @@
 @implementation AIContentTopic
 + (id)topicInChat:(AIChat *)inChat
 	   withSource:(id)inSource
+	   sourceNick:(NSString *)inSourceNick
 	  destination:(id)inDest
 			 date:(NSDate *)inDate 
 		  message:(NSAttributedString *)inMessage
 {
 	return [super messageInChat:inChat
 					 withSource:inSource
+					 sourceNick:inSourceNick
 					destination:inDest
 						   date:inDate
 						message:inMessage
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIEditStateWindowController.m
--- a/Frameworks/Adium Framework/Source/AIEditStateWindowController.m	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIEditStateWindowController.m	Tue May 28 00:52:55 2013 +0200
@@ -178,8 +178,6 @@
  */
 - (void)windowDidLoad
 {
-//	NSNumberFormatter	*intFormatter;
-	
 	[scrollView_statusMessage setAutohidesScrollers:YES];
 	[scrollView_statusMessage setAlwaysDrawFocusRingIfFocused:YES];
 	[textView_statusMessage setTarget:self action:@selector(okay:)];
diff -r 88cdaeb864d1 -r 0fbb04961745 Frameworks/Adium Framework/Source/AIGroupChat.h
--- a/Frameworks/Adium Framework/Source/AIGroupChat.h	Tue May 28 00:24:27 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIGroupChat.h	Tue May 28 00:52:55 2013 +0200
@@ -18,11 +18,11 @@
 
 @interface AIGroupChat : AIChat <AIContainingObject> {
 	NSString			*topic;
-    AIListContact		*topicSetter;
+    NSString			*topicSetter;
 	
-	NSMutableDictionary	*participatingContactsFlags;
-	NSMutableDictionary	*participatingContactsAliases;
-	NSMutableArray		*participatingContacts;
+	NSMutableDictionary	*participatingNicksFlags;
+	NSMutableDictionary	*participatingNicksContacts;
+	NSMutableArray		*participatingNicks;
 	
 	BOOL				showJoinLeave;
 	BOOL				expanded;
@@ -34,26 +34,31 @@
 
 @property (readonly, nonatomic) BOOL supportsTopic;
 
-- (void)updateTopic:(NSString *)inTopic withSource:(AIListContact *)contact;
+- (void)updateTopic:(NSString *)inTopic withSource:(NSString *)contact;
 - (void)setTopic:(NSString *)inTopic;
 
 @property (readwrite, copy, nonatomic) NSDate *lastMessageDate;
 
 // Group chat participants.
-- (NSString *)displayNameForContact:(AIListObject *)contact;
-- (AIGroupChatFlags)flagsForContact:(AIListObject *)contact;
-- (NSString *)aliasForContact:(AIListObject *)contact;
-- (void)setFlags:(AIGroupChatFlags)flags forContact:(AIListObject *)contact;
-- (void)setAlias:(NSString *)alias forContact:(AIListObject *)contact;
-- (void)removeSavedValuesForContactUID:(NSString *)contactUID;
+- (AIListContact *)contactForNick:(NSString *)nick;
+- (AIGroupChatFlags)flagsForNick:(NSString *)nick;
+- (void)setFlags:(AIGroupChatFlags)flags forNick:(NSString *)nick;
+- (void)setContact:(AIListContact *)contact forNick:(NSString *)nick;
+- (void)changeNick:(NSString *)from to:(NSString *)to;
+- (void)removeSavedValuesForNick:(NSString *)nick;
+- (NSArray *)nicksForContact:(AIListObject *)contact;
 
-- (void)addParticipatingListObject:(AIListContact *)inObject notify:(BOOL)notify;
-- (void)addParticipatingListObjects:(NSArray *)inObjects notify:(BOOL)notify;
+- (void)addParticipatingNick:(NSString *)inObject notify:(BOOL)notify;




More information about the commits mailing list