summaryrefslogtreecommitdiffstats
path: root/ui/views/cocoa/widget_owner_nswindow_adapter.h
blob: 6b10e394ea166d6424f4ef25b4629904a220445f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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_