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