Chromium Code Reviews| Index: chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_views_mac_views.mm |
| diff --git a/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_views_mac_views.mm b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_views_mac_views.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0e7d3093c7be5702c7da601f2a8efb2e2fa1da27 |
| --- /dev/null |
| +++ b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_views_mac_views.mm |
| @@ -0,0 +1,83 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
|
tapted
2016/05/04 03:29:25
call this file native_web_contents_modal_dialog_ma
Patti Lor
2016/05/11 01:35:18
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/ui/views/web_contents_modal_dialog_manager_views.h" |
| + |
| +#include <Cocoa/Cocoa.h> |
|
tapted
2016/05/04 03:29:25
nit: import
Patti Lor
2016/05/11 01:35:18
Done.
|
| + |
| +#include "components/constrained_window/constrained_window_views.h" |
| + |
| +class NativeWebContentsModalDialogManagerViewsMac |
|
tapted
2016/05/04 03:29:25
nit: needs a comment
Patti Lor
2016/05/11 01:35:19
Done.
|
| + : public NativeWebContentsModalDialogManagerViews { |
| + public: |
| + NativeWebContentsModalDialogManagerViewsMac( |
| + gfx::NativeWindow dialog, |
| + web_modal::SingleWebContentsDialogManagerDelegate* native_delegate) |
| + : NativeWebContentsModalDialogManagerViews(dialog, native_delegate) {} |
| + |
| + // NativeWebContentsModalDialogManagerViews: |
| + void OnPositionRequiresUpdate() override { |
| + views::Widget* widget = GetWidget(dialog()); |
| + gfx::Rect originalBounds = widget->GetWindowBoundsInScreen(); |
|
tapted
2016/05/04 03:29:25
perhaps just `bounds` since we change it later
Patti Lor
2016/05/11 01:35:18
Removed it entirely.
|
| + NativeWebContentsModalDialogManagerViews::OnPositionRequiresUpdate(); |
|
tapted
2016/05/04 03:29:25
does this need to be called at all?
Patti Lor
2016/05/11 01:35:19
Yup, the views version of ConstrainedWindow sets t
|
| + |
| + // Reset the dialog size to the area under the browser UI to avoid Cocoa |
|
tapted
2016/05/04 03:29:25
I don't think this is working right -- I can inter
Patti Lor
2016/05/11 01:35:19
Was this after resizing the browser? I realised th
|
| + // using the incorrect animation when dismissing the Cocoa sheet (changes |
| + // depending on whether the parent window is larger than the sheet). |
| + originalBounds.set_x(widget->GetWindowBoundsInScreen().x() - |
| + originalBounds.width() / 2); |
| + originalBounds.set_y(widget->GetWindowBoundsInScreen().y()); |
| + widget->SetBounds(originalBounds); |
| + } |
| + |
| + void ShowWidget(views::Widget* widget) override { |
| + NSWindow* dialogWindow = widget->GetNativeWindow(); |
|
tapted
2016/05/04 03:29:25
dialogWindow -> dialog_window (camelCase only betw
Patti Lor
2016/05/11 01:35:18
Done. Oops, sorry - thanks!
|
| + if (![dialogWindow attachedSheet]) { |
|
tapted
2016/05/04 03:29:25
comment about this? (when does it come up?)
Patti Lor
2016/05/11 01:35:19
Done.
|
| + NativeWebContentsModalDialogManagerViews::ShowWidget(widget); |
| + return; |
| + } |
| + |
| + ChangeVisibilityAndMouseEvents(dialogWindow, true); |
| + } |
| + |
| + void HideWidget(views::Widget* widget) override { |
| + NSWindow* dialogWindow = widget->GetNativeWindow(); |
| + if (![dialogWindow attachedSheet]) { |
| + NativeWebContentsModalDialogManagerViews::HideWidget(widget); |
| + return; |
| + } |
| + |
| + // Avoid views::Widget::Show() as a call to orderOut: on a NSWindow with an |
| + // attached sheet will close the sheet. Instead, just set the sheet to 0 |
| + // opacity and don't accept click events. |
| + ChangeVisibilityAndMouseEvents(dialogWindow, false); |
| + } |
| + |
| + private: |
| + /** Makes the given window invisible and ignore mouse events. |
| + */ |
| + void ChangeVisibilityAndMouseEvents(gfx::NativeWindow window, bool show) { |
|
tapted
2016/05/04 03:29:25
perhaps call this
void SetOverlayVisible(gfx::Na
Patti Lor
2016/05/11 01:35:18
The overlay should be invisible the whole time, so
|
| + CGFloat alpha = show ? 1.0 : 0.0; |
| + BOOL mouseEvents = show ? NO : YES; |
|
tapted
2016/05/04 03:29:25
mouseEvents -> ignore_events
Patti Lor
2016/05/11 01:35:19
Done.
|
| + |
| + // Don't allow interaction with the tab underneath the certificate viewer. |
|
tapted
2016/05/04 03:29:25
tab -> overlayWindow?
Patti Lor
2016/05/11 01:35:19
Maybe WebContents? The line below is setting the o
|
| + [window setIgnoresMouseEvents:mouseEvents]; |
| + |
| + [[window attachedSheet] setAlphaValue:alpha]; |
|
tapted
2016/05/04 03:29:25
does this always hide the sheet? I thought we'd ne
Patti Lor
2016/05/11 01:35:18
What do you mean by 'always'? Are there cases othe
|
| + [[window attachedSheet] setIgnoresMouseEvents:mouseEvents]; |
| + } |
| + |
| +}; |
|
tapted
2016/05/04 03:29:25
DISALLOW_COPY_AND_ASSIGN(..)
Patti Lor
2016/05/11 01:35:19
Done.
|
| + |
| +namespace web_modal { |
| + |
| +SingleWebContentsDialogManager* |
| +WebContentsModalDialogManager::CreateNativeWebModalManager( |
| + gfx::NativeWindow dialog, |
| + SingleWebContentsDialogManagerDelegate* native_delegate) { |
| + return new NativeWebContentsModalDialogManagerViewsMac(dialog, |
| + native_delegate); |
| +} |
| + |
| +} // namespace web_modal |