Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / views / cocoa / bridged_native_widget.h
index 59754d1..64cf81d 100644 (file)
@@ -9,10 +9,13 @@
 
 #import "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_ptr.h"
+#import "ui/views/focus/focus_manager.h"
 #include "ui/views/ime/input_method_delegate.h"
 #include "ui/views/views_export.h"
+#include "ui/views/widget/widget.h"
 
 @class BridgedContentView;
+@class ViewsNSWindowDelegate;
 
 namespace ui {
 class InputMethod;
@@ -21,28 +24,39 @@ class InputMethod;
 namespace views {
 
 class InputMethod;
+class NativeWidgetMac;
 class View;
 
 // A bridge to an NSWindow managed by an instance of NativeWidgetMac or
 // DesktopNativeWidgetMac. Serves as a helper class to bridge requests from the
 // NativeWidgetMac to the Cocoa window. Behaves a bit like an aura::Window.
-class VIEWS_EXPORT BridgedNativeWidget : public internal::InputMethodDelegate {
-
+class VIEWS_EXPORT BridgedNativeWidget : public internal::InputMethodDelegate,
+                                         public FocusChangeListener {
  public:
-  BridgedNativeWidget();
+  // Creates one side of the bridge. |parent| must not be NULL.
+  explicit BridgedNativeWidget(NativeWidgetMac* parent);
   virtual ~BridgedNativeWidget();
 
   // Initialize the bridge, "retains" ownership of |window|.
-  void Init(base::scoped_nsobject<NSWindow> window);
+  void Init(base::scoped_nsobject<NSWindow> window,
+            const Widget::InitParams& params);
+
+  // Sets or clears the focus manager to use for tracking focused views.
+  // This does NOT take ownership of |focus_manager|.
+  void SetFocusManager(FocusManager* focus_manager);
 
   // Set or clears the views::View bridged by the content view. This does NOT
   // take ownership of |view|.
   void SetRootView(views::View* view);
 
+  // Called internally by the NSWindowDelegate when the window is closing.
+  void OnWindowWillClose();
+
   // See widget.h for documentation.
   InputMethod* CreateInputMethod();
   ui::InputMethod* GetHostInputMethod();
 
+  NativeWidgetMac* native_widget_mac() { return native_widget_mac_; }
   BridgedContentView* ns_view() { return bridged_view_; }
   NSWindow* ns_window() { return window_; }
 
@@ -50,9 +64,21 @@ class VIEWS_EXPORT BridgedNativeWidget : public internal::InputMethodDelegate {
   virtual void DispatchKeyEventPostIME(const ui::KeyEvent& key) OVERRIDE;
 
  private:
+  // Closes all child windows. BridgedNativeWidget children will be destroyed.
+  void RemoveOrDestroyChildren();
+
+  views::NativeWidgetMac* native_widget_mac_;  // Weak. Owns this.
   base::scoped_nsobject<NSWindow> window_;
+  base::scoped_nsobject<ViewsNSWindowDelegate> window_delegate_;
   base::scoped_nsobject<BridgedContentView> bridged_view_;
   scoped_ptr<ui::InputMethod> input_method_;
+  FocusManager* focus_manager_;  // Weak. Owned by our Widget.
+
+  // Overridden from FocusChangeListener:
+  virtual void OnWillChangeFocus(View* focused_before,
+                                 View* focused_now) OVERRIDE;
+  virtual void OnDidChangeFocus(View* focused_before,
+                                View* focused_now) OVERRIDE;
 
   DISALLOW_COPY_AND_ASSIGN(BridgedNativeWidget);
 };