1 // Copyright (c) 2012 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 #ifndef UI_VIEWS_WIDGET_NATIVE_WIDGET_AURA_H_ 6 #define UI_VIEWS_WIDGET_NATIVE_WIDGET_AURA_H_ 7 8 #include "base/memory/scoped_vector.h" 9 #include "base/memory/weak_ptr.h" 10 #include "ui/aura/client/focus_change_observer.h" 11 #include "ui/aura/window_delegate.h" 12 #include "ui/base/cursor/cursor.h" 13 #include "ui/events/event_constants.h" 14 #include "ui/views/ime/input_method_delegate.h" 15 #include "ui/views/views_export.h" 16 #include "ui/views/widget/native_widget_private.h" 17 #include "ui/wm/public/activation_change_observer.h" 18 #include "ui/wm/public/activation_delegate.h" 19 #include "ui/wm/public/drag_drop_delegate.h" 20 21 namespace aura { 22 class Window; 23 } 24 namespace gfx { 25 class FontList; 26 } 27 28 namespace views { 29 30 class DropHelper; 31 class TooltipManagerAura; 32 class WindowReorderer; 33 34 class VIEWS_EXPORT NativeWidgetAura 35 : public internal::NativeWidgetPrivate, 36 public internal::InputMethodDelegate, 37 public aura::WindowDelegate, 38 public aura::client::ActivationDelegate, 39 public aura::client::ActivationChangeObserver, 40 public aura::client::FocusChangeObserver, 41 public aura::client::DragDropDelegate { 42 public: 43 explicit NativeWidgetAura(internal::NativeWidgetDelegate* delegate); 44 45 // Called internally by NativeWidgetAura and DesktopNativeWidgetAura to 46 // associate |native_widget| with |window|. 47 static void RegisterNativeWidgetForWindow( 48 internal::NativeWidgetPrivate* native_widget, 49 aura::Window* window); 50 51 // Overridden from internal::NativeWidgetPrivate: 52 virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE; 53 virtual NonClientFrameView* CreateNonClientFrameView() OVERRIDE; 54 virtual bool ShouldUseNativeFrame() const OVERRIDE; 55 virtual bool ShouldWindowContentsBeTransparent() const OVERRIDE; 56 virtual void FrameTypeChanged() OVERRIDE; 57 virtual Widget* GetWidget() OVERRIDE; 58 virtual const Widget* GetWidget() const OVERRIDE; 59 virtual gfx::NativeView GetNativeView() const OVERRIDE; 60 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; 61 virtual Widget* GetTopLevelWidget() OVERRIDE; 62 virtual const ui::Compositor* GetCompositor() const OVERRIDE; 63 virtual ui::Compositor* GetCompositor() OVERRIDE; 64 virtual ui::Layer* GetLayer() OVERRIDE; 65 virtual void ReorderNativeViews() OVERRIDE; 66 virtual void ViewRemoved(View* view) OVERRIDE; 67 virtual void SetNativeWindowProperty(const char* name, void* value) OVERRIDE; 68 virtual void* GetNativeWindowProperty(const char* name) const OVERRIDE; 69 virtual TooltipManager* GetTooltipManager() const OVERRIDE; 70 virtual void SetCapture() OVERRIDE; 71 virtual void ReleaseCapture() OVERRIDE; 72 virtual bool HasCapture() const OVERRIDE; 73 virtual InputMethod* CreateInputMethod() OVERRIDE; 74 virtual internal::InputMethodDelegate* GetInputMethodDelegate() OVERRIDE; 75 virtual ui::InputMethod* GetHostInputMethod() OVERRIDE; 76 virtual void CenterWindow(const gfx::Size& size) OVERRIDE; 77 virtual void GetWindowPlacement( 78 gfx::Rect* bounds, 79 ui::WindowShowState* maximized) const OVERRIDE; 80 virtual bool SetWindowTitle(const base::string16& title) OVERRIDE; 81 virtual void SetWindowIcons(const gfx::ImageSkia& window_icon, 82 const gfx::ImageSkia& app_icon) OVERRIDE; 83 virtual void InitModalType(ui::ModalType modal_type) OVERRIDE; 84 virtual gfx::Rect GetWindowBoundsInScreen() const OVERRIDE; 85 virtual gfx::Rect GetClientAreaBoundsInScreen() const OVERRIDE; 86 virtual gfx::Rect GetRestoredBounds() const OVERRIDE; 87 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 88 virtual void SetSize(const gfx::Size& size) OVERRIDE; 89 virtual void StackAbove(gfx::NativeView native_view) OVERRIDE; 90 virtual void StackAtTop() OVERRIDE; 91 virtual void StackBelow(gfx::NativeView native_view) OVERRIDE; 92 virtual void SetShape(gfx::NativeRegion shape) OVERRIDE; 93 virtual void Close() OVERRIDE; 94 virtual void CloseNow() OVERRIDE; 95 virtual void Show() OVERRIDE; 96 virtual void Hide() OVERRIDE; 97 virtual void ShowMaximizedWithBounds( 98 const gfx::Rect& restored_bounds) OVERRIDE; 99 virtual void ShowWithWindowState(ui::WindowShowState state) OVERRIDE; 100 virtual bool IsVisible() const OVERRIDE; 101 virtual void Activate() OVERRIDE; 102 virtual void Deactivate() OVERRIDE; 103 virtual bool IsActive() const OVERRIDE; 104 virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE; 105 virtual bool IsAlwaysOnTop() const OVERRIDE; 106 virtual void SetVisibleOnAllWorkspaces(bool always_visible) OVERRIDE; 107 virtual void Maximize() OVERRIDE; 108 virtual void Minimize() OVERRIDE; 109 virtual bool IsMaximized() const OVERRIDE; 110 virtual bool IsMinimized() const OVERRIDE; 111 virtual void Restore() OVERRIDE; 112 virtual void SetFullscreen(bool fullscreen) OVERRIDE; 113 virtual bool IsFullscreen() const OVERRIDE; 114 virtual void SetOpacity(unsigned char opacity) OVERRIDE; 115 virtual void SetUseDragFrame(bool use_drag_frame) OVERRIDE; 116 virtual void FlashFrame(bool flash_frame) OVERRIDE; 117 virtual void RunShellDrag(View* view, 118 const ui::OSExchangeData& data, 119 const gfx::Point& location, 120 int operation, 121 ui::DragDropTypes::DragEventSource source) OVERRIDE; 122 virtual void SchedulePaintInRect(const gfx::Rect& rect) OVERRIDE; 123 virtual void SetCursor(gfx::NativeCursor cursor) OVERRIDE; 124 virtual bool IsMouseEventsEnabled() const OVERRIDE; 125 virtual void ClearNativeFocus() OVERRIDE; 126 virtual gfx::Rect GetWorkAreaBoundsInScreen() const OVERRIDE; 127 virtual Widget::MoveLoopResult RunMoveLoop( 128 const gfx::Vector2d& drag_offset, 129 Widget::MoveLoopSource source, 130 Widget::MoveLoopEscapeBehavior escape_behavior) OVERRIDE; 131 virtual void EndMoveLoop() OVERRIDE; 132 virtual void SetVisibilityChangedAnimationsEnabled(bool value) OVERRIDE; 133 virtual ui::NativeTheme* GetNativeTheme() const OVERRIDE; 134 virtual void OnRootViewLayout() const OVERRIDE; 135 virtual bool IsTranslucentWindowOpacitySupported() const OVERRIDE; 136 virtual void RepostNativeEvent(gfx::NativeEvent native_event) OVERRIDE; 137 138 // Overridden from views::InputMethodDelegate: 139 virtual void DispatchKeyEventPostIME(const ui::KeyEvent& key) OVERRIDE; 140 141 // Overridden from aura::WindowDelegate: 142 virtual gfx::Size GetMinimumSize() const OVERRIDE; 143 virtual gfx::Size GetMaximumSize() const OVERRIDE; 144 virtual void OnBoundsChanged(const gfx::Rect& old_bounds, 145 const gfx::Rect& new_bounds) OVERRIDE; 146 virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE; 147 virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE; 148 virtual bool ShouldDescendIntoChildForEventHandling( 149 aura::Window* child, 150 const gfx::Point& location) OVERRIDE; 151 virtual bool CanFocus() OVERRIDE; 152 virtual void OnCaptureLost() OVERRIDE; 153 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 154 virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE; 155 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; 156 virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; 157 virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE; 158 virtual bool HasHitTestMask() const OVERRIDE; 159 virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE; 160 161 // Overridden from ui::EventHandler: 162 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 163 virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; 164 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE; 165 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 166 167 // Overridden from aura::client::ActivationDelegate: 168 virtual bool ShouldActivate() const OVERRIDE; 169 170 // Overridden from aura::client::ActivationChangeObserver: 171 virtual void OnWindowActivated(aura::Window* gained_active, 172 aura::Window* lost_active) OVERRIDE; 173 174 // Overridden from aura::client::FocusChangeObserver: 175 virtual void OnWindowFocused(aura::Window* gained_focus, 176 aura::Window* lost_focus) OVERRIDE; 177 178 // Overridden from aura::client::DragDropDelegate: 179 virtual void OnDragEntered(const ui::DropTargetEvent& event) OVERRIDE; 180 virtual int OnDragUpdated(const ui::DropTargetEvent& event) OVERRIDE; 181 virtual void OnDragExited() OVERRIDE; 182 virtual int OnPerformDrop(const ui::DropTargetEvent& event) OVERRIDE; 183 184 protected: 185 virtual ~NativeWidgetAura(); 186 delegate()187 internal::NativeWidgetDelegate* delegate() { return delegate_; } 188 189 private: 190 class ActiveWindowObserver; 191 192 void SetInitialFocus(ui::WindowShowState show_state); 193 194 internal::NativeWidgetDelegate* delegate_; 195 196 // WARNING: set to NULL when destroyed. As the Widget is not necessarily 197 // destroyed along with |window_| all usage of |window_| should first verify 198 // non-NULL. 199 aura::Window* window_; 200 201 // See class documentation for Widget in widget.h for a note about ownership. 202 Widget::InitParams::Ownership ownership_; 203 204 // The following factory is used for calls to close the NativeWidgetAura 205 // instance. 206 base::WeakPtrFactory<NativeWidgetAura> close_widget_factory_; 207 208 // Are we in the destructor? 209 bool destroying_; 210 211 gfx::NativeCursor cursor_; 212 213 // The saved window state for exiting full screen state. 214 ui::WindowShowState saved_window_state_; 215 216 scoped_ptr<TooltipManagerAura> tooltip_manager_; 217 218 // Reorders child windows of |window_| associated with a view based on the 219 // order of the associated views in the widget's view hierarchy. 220 scoped_ptr<WindowReorderer> window_reorderer_; 221 222 scoped_ptr<DropHelper> drop_helper_; 223 int last_drop_operation_; 224 225 DISALLOW_COPY_AND_ASSIGN(NativeWidgetAura); 226 }; 227 228 } // namespace views 229 230 #endif // UI_VIEWS_WIDGET_NATIVE_WIDGET_AURA_H_ 231