// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #import #import "remoting/host/disconnect_window_mac.h" #include "base/compiler_specific.h" #include "base/sys_string_conversions.h" #include "remoting/host/chromoting_host.h" #include "remoting/host/disconnect_window.h" namespace remoting { class DisconnectWindowMac : public remoting::DisconnectWindow { public: DisconnectWindowMac(); virtual ~DisconnectWindowMac(); virtual void Show(remoting::ChromotingHost* host, const std::string& username) OVERRIDE; virtual void Hide() OVERRIDE; private: DisconnectWindowController* window_controller_; DISALLOW_COPY_AND_ASSIGN(DisconnectWindowMac); }; DisconnectWindowMac::DisconnectWindowMac() : window_controller_(nil) { } DisconnectWindowMac::~DisconnectWindowMac() { [window_controller_ close]; } void DisconnectWindowMac::Show(remoting::ChromotingHost* host, const std::string& username) { CHECK(window_controller_ == nil); NSString* nsUsername = base::SysUTF8ToNSString(username); window_controller_ = [[DisconnectWindowController alloc] initWithHost:host window:this username:nsUsername]; [window_controller_ showWindow:nil]; } void DisconnectWindowMac::Hide() { // DisconnectWindowController is responsible for releasing itself in its // windowWillClose: method. [window_controller_ close]; window_controller_ = nil; } remoting::DisconnectWindow* remoting::DisconnectWindow::Create() { return new DisconnectWindowMac; } } // namespace remoting @interface DisconnectWindowController() @property (nonatomic, assign) remoting::ChromotingHost* host; @property (nonatomic, assign) remoting::DisconnectWindowMac* disconnectWindow; @property (nonatomic, copy) NSString* username; @end @implementation DisconnectWindowController @synthesize host = host_; @synthesize disconnectWindow = disconnectWindow_; @synthesize username = username_; - (id)initWithHost:(remoting::ChromotingHost*)host window:(remoting::DisconnectWindowMac*)disconnectWindow username:(NSString*)username { self = [super initWithWindowNibName:@"disconnect_window"]; if (self) { host_ = host; disconnectWindow_ = disconnectWindow; username_ = [username copy]; } return self; } - (void)dealloc { [username_ release]; [super dealloc]; } - (IBAction)stopSharing:(id)sender { if (self.host) { self.host->Shutdown(NULL); self.host = NULL; } self.disconnectWindow = NULL; } - (void)windowDidLoad { // TODO(jamiewalch): Resize the window to fit the username without leaving too // much space. [usernameField_ setStringValue:self.username]; } - (void)windowWillClose:(NSNotification*)notification { [self stopSharing:self]; [self autorelease]; } @end