From 2072c8ec9a2f09919bc908b9c43fe7ae321a88a9 Mon Sep 17 00:00:00 2001 From: Rob Mathers Date: Mon, 11 Jul 2016 19:41:32 -0400 Subject: [PATCH 1/2] UI to set username and password, and use for ATEN connection. --- .../ServerDisplay.nib/designable.nib | 2012 +++-------------- .../ServerDisplay.nib/keyedobjects.nib | Bin 19481 -> 17734 bytes Source/IServerData.h | 2 + Source/RFBConnection.h | 3 + Source/RFBConnection.m | 12 + Source/RFBHandshaker.m | 13 +- Source/ServerBase.h | 3 + Source/ServerBase.m | 12 + Source/ServerDataViewController.h | 2 + Source/ServerDataViewController.m | 67 +- Source/ServerFromConnection.m | 1 + Source/ServerFromPrefs.m | 1 + Source/ServerStandAlone.m | 1 + 13 files changed, 411 insertions(+), 1718 deletions(-) mode change 100644 => 100755 Source/IServerData.h mode change 100644 => 100755 Source/RFBConnection.h mode change 100644 => 100755 Source/RFBConnection.m mode change 100644 => 100755 Source/RFBHandshaker.m mode change 100644 => 100755 Source/ServerBase.h mode change 100644 => 100755 Source/ServerBase.m mode change 100644 => 100755 Source/ServerDataViewController.h mode change 100644 => 100755 Source/ServerDataViewController.m mode change 100644 => 100755 Source/ServerFromConnection.m mode change 100644 => 100755 Source/ServerFromPrefs.m mode change 100644 => 100755 Source/ServerStandAlone.m diff --git a/Resources/English.lproj/ServerDisplay.nib/designable.nib b/Resources/English.lproj/ServerDisplay.nib/designable.nib index fe2f4bf..dc17b5c 100644 --- a/Resources/English.lproj/ServerDisplay.nib/designable.nib +++ b/Resources/English.lproj/ServerDisplay.nib/designable.nib @@ -1,1692 +1,320 @@ - - - - 1060 - 10K549 - 851 - 1038.36 - 461.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 851 - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - ServerDataViewController - - - FirstResponder - - - NSApplication - - - 3 - 2 - {{472, 412}, {368, 375}} - 1886912512 - Connect - NSPanel - - View - - {3.40282e+38, 3.40282e+38} - {213, 107} - - - 256 - - - - 256 - - - - 256 - - - - 268 - {{26, 17}, {69, 13}} - - YES - - 67239424 - 4194304 - Connecting... - - LucidaGrande - 10 - 2843 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2ODY1AA - - - - 1 - MC40MjkzNDc4MTMxIDAuNDI5MzQ3ODEzMSAwLjQyOTM0NzgxMzEAA - - - - - - 265 - {{105, 311}, {218, 22}} - - YES - - -1804468671 - 4195328 - - - LucidaGrande - 13 - 1044 - - server address - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - 3 - MAA - - - - - - - 265 - {{32, 250}, {68, 17}} - - YES - - 67239424 - 67108864 - Password: - - - - - 6 - System - controlTextColor - - - - - - - 265 - {{52, 200}, {48, 17}} - - YES - - 67239424 - 67108864 - Profile: - - - - - - - - - 265 - {{64, 313}, {38, 17}} - - YES - - 67239424 - 67108864 - Host: - - - - - - - - - 265 - {{105, 277}, {60, 22}} - - YES - - -1804468672 - 71304192 - - 0 - 0 - NO - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - LucidaGrande - 12 - 16 - - - - - - - - - NaN - - - - 0 - - - . - - , - - - - - 0 - 2 - NO - YES - 1 - n4YBAAAAAAAAAAAAAAAAAA - - - 0 - 0 - NO - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - -0 - 0 - - - 0 - -0 - - - - - - - - - . - , - NO - NO - YES - - 0 - - YES - - - - - - - 265 - {{-3, 273}, {105, 24}} - - YES - - 67239424 - 67108864 - Display or port: - - - - - - - - - 265 - {{102, 193}, {224, 26}} - - YES - - 67239488 - 1024 - - - -2038284033 - 1 - - - - 400 - 75 - - - default - - 1048576 - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - OtherViews - - - - - 3 - YES - YES - 1 - - - - - 265 - {{103, 223}, {222, 18}} - - YES - - 67239424 - 0 - Remember Password - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 265 - {{237, 7}, {92, 32}} - - YES - - -2080244224 - 134217728 - Connect - - - -2038284033 - 1 - - - DQ - 200 - 25 - - - - - 265 - {{-1, 43}, {327, 5}} - - {0, 0} - - 67239424 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - 3 - 2 - 0 - NO - - - - 265 - {{105, 247}, {218, 22}} - - YES - - -1804468672 - 4195328 - - - - YES - - - - - - - 265 - {{103, 141}, {222, 18}} - - YES - - 67239424 - 0 - Allow other clients to connect - - - 1211912703 - 0 - - - - - 200 - 25 - - - - - 1292 - - {{6, 15}, {16, 16}} - - 28938 - 100 - - - - 265 - {{103, 121}, {222, 18}} - - YES - - 67239424 - 0 - Fullscreen display - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 265 - {{103, 161}, {222, 18}} - - YES - - 67239424 - 0 - View only - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{173, 280}, {153, 17}} - - YES - - 68288064 - 71304192 - Display 10 is port 5910 - - - - - 1 - MC4zMjA2NTIxODY5IDAuMzIwNjUyMTg2OSAwLjMyMDY1MjE4NjkAA - - - - - - 256 - {{3, 16}, {83, 16}} - - YES - - 67239424 - 131072 - Save Server - - LucidaGrande - 11 - 3100 - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 265 - {{103, 86}, {222, 18}} - - YES - - 67239424 - 0 - Tunnel over SSH - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 265 - {{105, 58}, {218, 22}} - - YES - - -1804468671 - 272630784 - - - - YES - - - - - - - 265 - {{38, 63}, {64, 17}} - - YES - - 68288064 - 272630784 - SSH host: - - - - - - - - {{1, 1}, {326, 333}} - - - - {{20, 20}, {328, 335}} - - {0, 0} - - 67239424 - 0 - Box - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 3 - 0 - NO - - - {368, 375} - - - {{0, 0}, {1280, 832}} - {213, 129} - {3.40282e+38, 3.40282e+38} - - - - - - - hostName - - - - 39 - - - - rememberPwd - - - - 42 - - - - shared - - - - 43 - - - - profilePopup - - - - 44 - - - - box - - - - 45 - - - - window - - - - 54 - - - - connectIndicator - - - - 55 - - - - connectIndicatorText - - - - 56 - - - - connectBtn - - - - 62 - - - - sharedChanged: - - - - 75 - - - - rememberPwdChanged: - - - - 77 - - - - profileSelectionChanged: - - - - 78 - - - - connectToServer: - - - - 79 - - - - display - - - - 80 - - - - password - - - - 81 - - - - nextKeyView - - - - 82 - - - - nextKeyView - - - - 83 - - - - nextKeyView - - - - 84 - - - - nextKeyView - - - - 85 - - - - nextKeyView - - - - 86 - - - - nextKeyView - - - - 87 - - - - nextKeyView - - - - 88 - - - - delegate - - - - 89 - - - - delegate - - - - 90 - - - - fullscreen - - - - 93 - - - - fullscreenChanged: - - - - 94 - - - - save - - - - 96 - - - - addServerChanged: - - - - 97 - - - - viewOnly - - - - 109 - - - - viewOnlyChanged: - - - - 110 - - - - displayDescription - - - - 130 - - - - useSshTunnelChanged: - - - - 137 - - - - sshHostChanged: - - - - 138 - - - - sshHost - - - - 139 - - - - useSshTunnel - - - - 140 - - - - passwordChanged: - - - - 141 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - 6 - - - - - - Connect - - - 5 - - - - - - - - 23 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -3 - - - Application - - - 95 - - - - - - - - 125 - - - - - 11 - - - - - - - - 116 - - - - - 10 - - - - - - - - 115 - - - - - 25 - - - - - - - - 122 - - - - - 8 - - - - - - - - 113 - - - - - 18 - - - - - - - - 120 - - - - - - - - 49 - - - - - 15 - - - - - - - - 118 - - - - - 17 - - - - - - - - 119 - - - - - - - - 21 - - - - - - - - 13 - - - - - 20 - - - - - - - - 121 - - - - - 14 - - - - - - - - 117 - - - - - 19 - - - - - 256 - {{2, 2}, {332, 1}} - - - - - - 12 - - - - - 7 - - - - - - - - 112 - - - - - 26 - - - - - - - - 123 - - - - - 92 - - - - - - - - 124 - - - - - 98 - - - - - - - - 126 - - - - - 127 - - - - - - - - 128 - - - - - 9 - - - - - - - - 114 - - - - - 27 - - - - - 131 - - - - - - - - 132 - - - - - 133 - - - - - - - - 134 - - - - - 135 - - - - - - - - 136 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - The host name or IP address of the server to which you wish to connect. You can optionally append a port number with a colon. - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABCHAAAwxEAAA - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABC0gAAwtQAAA - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABBoAAAwvIAAA - - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - Connect to the server now - - - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABDbQAAwhQAAA - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - Select your desired connection profile. - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - The display number of the server to which you wish to connect - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - Ab+AAABCLAAAA - - - - ToolTip - - ToolTip - - Store this password in your Keychain for automatic retrieval next time. - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - AUGgAABCfAAAA - - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - Other clients can connect to the server at the same time as you. - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABAwAAAwbAAAA - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - {{336, 631}, {368, 375}} - com.apple.InterfaceBuilder.CocoaPlugin - {{336, 631}, {368, 375}} - - - {213, 107} - NSSecureTextField - - ToolTip - - ToolTip - - The password for the server to which you wish to connect - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABB0AAAwagAAA - - - - ToolTip - - ToolTip - - Hide your menubar and Dock and use the entire screen. - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - ToolTip - - ToolTip - - Keyboard and mouse events will not be sent to the server, you will only be observing. - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - 141 - - - - - FirstResponder - NSObject - - : - id - - - : - - : - id - - - - IBUserSource - - - - - NSObject - - IBProjectSource - Source/NSObject_Chicken.h - - - - ServerDataViewController - NSWindowController - - id - id - id - id - id - id - id - id - id - id - id - id - - - - addServerChanged: - id - - - cancelConnect: - id - - - connectToServer: - id - - - fullscreenChanged: - id - - - passwordChanged: - id - - - profileSelectionChanged: - id - - - rememberPwdChanged: - id - - - sharedChanged: - id - - - showProfileManager: - id - - - sshHostChanged: - id - - - useSshTunnelChanged: - id - - - viewOnlyChanged: - id - - - - NSBox - NSButton - NSProgressIndicator - NSTextField - NSTextField - NSTextField - NSButton - NSTextField - NSTextField - NSPopUpButton - NSButton - NSButton - NSButton - NSTextField - NSButton - NSButton - - - - box - NSBox - - - connectBtn - NSButton - - - connectIndicator - NSProgressIndicator - - - connectIndicatorText - NSTextField - - - display - NSTextField - - - displayDescription - NSTextField - - - fullscreen - NSButton - - - hostName - NSTextField - - - password - NSTextField - - - profilePopup - NSPopUpButton - - - rememberPwd - NSButton - - - save - NSButton - - - shared - NSButton - - - sshHost - NSTextField - - - useSshTunnel - NSButton - - - viewOnly - NSButton - - - - IBProjectSource - Source/ServerDataViewController.h - - - - ServerDataViewController - NSWindowController - - IBUserSource - - - - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUAppcast.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdater.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - ../../Chicken of the VNC.xcodeproj - 3 - - {9, 8} - {7, 2} - {15, 15} - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/English.lproj/ServerDisplay.nib/keyedobjects.nib b/Resources/English.lproj/ServerDisplay.nib/keyedobjects.nib index 8626375c82a4a9412fed70d57fd50d012bf0ecd2..da88aec3336d71b2c5a44d4314c8dd6c5afd95a3 100644 GIT binary patch literal 17734 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 M`~J55cD(lg0BQZJBme*a diff --git a/Source/IServerData.h b/Source/IServerData.h old mode 100644 new mode 100755 index 6e6fca2..c2dcce8 --- a/Source/IServerData.h +++ b/Source/IServerData.h @@ -29,6 +29,7 @@ typedef enum EDIT_ADDRESS, EDIT_PORT, EDIT_NAME, + EDIT_USERNAME, EDIT_PASSWORD, CONNECT, } SUPPORT_TYPE; @@ -41,6 +42,7 @@ typedef enum - (NSString*)name; - (NSString*)host; +- (NSString*)userName; - (NSString*)password; - (bool)rememberPassword; - (int)port; diff --git a/Source/RFBConnection.h b/Source/RFBConnection.h old mode 100644 new mode 100755 index 82d3292..1b8f19c --- a/Source/RFBConnection.h +++ b/Source/RFBConnection.h @@ -59,6 +59,7 @@ ByteReader *currentReader; RFBHandshaker *handshaker; id server_; + NSString *userName; NSString *password; RFBProtocol *rfbProtocol; CARD16 lastMouseX; // location of last mouse position we sent @@ -95,6 +96,7 @@ - (void)setRfbView:(RFBView *)view; - (void)setSession:(Session *)aSession; +- (void)setUserName:(NSString *)userName; - (void)setPassword:(NSString *)password; - (void)setSshTunnel:(SshTunnel *)tunnel; - (void)setReader:(ByteReader*)aReader; @@ -133,6 +135,7 @@ - (Profile*)profile; - (int) protocolMajorVersion; - (int) protocolMinorVersion; +- (NSString*)userName; - (NSString*)password; - (BOOL)connectShared; - (BOOL)viewOnly; diff --git a/Source/RFBConnection.m b/Source/RFBConnection.m old mode 100644 new mode 100755 index 2a84dfb..89b5481 --- a/Source/RFBConnection.m +++ b/Source/RFBConnection.m @@ -80,6 +80,7 @@ - (id)initWithFileHandle:(NSFileHandle*)file server:(id)server currentReader = nil; server_ = [(id)server retain]; + userName = [[server userName] retain]; password = [[server password] retain]; _eventFilter = [[EventFilter alloc] init]; @@ -177,6 +178,12 @@ - (void)setSession:(Session *)aSession session = aSession; } +- (void)setUserName:(NSString *)aUserName +{ + [userName release]; + userName = [aUserName retain]; +} + - (void)setPassword:(NSString *)aPassword { [password release]; @@ -300,6 +307,11 @@ - (void)start:(ServerInitMessage*)info handshaker = nil; } +- (NSString*)userName +{ + return userName; +} + - (NSString*)password { return password; diff --git a/Source/RFBHandshaker.m b/Source/RFBHandshaker.m old mode 100644 new mode 100755 index c1cf402..f0728aa --- a/Source/RFBHandshaker.m +++ b/Source/RFBHandshaker.m @@ -155,9 +155,18 @@ - (void)setAuthArray:(NSData*)authTypeArray { } - (void)atenDiscardDone { + const char *userName = [connection.userName UTF8String]; + if (userName == NULL) { + userName = ""; + } + const char *password = [connection.password UTF8String]; + if (password == NULL) { + password = ""; + } + unsigned char auth[48] = {0}; // *SPIT* - strlcpy((char*) &auth[0], "testuser", 24); - strlcpy((char*) &auth[24], "testpass", 24); + strlcpy((char*) &auth[0], userName, 24); + strlcpy((char*) &auth[24], password, 24); [connection writeBytes:&auth[0] length:sizeof(auth)]; [connection setReader:authResultReader]; } diff --git a/Source/ServerBase.h b/Source/ServerBase.h old mode 100644 new mode 100755 index 655a009..d59fd80 --- a/Source/ServerBase.h +++ b/Source/ServerBase.h @@ -29,6 +29,7 @@ // This represents all the data and settings needed to connect to a VNC server. @interface ServerBase : NSObject { NSString* _host; + NSString* _userName; NSString* _password; int _port; bool _shared; @@ -52,6 +53,7 @@ - (NSString*)name; - (NSString*)host; +- (NSString*)userName; - (NSString*)password; - (BOOL)rememberPassword; - (int)port; @@ -68,6 +70,7 @@ - (void)setHost: (NSString*)host; - (BOOL)setHostAndPort: (NSString*)host; +- (void)setUserName: (NSString*)userName; - (void)setPassword: (NSString*)password; - (void)setDisplay: (int)display; - (void)setShared: (bool)shared; diff --git a/Source/ServerBase.m b/Source/ServerBase.m old mode 100644 new mode 100755 index 7445187..1c0547d --- a/Source/ServerBase.m +++ b/Source/ServerBase.m @@ -40,6 +40,7 @@ - (id)init if( self = [super init] ) { _host = @"localhost"; + _userName = nil; _password = nil; _port = 5900; _shared = NO; @@ -81,6 +82,11 @@ - (NSString*)host return _host; } +- (NSString*)userName +{ + return _userName; +} + - (NSString*)password { return _password; @@ -204,6 +210,12 @@ - (BOOL)setHostAndPort: (NSString*)hostAndPort return NO; } +- (void)setUserName:(NSString *)userName +{ + [_userName autorelease]; + _userName = [userName retain]; +} + - (void)setPassword: (NSString*)password { [_password autorelease]; diff --git a/Source/ServerDataViewController.h b/Source/ServerDataViewController.h old mode 100644 new mode 100755 index fcab354..981705d --- a/Source/ServerDataViewController.h +++ b/Source/ServerDataViewController.h @@ -35,6 +35,7 @@ IBOutlet NSTextField *display; IBOutlet NSTextField *displayDescription; IBOutlet NSTextField *hostName; + IBOutlet NSTextField *userName; IBOutlet NSTextField *password; IBOutlet NSPopUpButton *profilePopup; IBOutlet NSButton *rememberPwd; @@ -66,6 +67,7 @@ - (void)setServer:(id)server; - (id)server; +- (IBAction)userNameChanged:(id)sender; - (IBAction)passwordChanged:(id)sender; - (IBAction)rememberPwdChanged:(id)sender; - (IBAction)profileSelectionChanged:(id)sender; diff --git a/Source/ServerDataViewController.m b/Source/ServerDataViewController.m old mode 100644 new mode 100755 index 8654183..2165b00 --- a/Source/ServerDataViewController.m +++ b/Source/ServerDataViewController.m @@ -42,23 +42,23 @@ - (id)init if (self = [super init]) { [NSBundle loadNibNamed:@"ServerDisplay.nib" owner:self]; - + selfTerminate = NO; removedSaveCheckbox = NO; - + [connectIndicatorText setStringValue:@""]; [box setBorderType:NSNoBorder]; connectionWaiter = nil; - + [self loadProfileIntoView]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateProfileView:) name:ProfileListChangeMsg object:(id)[ProfileDataManager sharedInstance]]; } - + return self; } @@ -68,7 +68,7 @@ - (id)initWithServer:(id)server { [self setServer:server]; } - + return self; } @@ -77,13 +77,13 @@ - (id)initWithReleaseOnCloseOrConnect if (self = [self init]) { selfTerminate = YES; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowClose:) name:NSWindowWillCloseNotification object:(id)[self window]]; } - + return self; } @@ -94,11 +94,11 @@ - (void)dealloc { [save release]; } - + [connectionWaiter cancel]; [connectionWaiter release]; [super dealloc]; - + [[NSNotificationCenter defaultCenter] removeObserver:self]; } @@ -111,18 +111,18 @@ - (void)setServer:(id)server object:(id)mServer]; [(id)mServer autorelease]; } - + mServer = [(id)server retain]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView:) name:ServerChangeMsg object:(id)mServer]; - + [self updateView:nil]; } - + - (void)updateView:(id)notification -{ +{ // Set properties in dialog box if (mServer != nil) { @@ -133,12 +133,13 @@ - (void)updateView:(id)notification { [self setSaveCheckboxIsVisible: NO]; } - + [hostName setEnabled: YES]; + [userName setEnabled: YES]; [password setEnabled: YES]; [shared setEnabled: YES]; [profilePopup setEnabled: YES]; - + if (port < DISPLAY_MAX) { // Low port numbers have to be encoded as host:port so they won't be // interpreted as display numbers @@ -173,6 +174,7 @@ - (void)updateView:(id)notification /* It's important to do password before rememberPwd so that * the latter will reflect a failure to retrieve the * passsword from the key chain. */ + [userName setStringValue:[mServer userName] ? [mServer userName] : @""]; [password setStringValue:[mServer password] ? [mServer password] : @""]; [rememberPwd setIntValue:[mServer rememberPassword]]; [shared setIntValue:[mServer shared]]; @@ -186,8 +188,9 @@ - (void)updateView:(id)notification [useSshTunnel setIntValue:YES]; [sshHost setStringValue:[mServer sshString]]; } - + [hostName setEnabled: [mServer doYouSupport:EDIT_ADDRESS]]; + [userName setEnabled: [mServer doYouSupport:EDIT_USERNAME]]; [password setEnabled: [mServer doYouSupport:EDIT_PASSWORD]]; [rememberPwd setEnabled: [mServer respondsToSelector:@selector(setRememberPassword:)]]; [useSshTunnel setEnabled: YES]; @@ -200,6 +203,7 @@ - (void)updateView:(id)notification else { [hostName setEnabled: NO]; + [userName setEnabled: NO]; [password setEnabled: NO]; [rememberPwd setEnabled: NO]; [display setEnabled: NO]; @@ -210,6 +214,7 @@ - (void)updateView:(id)notification [sshHost setEnabled: NO]; [hostName setStringValue:@""]; + [userName setStringValue:@""]; [password setStringValue:@""]; [rememberPwd setIntValue:0]; [display setStringValue:@""]; @@ -243,13 +248,13 @@ - (void)setProfilePopupToProfile: (Profile *)profile - (void)loadProfileIntoView { [profilePopup removeAllItems]; - + NSArray* profileKeys = [NSArray arrayWithArray:[[ProfileDataManager sharedInstance] sortedKeyArray]]; - + [profilePopup addItemsWithTitles:profileKeys]; [[profilePopup menu] addItem: [NSMenuItem separatorItem]]; [profilePopup addItemWithTitle:NSLocalizedString(@"EditProfiles", nil)]; - + [self setProfilePopupToProfile: [mServer profile]]; } @@ -286,7 +291,7 @@ - (void)descriptionFromPort { int port = [mServer port]; NSString *str; - + if (port >= PORT_BASE && port < PORT_BASE + DISPLAY_MAX) { NSString *fmt = NSLocalizedString(@"PortIsDisplay", nil); @@ -321,7 +326,7 @@ - (void)takePortFromDisplay - (void)controlTextDidChange:(NSNotification *)aNotification { NSControl* sender = [aNotification object]; - + if( display == sender ) { if( nil != mServer && [mServer doYouSupport:EDIT_PORT] ) @@ -354,6 +359,19 @@ - (void)controlTextDidChange:(NSNotification *)aNotification } } +- (IBAction)userNameChanged:(id)sender { + if ([mServer doYouSupport:EDIT_USERNAME]) { + NSString *str = [sender stringValue]; + + if ([str length] > 0) + [mServer setUserName:str]; + else { + [mServer setUserName:nil]; + } + } + +} + - (IBAction)passwordChanged:(id)sender { if ([mServer doYouSupport:EDIT_PASSWORD]) { @@ -483,7 +501,7 @@ - (IBAction)connectToServer:(id)sender server = s; } else server = mServer; - + // Asynchronously creates a connection to the server connectionWaiter = [[ConnectionWaiter waiterForServer:server delegate:self @@ -545,6 +563,7 @@ - (void)disableControls { [display setEnabled: NO]; [hostName setEnabled: NO]; + [userName setEnabled: NO]; [password setEnabled: NO]; [profilePopup setEnabled: NO]; [rememberPwd setEnabled: NO]; @@ -557,7 +576,7 @@ - (void)disableControls } - (void)windowClose:(id)notification -{ +{ if([notification object] == [self window]) { if( YES == selfTerminate ) diff --git a/Source/ServerFromConnection.m b/Source/ServerFromConnection.m old mode 100644 new mode 100755 index 3f7417c..c1e925f --- a/Source/ServerFromConnection.m +++ b/Source/ServerFromConnection.m @@ -45,6 +45,7 @@ - (bool)doYouSupport: (SUPPORT_TYPE)type case EDIT_ADDRESS: case EDIT_PORT: case EDIT_NAME: + case EDIT_USERNAME: case EDIT_PASSWORD: case CONNECT: return NO; diff --git a/Source/ServerFromPrefs.m b/Source/ServerFromPrefs.m old mode 100644 new mode 100755 index 2bc7fc4..ab92782 --- a/Source/ServerFromPrefs.m +++ b/Source/ServerFromPrefs.m @@ -149,6 +149,7 @@ - (bool)doYouSupport: (SUPPORT_TYPE)type case EDIT_ADDRESS: case EDIT_PORT: case EDIT_NAME: + case EDIT_USERNAME: case EDIT_PASSWORD: case CONNECT: return YES; diff --git a/Source/ServerStandAlone.m b/Source/ServerStandAlone.m old mode 100644 new mode 100755 index 9cb1bff..b8a34ea --- a/Source/ServerStandAlone.m +++ b/Source/ServerStandAlone.m @@ -40,6 +40,7 @@ - (bool)doYouSupport: (SUPPORT_TYPE)type case EDIT_ADDRESS: case EDIT_PORT: case EDIT_NAME: + case EDIT_USERNAME: case EDIT_PASSWORD: case CONNECT: return YES; From 167a698321384cdb0b6a0658d8e1bc2f34e65a45 Mon Sep 17 00:00:00 2001 From: Rob Mathers Date: Mon, 11 Jul 2016 19:49:13 -0400 Subject: [PATCH 2/2] Fixed textfield width --- .../ServerDisplay.nib/designable.nib | 2 +- .../ServerDisplay.nib/keyedobjects.nib | Bin 17734 -> 17734 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/English.lproj/ServerDisplay.nib/designable.nib b/Resources/English.lproj/ServerDisplay.nib/designable.nib index dc17b5c..71f20a6 100644 --- a/Resources/English.lproj/ServerDisplay.nib/designable.nib +++ b/Resources/English.lproj/ServerDisplay.nib/designable.nib @@ -271,7 +271,7 @@ DQ - + diff --git a/Resources/English.lproj/ServerDisplay.nib/keyedobjects.nib b/Resources/English.lproj/ServerDisplay.nib/keyedobjects.nib index da88aec3336d71b2c5a44d4314c8dd6c5afd95a3..12f9564248a9ee444db27580ec01479bce94cb18 100644 GIT binary patch delta 18 ZcmX@s#dxfXaYKaCkY42S)$^ delta 20 bcmX@s#dxfXaYKX>qvhmAZn@3nO6QdTQ(Fgt