Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Side by Side Diff: chrome/browser/cocoa/constrained_window_mac.mm

Issue 164547: Mac: make save/open dialogs operate as tab-modal sheets.... Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Painfully (but hopefully correctly) merged ToT. Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/cocoa/constrained_window_mac.h" 5 #include "chrome/browser/cocoa/constrained_window_mac.h"
6 6
7 #import "chrome/browser/cocoa/browser_window_controller.h" 7 #import "chrome/browser/cocoa/browser_window_controller.h"
8 #include "chrome/browser/tab_contents/tab_contents.h" 8 #include "chrome/browser/tab_contents/tab_contents.h"
9 #include "chrome/browser/tab_contents/tab_contents_view.h" 9 #include "chrome/browser/tab_contents/tab_contents_view.h"
10 #import "third_party/GTM/AppKit/GTMWindowSheetController.h" 10 #import "third_party/GTM/AppKit/GTMWindowSheetController.h"
11 11
12 ConstrainedWindowMacDelegate::~ConstrainedWindowMacDelegate() {} 12 ConstrainedWindowMacDelegate::~ConstrainedWindowMacDelegate() {}
13 13
14 void ConstrainedWindowMacDelegateSystemSheetParams::RunSheet(
15 GTMWindowSheetController* sheetController,
16 NSView* view,
17 SEL frameSelector,
18 SEL positionSelector) {
19 DCHECK([params_ isKindOfClass:[NSArray class]]);
20 [sheetController beginSystemSheet:systemSheet_
21 modalForView:view
22 frameSelector:frameSelector
23 positionSelector:positionSelector
24 withParameters:params_];
25 }
26
14 void ConstrainedWindowMacDelegateSystemSheet::RunSheet( 27 void ConstrainedWindowMacDelegateSystemSheet::RunSheet(
15 GTMWindowSheetController* sheetController, 28 GTMWindowSheetController* sheetController,
16 NSView* view) { 29 NSView* view,
30 SEL frameSelector,
31 SEL positionSelector) {
17 NSArray* params = [NSArray arrayWithObjects: 32 NSArray* params = [NSArray arrayWithObjects:
18 [NSNull null], // window, must be [NSNull null] 33 [NSNull null], // window, must be [NSNull null]
19 delegate_.get(), 34 delegate_.get(),
20 [NSValue valueWithPointer:didEndSelector_], 35 [NSValue valueWithPointer:didEndSelector_],
21 [NSValue valueWithPointer:NULL], // context info for didEndSelector_. 36 [NSValue valueWithPointer:NULL], // context info for didEndSelector_.
22 nil]; 37 nil];
23 [sheetController beginSystemSheet:systemSheet_ 38 set_params(params);
24 modalForView:view 39 ConstrainedWindowMacDelegateSystemSheetParams::RunSheet(sheetController,
25 withParameters:params]; 40 view,
41 frameSelector,
42 positionSelector);
26 } 43 }
27 44
28 void ConstrainedWindowMacDelegateCustomSheet::RunSheet( 45 void ConstrainedWindowMacDelegateCustomSheet::RunSheet(
29 GTMWindowSheetController* sheetController, 46 GTMWindowSheetController* sheetController,
30 NSView* view) { 47 NSView* view,
48 SEL frameSelector,
49 SEL positionSelector) {
31 [sheetController beginSheet:customSheet_.get() 50 [sheetController beginSheet:customSheet_.get()
32 modalForView:view 51 modalForView:view
52 frameSelector:frameSelector
53 positionSelector:positionSelector
33 modalDelegate:delegate_.get() 54 modalDelegate:delegate_.get()
34 didEndSelector:didEndSelector_ 55 didEndSelector:didEndSelector_
35 contextInfo:NULL]; 56 contextInfo:NULL];
36 } 57 }
37 58
38 // static 59 // static
39 ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog( 60 ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog(
40 TabContents* parent, 61 TabContents* parent,
41 ConstrainedWindowMacDelegate* delegate) { 62 ConstrainedWindowMacDelegate* delegate) {
42 return new ConstrainedWindowMac(parent, delegate); 63 return new ConstrainedWindowMac(parent, delegate);
43 } 64 }
44 65
45 ConstrainedWindowMac::ConstrainedWindowMac( 66 ConstrainedWindowMac::ConstrainedWindowMac(
46 TabContents* owner, ConstrainedWindowMacDelegate* delegate) 67 TabContents* owner, ConstrainedWindowMacDelegate* delegate)
47 : owner_(owner), 68 : owner_(owner),
48 delegate_(delegate), 69 delegate_(delegate),
49 controller_(nil) { 70 controller_(nil) {
50 DCHECK(owner); 71 DCHECK(owner);
51 DCHECK(delegate); 72 DCHECK(delegate);
52 73
74 modality_level_ = delegate->GetModalityLevel();
75
53 // The TabContents only has a native window if it is currently visible. In 76 // The TabContents only has a native window if it is currently visible. In
54 // this case, open the sheet now. Else, Realize() will be called later, when 77 // this case, open the sheet now. Else, Realize() will be called later, when
55 // our tab becomes visible. 78 // our tab becomes visible.
56 NSWindow* browserWindow = owner_->view()->GetTopLevelNativeWindow(); 79 NSWindow* browserWindow = owner_->view()->GetTopLevelNativeWindow();
57 NSWindowController* controller = [browserWindow windowController]; 80 NSWindowController* controller = [browserWindow windowController];
58 if (controller != nil) { 81 if (controller != nil) {
59 DCHECK([controller isKindOfClass:[BrowserWindowController class]]); 82 DCHECK([controller isKindOfClass:[BrowserWindowController class]]);
60 Realize(static_cast<BrowserWindowController*>(controller)); 83 Realize(static_cast<BrowserWindowController*>(controller));
61 } 84 }
62 } 85 }
63 86
64 ConstrainedWindowMac::~ConstrainedWindowMac() {} 87 ConstrainedWindowMac::~ConstrainedWindowMac() {}
65 88
66 void ConstrainedWindowMac::CloseConstrainedWindow() { 89 void ConstrainedWindowMac::CloseConstrainedWindow() {
67 // Note: controller_ can be `nil` here if the sheet was never realized. That's 90 // Note: controller_ can be `nil` here if the sheet was never realized. That's
68 // ok. 91 // ok.
69 [controller_ removeConstrainedWindow:this]; 92 [controller_ removeConstrainedWindow:this];
70 delegate_->DeleteDelegate(); 93
71 owner_->WillClose(this); 94 DCHECK(delegate_);
95 if (delegate_)
96 delegate_->DeleteDelegate();
97
98 DCHECK(owner_);
99 if (owner_)
100 owner_->WillClose(this);
72 101
73 delete this; 102 delete this;
74 } 103 }
75 104
105 bool ConstrainedWindowMac::ParentWillDo(ConstrainedWindow::Event event) {
106 // Just get our delegate to handle it. If it doesn't do anything, call our
107 // super's handler.
108 DCHECK(delegate_);
109 if (delegate_) {
110 if (delegate_->ParentWillDo(event))
111 return true;
112 }
113 return ConstrainedWindow::ParentWillDo(event);
114 }
115
76 void ConstrainedWindowMac::Realize(BrowserWindowController* controller) { 116 void ConstrainedWindowMac::Realize(BrowserWindowController* controller) {
77 if (controller_ != nil) { 117 if (controller_ != nil) {
78 DCHECK(controller_ == controller); 118 DCHECK(controller_ == controller);
79 return; 119 return;
80 } 120 }
81 DCHECK(controller != nil); 121 DCHECK(controller != nil);
82 122
83 // Remember the controller we're adding ourselves to, so that we can later 123 // Remember the controller we're adding ourselves to, so that we can later
84 // remove us from it. 124 // remove us from it.
85 controller_ = controller; 125 controller_ = controller;
86 [controller_ attachConstrainedWindow:this]; 126 [controller_ attachConstrainedWindow:this];
87 delegate_->set_sheet_open(true); 127 delegate_->set_sheet_open(true);
88 } 128 }
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/constrained_window_mac.h ('k') | chrome/browser/cocoa/download_request_dialog_delegate_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698