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

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

Issue 159780: Add support for constrained windows on os x, based on Avi's GTMWindowSheetController. (Closed)
Patch Set: Merge with ToT Created 11 years, 4 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/cocoa/constrained_window_mac.h"
6
7 #import "chrome/browser/cocoa/browser_window_controller.h"
8 #include "chrome/browser/tab_contents/tab_contents.h"
9 #include "chrome/browser/tab_contents/tab_contents_view.h"
10 #import "third_party/GTM/AppKit/GTMWindowSheetController.h"
11
12 ConstrainedWindowMacDelegate::~ConstrainedWindowMacDelegate() {}
13
14 void ConstrainedWindowMacDelegateSystemSheet::RunSheet(
15 GTMWindowSheetController* sheetController,
16 NSView* view) {
17 NSArray* params = [NSArray arrayWithObjects:
18 [NSNull null], // window, must be [NSNull null]
19 delegate_.get(),
20 [NSValue valueWithPointer:didEndSelector_],
21 [NSValue valueWithPointer:NULL], // context info for didEndSelector_.
22 nil];
23 [sheetController beginSystemSheet:systemSheet_
24 modalForView:view
25 withParameters:params];
26 }
27
28 void ConstrainedWindowMacDelegateCustomSheet::RunSheet(
29 GTMWindowSheetController* sheetController,
30 NSView* view) {
31 [sheetController beginSheet:customSheet_.get()
32 modalForView:view modalDelegate:delegate_.get()
33 didEndSelector:didEndSelector_
34 contextInfo:NULL];
35 }
36
37 // static
38 ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog(
39 TabContents* parent,
40 ConstrainedWindowMacDelegate* delegate) {
41 return new ConstrainedWindowMac(parent, delegate);
42 }
43
44 ConstrainedWindowMac::ConstrainedWindowMac(
45 TabContents* owner, ConstrainedWindowMacDelegate* delegate)
46 : owner_(owner),
47 delegate_(delegate),
48 controller_(nil) {
49 DCHECK(owner);
50 DCHECK(delegate);
51
52 // The TabContents only has a native window if it is currently visible. In
53 // this case, open the sheet now. Else, Realize() will be called later, when
54 // our tab becomes visible.
55 NSWindow* browserWindow = owner_->view()->GetTopLevelNativeWindow();
56 NSWindowController* controller = [browserWindow windowController];
57 if (controller != nil) {
58 DCHECK([controller isKindOfClass:[BrowserWindowController class]]);
59 Realize(static_cast<BrowserWindowController*>(controller));
60 }
61 }
62
63 ConstrainedWindowMac::~ConstrainedWindowMac() {}
64
65 void ConstrainedWindowMac::CloseConstrainedWindow() {
66 // Note: controller_ can be `nil` here if the sheet was never realized. That's
67 // ok.
68 [controller_ removeConstrainedWindow:this];
69 delegate_->DeleteDelegate();
70 owner_->WillClose(this);
71
72 delete this;
73 }
74
75 void ConstrainedWindowMac::Realize(BrowserWindowController* controller) {
76 if (controller_ != nil) {
77 DCHECK(controller_ == controller);
78 return;
79 }
80 DCHECK(controller != nil);
81
82 // Remember the controller we're adding ourselves to, so that we can later
83 // remove us from it.
84 controller_ = controller;
85 [controller_ attachConstrainedWindow:this];
86 delegate_->set_sheet_open(true);
87 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698