summaryrefslogtreecommitdiffstats
path: root/ui/views/cocoa/widget_owner_nswindow_adapter.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views/cocoa/widget_owner_nswindow_adapter.h')
-rw-r--r--ui/views/cocoa/widget_owner_nswindow_adapter.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/ui/views/cocoa/widget_owner_nswindow_adapter.h b/ui/views/cocoa/widget_owner_nswindow_adapter.h
new file mode 100644
index 0000000..6b10e39
--- /dev/null
+++ b/ui/views/cocoa/widget_owner_nswindow_adapter.h
@@ -0,0 +1,47 @@
+// Copyright 2015 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.
+
+#ifndef UI_VIEWS_COCOA_WIDGET_OWNER_NSWINDOW_ADAPTER_H_
+#define UI_VIEWS_COCOA_WIDGET_OWNER_NSWINDOW_ADAPTER_H_
+
+#import "base/mac/scoped_nsobject.h"
+#import "ui/views/cocoa/bridged_native_widget_owner.h"
+
+@class NSView;
+@class WidgetOwnerNSWindowAdapterBridge;
+
+namespace views {
+
+// An adapter that allows a views::Widget to be owned by an NSWindow that is not
+// backed by another BridgedNativeWidget.
+class WidgetOwnerNSWindowAdapter : public BridgedNativeWidgetOwner {
+ public:
+ // Create an adapter that will own |child|, tying its lifetime with the
+ // NSWindow containing |anchor_view|. The object is self-deleting, via a call
+ // to RemoveChildWindow() made in child->OnWindowWillClose().
+ WidgetOwnerNSWindowAdapter(BridgedNativeWidget* child, NSView* anchor_view);
+
+ // Called when the owning window is closing.
+ void OnWindowWillClose();
+
+ // Overridden from BridgedNativeWidgetOwner:
+ NSWindow* GetNSWindow() override;
+ gfx::Vector2d GetChildWindowOffset() const override;
+ bool IsVisibleParent() const override;
+ void RemoveChildWindow(BridgedNativeWidget* child) override;
+
+ private:
+ // Self-deleting.
+ ~WidgetOwnerNSWindowAdapter() override;
+
+ BridgedNativeWidget* child_; // Weak. Owned by its NativeWidgetMac.
+ base::scoped_nsobject<NSView> anchor_view_;
+ base::scoped_nsobject<WidgetOwnerNSWindowAdapterBridge> observer_bridge_;
+
+ DISALLOW_COPY_AND_ASSIGN(WidgetOwnerNSWindowAdapter);
+};
+
+} // namespace views
+
+#endif // UI_VIEWS_COCOA_WIDGET_OWNER_NSWINDOW_ADAPTER_H_