adium 5917:4a7c414c0b2d: Merged GoogleOAuth2 into adium-1.5.11. ...

commits at adium.im commits at adium.im
Thu Apr 2 06:30:09 UTC 2015


details:	http://hg.adium.im/adium/rev/4a7c414c0b2d
revision:	5917:4a7c414c0b2d
branch:		adium-1.5.11
author:		Thijs Alkemade <me at thijsalkema.de>
date:		Thu Apr 02 08:29:17 2015 +0200

Merged GoogleOAuth2 into adium-1.5.11. Fixes #16161.

diffs (truncated from 82195 to 1000 lines):

diff -r f3c9fefc59f9 -r 4a7c414c0b2d Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj	Thu Apr 02 08:22:24 2015 +0200
+++ b/Adium.xcodeproj/project.pbxproj	Thu Apr 02 08:29:17 2015 +0200
@@ -1373,9 +1373,12 @@
 		6EC1684D06C170A000F9FAD3 /* DCInviteToChatPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC1684806C170A000F9FAD3 /* DCInviteToChatPlugin.m */; };
 		6EC1684F06C170A000F9FAD3 /* DCInviteToChatWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC1684A06C170A000F9FAD3 /* DCInviteToChatWindowController.m */; };
 		6EC1685006C170A000F9FAD3 /* InviteToChatWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6EC1684B06C170A000F9FAD3 /* InviteToChatWindow.nib */; };
+		761D6A251ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib in Resources */ = {isa = PBXBuildFile; fileRef = 761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */; };
 		7664EAA5162E086A008CF995 /* libffi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
 		7664EAA6162E0874008CF995 /* libffi.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
 		766ABAB61306D1020049FFB7 /* AIUnreadMessagesTooltip.m in Sources */ = {isa = PBXBuildFile; fileRef = 766ABAB51306D1020049FFB7 /* AIUnreadMessagesTooltip.m */; };
+		766F66A51ACBDF0D002079F2 /* auth_gtalk.c in Sources */ = {isa = PBXBuildFile; fileRef = 766F66A31ACBDF0D002079F2 /* auth_gtalk.c */; };
+		766F66A61ACBDF0D002079F2 /* auth_gtalk.h in Headers */ = {isa = PBXBuildFile; fileRef = 766F66A41ACBDF0D002079F2 /* auth_gtalk.h */; };
 		76731DE215F90538007728C3 /* libgcrypt.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE015F90538007728C3 /* libgcrypt.framework */; };
 		76731DE315F90538007728C3 /* libgpgerror.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE115F90538007728C3 /* libgpgerror.framework */; };
 		76731DE415F9057F007728C3 /* libgcrypt.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE015F90538007728C3 /* libgcrypt.framework */; };
@@ -4490,11 +4493,41 @@
 		6FB330A20C7235BF00B001A8 /* EKEzvIncomingFileTransfer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = EKEzvIncomingFileTransfer.m; path = Plugins/Bonjour/libezv/Classes/EKEzvIncomingFileTransfer.m; sourceTree = SOURCE_ROOT; };
 		6FB330A30C7235BF00B001A8 /* EKEzvOutgoingFileTransfer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = EKEzvOutgoingFileTransfer.h; path = Plugins/Bonjour/libezv/Classes/EKEzvOutgoingFileTransfer.h; sourceTree = SOURCE_ROOT; };
 		6FB330A40C7235BF00B001A8 /* EKEzvOutgoingFileTransfer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = EKEzvOutgoingFileTransfer.m; path = Plugins/Bonjour/libezv/Classes/EKEzvOutgoingFileTransfer.m; sourceTree = SOURCE_ROOT; };
+		761D6A241ACC5F0B002079F2 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en; path = "Plugins/Purple Service/Resources/en.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		761D6A261ACC5F0F002079F2 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sl; path = "Plugins/Purple Service/Resources/sl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
 		7664EAA4162E086A008CF995 /* libffi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libffi.framework; path = Frameworks/libffi.framework; sourceTree = "<group>"; };
 		766ABAB41306D1020049FFB7 /* AIUnreadMessagesTooltip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIUnreadMessagesTooltip.h; path = Source/AIUnreadMessagesTooltip.h; sourceTree = "<group>"; };
 		766ABAB51306D1020049FFB7 /* AIUnreadMessagesTooltip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIUnreadMessagesTooltip.m; path = Source/AIUnreadMessagesTooltip.m; sourceTree = "<group>"; };
+		766F66A31ACBDF0D002079F2 /* auth_gtalk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auth_gtalk.c; sourceTree = "<group>"; };
+		766F66A41ACBDF0D002079F2 /* auth_gtalk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auth_gtalk.h; sourceTree = "<group>"; };
 		76731DE015F90538007728C3 /* libgcrypt.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libgcrypt.framework; path = Frameworks/libgcrypt.framework; sourceTree = "<group>"; };
 		76731DE115F90538007728C3 /* libgpgerror.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libgpgerror.framework; path = Frameworks/libgpgerror.framework; sourceTree = "<group>"; };
+		767A13EC1ACC5F7B002079F2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sv; path = "Plugins/Purple Service/Resources/sv.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F01ACC5F94002079F2 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = es; path = "Plugins/Purple Service/Resources/es.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F11ACC5FA8002079F2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = hu; path = "Plugins/Purple Service/Resources/hu.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F21ACC5FB0002079F2 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = it; path = "Plugins/Purple Service/Resources/it.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F31ACC5FB8002079F2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nl; path = "Plugins/Purple Service/Resources/nl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F41ACC5FC3002079F2 /* da */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = da; path = "Plugins/Purple Service/Resources/da.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F51ACC5FCB002079F2 /* nb */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nb; path = "Plugins/Purple Service/Resources/nb.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F61ACC5FD0002079F2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fi; path = "Plugins/Purple Service/Resources/fi.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F71ACC5FD7002079F2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ru; path = "Plugins/Purple Service/Resources/ru.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F81ACC5FDE002079F2 /* is */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = is; path = "Plugins/Purple Service/Resources/is.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13F91ACC5FE9002079F2 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ca; path = "Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FA1ACC5FEE002079F2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = tr; path = "Plugins/Purple Service/Resources/tr.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FB1ACC5FF3002079F2 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = de; path = "Plugins/Purple Service/Resources/de.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FC1ACC5FF8002079F2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr; path = "Plugins/Purple Service/Resources/fr.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FD1ACC5FFD002079F2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = uk; path = "Plugins/Purple Service/Resources/uk.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FE1ACC6003002079F2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = cs; path = "Plugins/Purple Service/Resources/cs.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A13FF1ACC6009002079F2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pl; path = "Plugins/Purple Service/Resources/pl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A140C1ACC61BA002079F2 /* el_GR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = el_GR; path = "Plugins/Purple Service/Resources/el_GR.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A140D1ACC61C2002079F2 /* en_AU */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_AU; path = "Plugins/Purple Service/Resources/en_AU.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A140E1ACC61C8002079F2 /* en_CA */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_CA; path = "Plugins/Purple Service/Resources/en_CA.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A140F1ACC61D1002079F2 /* en_GB */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_GB; path = "Plugins/Purple Service/Resources/en_GB.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A14101ACC6223002079F2 /* fr_CA */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr_CA; path = "Plugins/Purple Service/Resources/fr_CA.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A14111ACC622C002079F2 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt_PT; path = "Plugins/Purple Service/Resources/pt_PT.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A14121ACC6235002079F2 /* pt */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt; path = "Plugins/Purple Service/Resources/pt.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A14131ACC623B002079F2 /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = "Plugins/Purple Service/Resources/sk_SK.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+		767A14141ACC6254002079F2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ja; path = "Plugins/Purple Service/Resources/ja.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
 		76889DEA12D3CA17007AEF00 /* get-info.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "get-info.tiff"; path = "Resources/get-info.tiff"; sourceTree = "<group>"; };
 		76889DEE12D3CA40007AEF00 /* Personal.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Personal.tiff; path = Resources/Personal.tiff; 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>"; };
@@ -4595,8 +4628,8 @@
 		9EF0DBF309D944A300FBCC1E /* msg-block-contact.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "msg-block-contact.tiff"; path = "Resources/msg-block-contact.tiff"; sourceTree = "<group>"; };
 		9EF0DBF409D944A300FBCC1E /* msg-unblock-contact.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "msg-unblock-contact.tiff"; path = "Resources/msg-unblock-contact.tiff"; sourceTree = "<group>"; };
 		A3C042D108D7483100B48CE1 /* PurpleDefaultsGTalk.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = PurpleDefaultsGTalk.plist; path = "Plugins/Purple Service/PurpleDefaultsGTalk.plist"; sourceTree = "<group>"; };
-		A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccount.h; path = "Plugins/Purple Service/AIPurpleGTalkAccount.h"; sourceTree = "<group>"; };
-		A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccount.m; path = "Plugins/Purple Service/AIPurpleGTalkAccount.m"; sourceTree = "<group>"; };
+		A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccount.h; path = "Plugins/Purple Service/AIPurpleGTalkAccount.h"; sourceTree = "<group>"; };
+		A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccount.m; path = "Plugins/Purple Service/AIPurpleGTalkAccount.m"; sourceTree = "<group>"; };
 		A3C0431D08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccountViewController.h; path = "Plugins/Purple Service/AIPurpleGTalkAccountViewController.h"; sourceTree = "<group>"; };
 		A3C0431E08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccountViewController.m; path = "Plugins/Purple Service/AIPurpleGTalkAccountViewController.m"; sourceTree = "<group>"; };
 		A3C0431F08D74D3100B48CE1 /* AIGTalkService.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIGTalkService.h; path = "Plugins/Purple Service/AIGTalkService.h"; sourceTree = "<group>"; };
@@ -5036,6 +5069,8 @@
 			children = (
 				34D8154913B663A80022C8C4 /* auth_fb.c */,
 				34D8154A13B663A80022C8C4 /* auth_fb.h */,
+				766F66A31ACBDF0D002079F2 /* auth_gtalk.c */,
+				766F66A41ACBDF0D002079F2 /* auth_gtalk.h */,
 				34D8154B13B663A80022C8C4 /* fbapi.c */,
 				34D8154C13B663A80022C8C4 /* fbapi.h */,
 				11EE1B490CDCFAF40097F246 /* oscar-adium.c */,
@@ -6413,22 +6448,14 @@
 		34E6BBE50A78083A0076D7F0 /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				34D8326107CBD598006466F2 /* AccountPrefs.plist */,
 				317D83670E89F40500298BDB /* msg-bookmark-chat.tiff */,
-				34D8327507CBD5B3006466F2 /* BuiltInStatusStates.plist */,
-				34D8326607CBD598006466F2 /* ContactPrefs.plist */,
-				34D8326707CBD598006466F2 /* default-icon.png */,
-				34D8326207CBD598006466F2 /* DockPrefs.plist */,
 				3428B33E0815E1FB00C0D3DC /* emoticon32.tiff */,
 				345F590608199746001F733C /* emoticon32_transparent.tiff */,
-				34B995D9092A832700E31E91 /* FontPanelAccessoryView.nib */,
 				34DFF53007A62EB100B92233 /* lock-locked.tiff */,
 				34DFF52607A62EB000B92233 /* lock-unlocked.tiff */,
 				347E787507CA975900350507 /* remove.tiff */,
-				34D8326307CBD598006466F2 /* msg-send-file.tiff */,
 				4BB2EB200D88D76100CA7A7D /* timestamp32.tiff */,
 				4BB2EB210D88D76100CA7A7D /* timestamp32_transparent.tiff */,
-				34D8327607CBD5B3006466F2 /* ToolbarPrefs.plist */,
 			);
 			name = Resources;
 			sourceTree = "<group>";
@@ -8392,6 +8419,7 @@
 		A3C0405808D744B200B48CE1 /* Google Talk */ = {
 			isa = PBXGroup;
 			children = (
+				761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */,
 				A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */,
 				A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */,
 				A3C0431D08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.h */,
@@ -8866,6 +8894,7 @@
 				3485DB7109EBCE7400232CC4 /* AIPurpleGTalkAccountViewController.h in Headers */,
 				3485DB7309EBCE7400232CC4 /* AIGTalkService.h in Headers */,
 				3485DB7609EBCE7400232CC4 /* ESMeanwhileService.h in Headers */,
+				766F66A61ACBDF0D002079F2 /* auth_gtalk.h in Headers */,
 				3485DB7809EBCE7400232CC4 /* ESPurpleMeanwhileAccount.h in Headers */,
 				3485DB7A09EBCE7400232CC4 /* DCPurpleMeanwhileJoinChatViewController.h in Headers */,
 				3485DB7D09EBCE7400232CC4 /* ESPurpleMeanwhileAccountViewController.h in Headers */,
@@ -9208,7 +9237,7 @@
 			name = "Unit tests";
 			productName = "Unit tests";
 			productReference = 312ED3CA0C7E875B00A6BDA9 /* Unit tests.octest */;
-			productType = "com.apple.product-type.bundle";
+			productType = "com.apple.product-type.bundle.ocunit-test";
 		};
 		3485D67F09EB416300232CC4 /* AdiumLibpurple */ = {
 			isa = PBXNativeTarget;
@@ -9384,6 +9413,16 @@
 				sk_SK,
 				uk,
 				pt_PT,
+				"zh-Hant",
+				"zh-Hans",
+				"en-CA",
+				"en-AU",
+				"pt-BR",
+				"fr-CA",
+				"en-GB",
+				"el-GR",
+				"sk-SK",
+				"pt-PT",
 			);
 			mainGroup = 29B97314FDCFA39411CA2CEA /* CocAIMe2 */;
 			projectDirPath = "";
@@ -9489,6 +9528,7 @@
 				3485DBBB09EBCE7400232CC4 /* ESPurpleZephyrAccountView.nib in Resources */,
 				3485DBBC09EBCE7400232CC4 /* PurpleDefaultsZephyr.plist in Resources */,
 				3485DBC309EBCE7400232CC4 /* PurpleMultilineRequestWindow.nib in Resources */,
+				761D6A251ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib in Resources */,
 				3485DBC409EBCE7400232CC4 /* PurpleSinglelineRequestWindow.nib in Resources */,
 				3485DBD009EBCE8200232CC4 /* Localizable.strings in Resources */,
 				34E036780A75AA4F00394F11 /* DCPurpleOscarJoinChatView.nib in Resources */,
@@ -9987,6 +10027,7 @@
 				3485DB7209EBCE7400232CC4 /* AIPurpleGTalkAccountViewController.m in Sources */,
 				3485DB7409EBCE7400232CC4 /* AIGTalkService.m in Sources */,
 				3485DB7709EBCE7400232CC4 /* ESMeanwhileService.m in Sources */,
+				766F66A51ACBDF0D002079F2 /* auth_gtalk.c in Sources */,
 				3485DB7909EBCE7400232CC4 /* ESPurpleMeanwhileAccount.m in Sources */,
 				3485DB7B09EBCE7400232CC4 /* DCPurpleMeanwhileJoinChatViewController.m in Sources */,
 				3485DB7E09EBCE7400232CC4 /* ESPurpleMeanwhileAccountViewController.m in Sources */,
@@ -12338,6 +12379,41 @@
 			name = Localizable.strings;
 			sourceTree = "<group>";
 		};
+		761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				761D6A241ACC5F0B002079F2 /* en */,
+				761D6A261ACC5F0F002079F2 /* sl */,
+				767A13EC1ACC5F7B002079F2 /* sv */,
+				767A13F01ACC5F94002079F2 /* es */,
+				767A13F11ACC5FA8002079F2 /* hu */,
+				767A13F21ACC5FB0002079F2 /* it */,
+				767A13F31ACC5FB8002079F2 /* nl */,
+				767A13F41ACC5FC3002079F2 /* da */,
+				767A13F51ACC5FCB002079F2 /* nb */,
+				767A13F61ACC5FD0002079F2 /* fi */,
+				767A13F71ACC5FD7002079F2 /* ru */,
+				767A13F81ACC5FDE002079F2 /* is */,
+				767A13F91ACC5FE9002079F2 /* ca */,
+				767A13FA1ACC5FEE002079F2 /* tr */,
+				767A13FB1ACC5FF3002079F2 /* de */,
+				767A13FC1ACC5FF8002079F2 /* fr */,
+				767A13FD1ACC5FFD002079F2 /* uk */,
+				767A13FE1ACC6003002079F2 /* cs */,
+				767A13FF1ACC6009002079F2 /* pl */,
+				767A140C1ACC61BA002079F2 /* el_GR */,
+				767A140D1ACC61C2002079F2 /* en_AU */,
+				767A140E1ACC61C8002079F2 /* en_CA */,
+				767A140F1ACC61D1002079F2 /* en_GB */,
+				767A14101ACC6223002079F2 /* fr_CA */,
+				767A14111ACC622C002079F2 /* pt_PT */,
+				767A14121ACC6235002079F2 /* pt */,
+				767A14131ACC623B002079F2 /* sk_SK */,
+				767A14141ACC6254002079F2 /* ja */,
+			);
+			name = ESPurpleGTalkAccountView.nib;
+			sourceTree = "<group>";
+		};
 /* End PBXVariantGroup section */
 
 /* Begin XCBuildConfiguration section */
diff -r f3c9fefc59f9 -r 4a7c414c0b2d ChangeLogs/Changes.txt
--- a/ChangeLogs/Changes.txt	Thu Apr 02 08:22:24 2015 +0200
+++ b/ChangeLogs/Changes.txt	Thu Apr 02 08:29:17 2015 +0200
@@ -6,6 +6,8 @@
  * Fixed a crash upon file transfer completion on Bonjour. (Quentin Les) (#16038, #16182)
  * Fixed a problem with signing in to Twitter and updating the timeline on 10.10. (#16882)
  * Fixed a problem with signing in to Yahoo!. (reanimus) (#16678)
+ * Google Talk now authenticates using OAuth2, making logging in simpler when using two-factor authentication and more secure. (#16161)
+
 
 Version 1.5.10 (05/19/2014)
  * Updated libpurple to 2.10.9, fixing many security issues.
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccount.h
--- a/Plugins/Purple Service/AIPurpleGTalkAccount.h	Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccount.h	Thu Apr 02 08:29:17 2015 +0200
@@ -16,8 +16,15 @@
 
 #import "ESPurpleJabberAccount.h"
 
+#define KEY_GTALK_CODE @"GTalk:Code"
+#define KEY_GTALK_UPGRADED_OAUTH2 @"GTalk:OAuth2 Upgraded"
+
+#define ADIUM_GTALK_CLIENT_ID @"853036734951.apps.googleusercontent.com"
+#define ADIUM_GTALK_SECRET @"TSXNUaq34k_0YU7DZT4HbmQd"
+
 @interface AIPurpleGTalkAccount : ESPurpleJabberAccount {
-
+	NSMutableData *response;
+	NSURLConnection *conn;
 }
 
 @end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccount.m
--- a/Plugins/Purple Service/AIPurpleGTalkAccount.m	Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccount.m	Thu Apr 02 08:29:17 2015 +0200
@@ -15,6 +15,17 @@
  */
 
 #import "AIPurpleGTalkAccount.h"
+#import "auth_gtalk.h"
+#import "AIKeychain.h"
+
+#import "JSONKit.h"
+
+#import "AIService.h"
+
+#import <Adium/AIAccountControllerProtocol.h>
+#import <Adium/AIInterfaceControllerProtocol.h>
+
+#import "NSData+Base64.h"
 
 @implementation AIPurpleGTalkAccount
 
@@ -39,6 +50,13 @@
 	return [completeUserName UTF8String];
 }
 
+- (void)dealloc {
+	[response release];
+	[conn release];
+	
+	[super dealloc];
+}
+
 - (NSString *)serverSuffix
 {
 	return @"@gmail.com";
@@ -84,4 +102,230 @@
 	return NO;
 }
 
+/* Add the authentication mechanism for X-OAUTH2. Note that if the server offers it,
+ * it will be used preferentially over any other mechanism e.g. PLAIN. */
+- (void)setGTalkMechEnabled:(BOOL)inEnabled
+{
+	static BOOL enabledGTalkMech = NO;
+	if (inEnabled != enabledGTalkMech) {
+		if (inEnabled)
+			jabber_auth_add_mech(jabber_auth_get_gtalk_mech());
+		else
+			jabber_auth_remove_mech(jabber_auth_get_gtalk_mech());
+		
+		enabledGTalkMech = inEnabled;
+	}
+}
+
+- (void)promptUpgrade:(NSNumber *)number userInfo:(id)info suppression:(NSNumber *)suppressed {
+	if ([number integerValue] == 1) {
+		[adium.accountController editAccount:self onWindow:nil notifyingTarget:self];
+	}
+}
+
+- (void)connect
+{
+	if (!self.UID.length) {
+		[self requestAccessToken];
+	} else {
+		NSString *refresh_token = [[AIKeychain defaultKeychain_error:NULL] findGenericPasswordForService:self.service.serviceID
+																								 account:self.UID
+																							keychainItem:NULL error:NULL];
+		
+		if (refresh_token && refresh_token.length) {
+			[self useRefreshToken:refresh_token];
+		} else {
+			if ([self preferenceForKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS] ||
+				[[self preferenceForKey:KEY_GTALK_UPGRADED_OAUTH2 group:GROUP_ACCOUNT_STATUS] boolValue]) {
+				[self requestAccessToken];
+			} else {
+				[adium.interfaceController displayQuestion:AILocalizedString(@"Upgrade Google Talk account", nil)
+										   withDescription:[NSString stringWithFormat:AILocalizedString(@"Adium uses a new, more secure way to sign in to Google Talk. To use this, you must authorize your account.", nil)]
+										   withWindowTitle:nil
+											 defaultButton:AILocalizedString(@"OK", nil)
+										   alternateButton:AILocalizedString(@"Later", nil)
+											   otherButton:nil
+											   suppression:nil
+													target:self
+												  selector:@selector(promptUpgrade:userInfo:suppression:)
+												  userInfo:nil];
+			}
+		}
+	}
+}
+
+- (void)didConnect
+{
+	[self setGTalkMechEnabled:NO];
+	[super didConnect];
+}
+
+- (void)didDisconnect
+{
+	[self setGTalkMechEnabled:NO];
+	[super didDisconnect];
+}
+
+- (void)useRefreshToken:(NSString *)token {
+	NSString *body = [NSString stringWithFormat:@"refresh_token=%@&client_id=" ADIUM_GTALK_CLIENT_ID
+					  @"&client_secret=" ADIUM_GTALK_SECRET
+					  @"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+					  @"&grant_type=refresh_token", token];
+	
+	NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
+	
+	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/oauth2/v3/token"]];
+	[request setHTTPMethod:@"POST"];
+	[request setValue:@"application/x-www-form-urlencoded ; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
+	[request setValue:[NSString stringWithFormat:@"%u", (unsigned int)[data length]] forHTTPHeaderField:@"Content-Length"];
+	[request setHTTPBody:data];
+	
+	AILogWithSignature(@"%@", request);
+	
+	conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
+	
+	response = [[NSMutableData alloc] init];
+}
+
+- (void)requestAccessToken {
+	NSString *body = [NSString stringWithFormat:@"code=%@&client_id=" ADIUM_GTALK_CLIENT_ID
+					  @"&client_secret=" ADIUM_GTALK_SECRET
+					  @"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+					  @"&grant_type=authorization_code", [self preferenceForKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS]];
+	
+	NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
+	
+	NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/oauth2/v3/token"]];
+	[request setHTTPMethod:@"POST"];
+	[request setValue:@"application/x-www-form-urlencoded ; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
+	[request setValue:[NSString stringWithFormat:@"%u", (unsigned int)[data length]] forHTTPHeaderField:@"Content-Length"];
+	[request setHTTPBody:data];
+	
+	AILogWithSignature(@"%@", request);
+	
+	conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
+	
+	response = [[NSMutableData alloc] init];
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)urlResponse {
+	AILogWithSignature(@"%@", urlResponse);
+}
+
+- (void)connection:(NSURLConnection *)inConnection didReceiveData:(NSData *)data {
+	[response appendData:data];
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)inConnection {
+	NSDictionary *responseDict = [response objectFromJSONData];
+	
+	AILogWithSignature(@"%@", responseDict);
+	
+	if ([responseDict objectForKey:@"error"]) {
+		// Delete the refresh token, so we don't use it again.
+		[[AIKeychain defaultKeychain_error:NULL] deleteGenericPasswordForService:self.service.serviceID
+																		 account:self.UID
+																		   error:NULL];
+		
+		[self setLastDisconnectionError:[NSString stringWithFormat:AILocalizedString(@"Retrieving OAuth token failed: %@", nil), [responseDict objectForKey:@"error_description"]]];
+		[self serverReportedInvalidPassword];
+		return;
+	}
+	
+	if (!self.UID.length) {
+		NSString *jsonWebToken = [responseDict objectForKey:@"id_token"];
+		
+		if (!jsonWebToken) {
+			AILogWithSignature(@"id_token missing, can't set JID!");
+		} else {
+			NSArray *components = [jsonWebToken componentsSeparatedByString:@"."];
+		
+			if (components.count == 3) {
+				NSString *base64EncodedIdentity = [components objectAtIndex:1];
+				
+				// Restore the padding
+				switch (base64EncodedIdentity.length % 4) {
+					case 2: {
+						base64EncodedIdentity = [base64EncodedIdentity stringByAppendingString:@"=="];
+						break;
+					}
+					case 3: {
+						base64EncodedIdentity = [base64EncodedIdentity stringByAppendingString:@"="];
+						break;
+					}
+					default: {
+					}
+				}
+				
+				NSData *identityData = [NSData dataFromBase64String:base64EncodedIdentity];
+				NSDictionary *identity = [identityData objectFromJSONData];
+				
+				AILogWithSignature(@"%@", identity);
+				
+				[self filterAndSetUID:[identity objectForKey:@"email"]];
+			}
+		}
+	}
+	
+	if (!self.UID.length) {
+		[self setLastDisconnectionError:AILocalizedString(@"Obtaining your JID failed", nil)];
+		return;
+	}
+	
+	[self setPreference:nil forKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS];
+	[self setPreference:@(YES) forKey:KEY_GTALK_UPGRADED_OAUTH2 group:GROUP_ACCOUNT_STATUS];
+	
+	if ([responseDict objectForKey:@"refresh_token"]) {
+		[[AIKeychain defaultKeychain_error:NULL] deleteGenericPasswordForService:self.service.serviceID
+																		 account:self.UID
+																		   error:NULL];
+		[[AIKeychain defaultKeychain_error:NULL] addGenericPassword:[responseDict objectForKey:@"refresh_token"]
+														 forService:self.service.serviceID
+															account:self.UID
+													   keychainItem:NULL
+															  error:NULL];
+	}
+	
+	[password release];
+	password = [[responseDict objectForKey:@"access_token"] retain];
+	
+	[conn release]; conn = nil;
+	[response release]; response = nil;
+	
+	if (password) {
+		[self setGTalkMechEnabled:YES];
+		[super connect];
+	} else {
+		[self serverReportedInvalidPassword];
+	}
+}
+
+-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
+	[self setLastDisconnectionError:[NSString stringWithFormat:AILocalizedString(@"OAuth authentication failed: %@", nil), error.description]];
+}
+
+- (void)retrievePasswordThenConnect
+{
+	if ([self boolValueForProperty:@"Prompt For Password On Next Connect"] ||
+		[self boolValueForProperty:@"mustPromptForPasswordOnNextConnect"]) {
+		[adium.accountController editAccount:self onWindow:nil notifyingTarget:self];
+		
+	} else {
+		/* Retrieve the user's password. Never prompt for a password, as we'll implement our own authorization handling
+		 * if the password can't be retrieved.
+		 */
+		[adium.accountController passwordForAccount:self
+									   promptOption:AIPromptNever
+									notifyingTarget:self
+										   selector:@selector(passwordReturnedForConnect:returnCode:context:)
+											context:nil];
+	}
+}
+
+- (void)editAccountSheetDidEndForAccount:(AIAccount *)inAccount withSuccess:(BOOL)successful {
+	if (successful) {
+		[self connect];
+	}
+}
+
 @end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccountViewController.h
--- a/Plugins/Purple Service/AIPurpleGTalkAccountViewController.h	Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccountViewController.h	Thu Apr 02 08:29:17 2015 +0200
@@ -17,7 +17,13 @@
 #import "ESPurpleJabberAccountViewController.h"
 
 @interface AIPurpleGTalkAccountViewController : ESPurpleJabberAccountViewController {
-
+	IBOutlet NSTextField *textField_code;
+	
+	IBOutlet NSTextField *label_code;
+	
+	IBOutlet NSButton *button_requestAccess;
 }
 
+-(IBAction)requestAccess:(id)sender;
+
 @end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccountViewController.m
--- a/Plugins/Purple Service/AIPurpleGTalkAccountViewController.m	Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccountViewController.m	Thu Apr 02 08:29:17 2015 +0200
@@ -15,17 +15,19 @@
  */
 
 #import "AIPurpleGTalkAccountViewController.h"
+#import "AIPurpleGTalkAccount.h"
 
 
 @implementation AIPurpleGTalkAccountViewController
 
+- (NSString *)nibName{
+	return @"ESPurpleGTalkAccountView";
+}
+
 - (void)awakeFromNib
 {
 	[super awakeFromNib];
 	
-	//GTalk forces the use of TLS
-	[checkBox_useTLS setEnabled:NO];
-	
 	[checkBox_checkMail setEnabled:YES];
 }
 
@@ -33,9 +35,49 @@
 {
 	[super configureForAccount:inAccount];
 	[textField_connectServer setStringValue:@"talk.google.com"];
-	[textField_connectServer setEditable:NO];
-	[textField_connectServer setBordered:NO];
-	[textField_connectServer setDrawsBackground:NO];
+	
+	if (account.online) {
+		[button_requestAccess setEnabled:FALSE];
+	}
+}
+
+- (void)saveConfiguration
+{
+	[super saveConfiguration];
+	
+	//Connection security
+	[account setPreference:[NSNumber numberWithBool:FALSE]
+					forKey:KEY_JABBER_FORCE_OLD_SSL group:GROUP_ACCOUNT_STATUS];
+	[account setPreference:[NSNumber numberWithBool:TRUE]
+					forKey:KEY_JABBER_REQUIRE_TLS group:GROUP_ACCOUNT_STATUS];
+	[account setPreference:[NSNumber numberWithBool:TRUE]
+					forKey:KEY_JABBER_VERIFY_CERTS group:GROUP_ACCOUNT_STATUS];
+	[account setPreference:[NSNumber numberWithBool:FALSE]
+					forKey:KEY_JABBER_ALLOW_PLAINTEXT group:GROUP_ACCOUNT_STATUS];
+	
+	[account setPreference:textField_code.stringValue
+					forKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS];
+}
+
+- (IBAction)requestAccess:(id)sender {
+	NSString *urlString = @"https://accounts.google.com/o/oauth2/auth?"
+	@"scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgoogletalk%20https://www.googleapis.com/auth/userinfo.email"
+	@"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+	@"&response_type=code"
+	@"&client_id=" ADIUM_GTALK_CLIENT_ID;
+	
+	if (account.UID) {
+		urlString = [urlString stringByAppendingFormat:@"&login_hint=%@", account.UID];
+	}
+	
+	NSURL *url = [NSURL URLWithString:urlString];
+	
+	[[NSWorkspace sharedWorkspace] openURL:url];
+	
+	[label_code setHidden:FALSE];
+	[textField_code setHidden:FALSE];
+	
+	[button_requestAccess setHidden:TRUE];
 }
 
 @end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib/designable.nib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib/designable.nib	Thu Apr 02 08:29:17 2015 +0200
@@ -0,0 +1,2905 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1060</int>
+		<string key="IBDocument.SystemVersion">14C109</string>
+		<string key="IBDocument.InterfaceBuilderVersion">6751</string>
+		<string key="IBDocument.AppKitVersion">1344.72</string>
+		<string key="IBDocument.HIToolboxVersion">757.30</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+			<string key="NS.object.0">6751</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>NSButton</string>
+			<string>NSButtonCell</string>
+			<string>NSComboBox</string>
+			<string>NSComboBoxCell</string>
+			<string>NSCustomObject</string>
+			<string>NSCustomView</string>
+			<string>NSMenu</string>
+			<string>NSMenuItem</string>
+			<string>NSPopUpButton</string>
+			<string>NSPopUpButtonCell</string>
+			<string>NSTextField</string>
+			<string>NSTextFieldCell</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="520546697">
+			<object class="NSCustomObject" id="393462939">
+				<string key="NSClassName">AIPurpleGTalkAccountViewController</string>
+			</object>
+			<object class="NSCustomObject" id="8487832">
+				<string key="NSClassName">FirstResponder</string>
+			</object>
+			<object class="NSCustomObject" id="356620541">
+				<string key="NSClassName">NSApplication</string>
+			</object>
+			<object class="NSCustomView" id="837853317">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="NSTextField" id="594525611">
+						<reference key="NSNextResponder" ref="837853317"/>
+						<int key="NSvFlags">-2147483380</int>
+						<string key="NSFrame">{{18, 70}, {140, 17}}</string>
+						<reference key="NSSuperview" ref="837853317"/>
+						<reference key="NSWindow"/>
+						<string key="NSReuseIdentifierKey">_NS:526</string>
+						<string key="NSHuggingPriority">{251, 750}</string>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="861855949">
+							<int key="NSCellFlags">68157504</int>
+							<int key="NSCellFlags2">71304192</int>
+							<string key="NSContents">Code:</string>
+							<object class="NSFont" key="NSSupport" id="745543233">
+								<bool key="IBIsSystemFont">YES</bool>
+								<double key="NSSize">13</double>
+								<int key="NSfFlags">1044</int>
+							</object>
+							<string key="NSCellIdentifier">_NS:526</string>
+							<reference key="NSControlView" ref="594525611"/>
+							<object class="NSColor" key="NSBackgroundColor" id="701108434">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlColor</string>
+								<object class="NSColor" key="NSColor" id="835004027">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+								</object>
+							</object>
+							<object class="NSColor" key="NSTextColor" id="327057890">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">labelColor</string>
+								<object class="NSColor" key="NSColor" id="38993316">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MAA</bytes>
+								</object>
+							</object>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="449664804">
+						<reference key="NSNextResponder" ref="837853317"/>
+						<int key="NSvFlags">-2147483380</int>
+						<string key="NSFrame">{{164, 20}, {273, 70}}</string>
+						<reference key="NSSuperview" ref="837853317"/>
+						<reference key="NSWindow"/>
+						<string key="NSReuseIdentifierKey">_NS:9</string>
+						<string key="NSAntiCompressionPriority">{250, 750}</string>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="790192952">
+							<int key="NSCellFlags">-1805647871</int>
+							<int key="NSCellFlags2">272630272</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<string key="NSCellIdentifier">_NS:9</string>
+							<reference key="NSControlView" ref="449664804"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<object class="NSColor" key="NSBackgroundColor" id="427835941">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">textBackgroundColor</string>
+								<object class="NSColor" key="NSColor" id="571380249">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MQA</bytes>
+								</object>
+							</object>
+							<object class="NSColor" key="NSTextColor" id="185594471">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">textColor</string>
+								<reference key="NSColor" ref="38993316"/>
+							</object>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSButton" id="272517914">
+						<reference key="NSNextResponder" ref="837853317"/>
+						<int key="NSvFlags">256</int>
+						<string key="NSFrame">{{158, 62}, {140, 32}}</string>
+						<reference key="NSSuperview" ref="837853317"/>
+						<reference key="NSWindow"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="712274320">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">134217728</int>
+							<string key="NSContents">Request Access</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="272517914"/>
+							<int key="NSButtonFlags">-2038284288</int>
+							<int key="NSButtonFlags2">1</int>
+							<reference key="NSAlternateImage" ref="745543233"/>
+							<string key="NSAlternateContents"/>
+							<object class="NSMutableString" key="NSKeyEquivalent">
+								<characters key="NS.bytes"/>
+							</object>
+							<int key="NSPeriodicDelay">200</int>
+							<int key="NSPeriodicInterval">25</int>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+					</object>
+					<object class="NSTextField" id="486429290">
+						<reference key="NSNextResponder" ref="837853317"/>
+						<int key="NSvFlags">268</int>
+						<string key="NSFrame">{{18, 98}, {421, 34}}</string>
+						<reference key="NSSuperview" ref="837853317"/>
+						<reference key="NSWindow"/>
+						<string key="NSReuseIdentifierKey">_NS:9</string>
+						<string key="NSAntiCompressionPriority">{250, 750}</string>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="827828256">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">272629760</int>
+							<string key="NSContents">You need to grant Adium access to your Google account in a web browser and copy the generated code to Adium.</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<string key="NSCellIdentifier">_NS:9</string>
+							<reference key="NSControlView" ref="486429290"/>
+							<reference key="NSBackgroundColor" ref="701108434"/>
+							<reference key="NSTextColor" ref="327057890"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<bool key="NSControlAutosetMaxLayoutWidth">YES</bool>
+						<double key="NSPreferredMaxLayoutWidth">417</double>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+				</array>
+				<string key="NSFrameSize">{457, 152}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="272517914"/>
+				<string key="NSClassName">NSView</string>
+				<string key="NSExtension">NSResponder</string>
+			</object>
+			<object class="NSCustomView" id="881248978">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">256</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="NSButton" id="767871570">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{160, 95}, {211, 18}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="13153345"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSButtonCell" key="NSCell" id="355466928">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">0</int>
+							<string key="NSContents">Display new mail notifications</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="767871570"/>
+							<int key="NSButtonFlags">1211912448</int>
+							<int key="NSButtonFlags2">2</int>
+							<object class="NSCustomResource" key="NSNormalImage" id="206195486">
+								<string key="NSClassName">NSImage</string>
+								<string key="NSResourceName">NSSwitch</string>
+							</object>
+							<object class="NSButtonImageSource" key="NSAlternateImage" id="10299655">
+								<string key="NSImageName">NSSwitch</string>
+							</object>
+							<string key="NSAlternateContents"/>
+							<string key="NSKeyEquivalent"/>
+							<int key="NSPeriodicDelay">200</int>
+							<int key="NSPeriodicInterval">25</int>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+					</object>
+					<object class="NSTextField" id="23953802">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{162, 218}, {240, 22}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1071692987"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="557983517">
+							<int key="NSCellFlags">-1804599231</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="23953802"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="427835941"/>
+							<reference key="NSTextColor" ref="185594471"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="795157005">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{17, 220}, {140, 17}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="23953802"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="1046731873">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">71303168</int>
+							<string key="NSContents">BOSH Server:</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="795157005"/>
+							<reference key="NSBackgroundColor" ref="701108434"/>
+							<object class="NSColor" key="NSTextColor" id="564835922">
+								<int key="NSColorSpace">6</int>
+								<string key="NSCatalogName">System</string>
+								<string key="NSColorName">controlTextColor</string>
+								<reference key="NSColor" ref="38993316"/>
+							</object>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="993950755">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{162, 246}, {240, 22}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="795157005"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="897297612">
+							<int key="NSCellFlags">-2077228991</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="993950755"/>
+							<reference key="NSBackgroundColor" ref="427835941"/>
+							<reference key="NSTextColor" ref="185594471"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="416544706">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{17, 248}, {140, 17}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="993950755"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="675922156">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">71303168</int>
+							<string key="NSContents">Connect Server:</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="416544706"/>
+							<reference key="NSBackgroundColor" ref="701108434"/>
+							<reference key="NSTextColor" ref="564835922"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="223022732">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{162, 188}, {240, 22}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="164156726"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="483716033">
+							<int key="NSCellFlags">-1804599231</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="223022732"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="427835941"/>
+							<reference key="NSTextColor" ref="185594471"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="1071692987">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{17, 190}, {140, 17}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="223022732"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="275398507">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">71303168</int>
+							<string key="NSContents">File Transfer Proxies:</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="1071692987"/>
+							<reference key="NSBackgroundColor" ref="701108434"/>
+							<reference key="NSTextColor" ref="564835922"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="979941359">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{329, 158}, {73, 22}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="909698960"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="474262400">
+							<int key="NSCellFlags">-1804599231</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="979941359"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="427835941"/>
+							<reference key="NSTextColor" ref="185594471"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="198507305">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{286, 160}, {38, 17}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="979941359"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="937801845">
+							<int key="NSCellFlags">67108864</int>
+							<int key="NSCellFlags2">71303168</int>
+							<string key="NSContents">Port:</string>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="198507305"/>
+							<reference key="NSBackgroundColor" ref="701108434"/>
+							<reference key="NSTextColor" ref="564835922"/>
+						</object>
+						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+						<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+					</object>
+					<object class="NSTextField" id="56382938">
+						<reference key="NSNextResponder" ref="881248978"/>
+						<int key="NSvFlags">264</int>
+						<string key="NSFrame">{{162, 158}, {119, 22}}</string>
+						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="198507305"/>
+						<bool key="NSEnabled">YES</bool>
+						<object class="NSTextFieldCell" key="NSCell" id="27008867">
+							<int key="NSCellFlags">-1804599231</int>
+							<int key="NSCellFlags2">4195328</int>
+							<string key="NSContents"/>
+							<reference key="NSSupport" ref="745543233"/>
+							<reference key="NSControlView" ref="56382938"/>
+							<bool key="NSDrawsBackground">YES</bool>
+							<reference key="NSBackgroundColor" ref="427835941"/>




More information about the commits mailing list