Index: chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm |
diff --git a/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm b/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm |
index acdf26c6dac9d6399e6d4c716ac28b90584d5a22..450da08e040bd42fe753b7b237a65cb0053f08ef 100644 |
--- a/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm |
+++ b/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm |
@@ -4,10 +4,15 @@ |
#include "chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.h" |
+#include "base/command_line.h" |
#include "base/memory/scoped_nsobject.h" |
#include "chrome/browser/ui/browser_dialogs.h" |
+#include "chrome/browser/ui/cocoa/constrained_window/constrained_window_alert.h" |
+#include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac2.h" |
+#include "chrome/browser/ui/cocoa/view_util.h" |
#include "chrome/browser/ui/tab_contents/tab_contents.h" |
#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" |
+#include "chrome/common/chrome_switches.h" |
#include "ui/base/l10n/l10n_util_mac.h" |
#include "ui/gfx/image/image.h" |
@@ -46,8 +51,14 @@ namespace chrome { |
// Declared in browser_dialogs.h so others don't have to depend on our header. |
void ShowTabModalConfirmDialog(TabModalConfirmDialogDelegate* delegate, |
TabContents* tab_contents) { |
- // Deletes itself when closed. |
- new TabModalConfirmDialogMac(delegate, tab_contents); |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableFramelessConstrainedDialogs)) { |
+ // Deletes itself when closed. |
+ new TabModalConfirmDialogMac2(delegate, tab_contents); |
+ } else { |
+ // Deletes itself when closed. |
+ new TabModalConfirmDialogMac(delegate, tab_contents); |
+ } |
} |
} // namespace chrome |
@@ -91,3 +102,70 @@ TabModalConfirmDialogMac::~TabModalConfirmDialogMac() { |
void TabModalConfirmDialogMac::DeleteDelegate() { |
delete this; |
} |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+@interface TabModalConfirmDialogMacBridge2 : NSObject { |
+ TabModalConfirmDialogDelegate* delegate_; // weak |
+} |
+@end |
+ |
+@implementation TabModalConfirmDialogMacBridge2 |
+ |
+- (id)initWithDelegate:(TabModalConfirmDialogDelegate*)delegate { |
+ if ((self = [super init])) { |
+ delegate_ = delegate; |
+ DCHECK(delegate_); |
+ } |
+ return self; |
+} |
+ |
+- (void)onAcceptButton:(id)sender { |
+ delegate_->Accept(); |
+} |
+ |
+- (void)onCancelButton:(id)sender { |
+ delegate_->Cancel(); |
+} |
+ |
+@end |
+ |
+TabModalConfirmDialogMac2::TabModalConfirmDialogMac2( |
+ TabModalConfirmDialogDelegate* delegate, |
+ TabContents* tab_contents) |
+ : delegate_(delegate) { |
+ bridge_.reset([[TabModalConfirmDialogMacBridge2 alloc] |
+ initWithDelegate:delegate]); |
+ |
+ alert_.reset([[ConstrainedWindowAlert alloc] init]); |
+ [alert_ setMessageText: |
+ l10n_util::FixUpWindowsStyleLabel(delegate->GetTitle())]; |
+ [alert_ setInformativeText: |
+ l10n_util::FixUpWindowsStyleLabel(delegate->GetMessage())]; |
+ [alert_ addButtonWithTitle: |
+ l10n_util::FixUpWindowsStyleLabel(delegate->GetAcceptButtonTitle()) |
+ keyEquivalent:kKeyEquivalentReturn |
+ target:bridge_ |
+ action:@selector(onAcceptButton:)]; |
+ [alert_ addButtonWithTitle: |
+ l10n_util::FixUpWindowsStyleLabel(delegate->GetCancelButtonTitle()) |
+ keyEquivalent:kKeyEquivalentEscape |
+ target:bridge_ |
+ action:@selector(onCancelButton:)]; |
+ [[alert_ closeButton] setTarget:bridge_]; |
+ [[alert_ closeButton] setAction:@selector(onCancelButton:)]; |
+ [alert_ layout]; |
+ |
+ delegate->set_window( |
+ new ConstrainedWindowMac2(tab_contents, [alert_ window])); |
+} |
+ |
+TabModalConfirmDialogMac2::~TabModalConfirmDialogMac2() { |
+} |