| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" | 5 #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "ui/aura/client/aura_constants.h" | 9 #include "ui/aura/client/aura_constants.h" |
| 10 #include "ui/aura/client/cursor_client.h" | 10 #include "ui/aura/client/cursor_client.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 | 111 |
| 112 aura::Window* native_window = | 112 aura::Window* native_window = |
| 113 top_level_handler->top_level_widget_->GetNativeView(); | 113 top_level_handler->top_level_widget_->GetNativeView(); |
| 114 child_window->AddObserver(top_level_handler); | 114 child_window->AddObserver(top_level_handler); |
| 115 native_window->AddObserver(top_level_handler); | 115 native_window->AddObserver(top_level_handler); |
| 116 top_level_handler->child_window_ = child_window; | 116 top_level_handler->child_window_ = child_window; |
| 117 return native_window; | 117 return native_window; |
| 118 } | 118 } |
| 119 | 119 |
| 120 // aura::WindowObserver overrides | 120 // aura::WindowObserver overrides |
| 121 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE { | 121 virtual void OnWindowDestroying(aura::Window* window) override { |
| 122 window->RemoveObserver(this); | 122 window->RemoveObserver(this); |
| 123 | 123 |
| 124 // If the widget is being destroyed by the OS then we should not try and | 124 // If the widget is being destroyed by the OS then we should not try and |
| 125 // destroy it again. | 125 // destroy it again. |
| 126 if (top_level_widget_ && | 126 if (top_level_widget_ && |
| 127 window == top_level_widget_->GetNativeView()) { | 127 window == top_level_widget_->GetNativeView()) { |
| 128 top_level_widget_ = NULL; | 128 top_level_widget_ = NULL; |
| 129 return; | 129 return; |
| 130 } | 130 } |
| 131 | 131 |
| 132 if (top_level_widget_) { | 132 if (top_level_widget_) { |
| 133 DCHECK(top_level_widget_->GetNativeView()); | 133 DCHECK(top_level_widget_->GetNativeView()); |
| 134 top_level_widget_->GetNativeView()->RemoveObserver(this); | 134 top_level_widget_->GetNativeView()->RemoveObserver(this); |
| 135 // When we receive a notification that the child of the window created | 135 // When we receive a notification that the child of the window created |
| 136 // above is being destroyed we go ahead and initiate the destruction of | 136 // above is being destroyed we go ahead and initiate the destruction of |
| 137 // the corresponding widget. | 137 // the corresponding widget. |
| 138 top_level_widget_->Close(); | 138 top_level_widget_->Close(); |
| 139 top_level_widget_ = NULL; | 139 top_level_widget_ = NULL; |
| 140 } | 140 } |
| 141 delete this; | 141 delete this; |
| 142 } | 142 } |
| 143 | 143 |
| 144 virtual void OnWindowBoundsChanged(aura::Window* window, | 144 virtual void OnWindowBoundsChanged(aura::Window* window, |
| 145 const gfx::Rect& old_bounds, | 145 const gfx::Rect& old_bounds, |
| 146 const gfx::Rect& new_bounds) OVERRIDE { | 146 const gfx::Rect& new_bounds) override { |
| 147 if (top_level_widget_ && window == child_window_) | 147 if (top_level_widget_ && window == child_window_) |
| 148 top_level_widget_->SetSize(new_bounds.size()); | 148 top_level_widget_->SetSize(new_bounds.size()); |
| 149 } | 149 } |
| 150 | 150 |
| 151 private: | 151 private: |
| 152 DesktopNativeWidgetTopLevelHandler() | 152 DesktopNativeWidgetTopLevelHandler() |
| 153 : top_level_widget_(NULL), | 153 : top_level_widget_(NULL), |
| 154 child_window_(NULL) {} | 154 child_window_(NULL) {} |
| 155 | 155 |
| 156 virtual ~DesktopNativeWidgetTopLevelHandler() {} | 156 virtual ~DesktopNativeWidgetTopLevelHandler() {} |
| (...skipping 12 matching lines...) Expand all Loading... |
| 169 : root_window_(root_window) { | 169 : root_window_(root_window) { |
| 170 aura::client::SetWindowTreeClient(root_window_, this); | 170 aura::client::SetWindowTreeClient(root_window_, this); |
| 171 } | 171 } |
| 172 virtual ~DesktopNativeWidgetAuraWindowTreeClient() { | 172 virtual ~DesktopNativeWidgetAuraWindowTreeClient() { |
| 173 aura::client::SetWindowTreeClient(root_window_, NULL); | 173 aura::client::SetWindowTreeClient(root_window_, NULL); |
| 174 } | 174 } |
| 175 | 175 |
| 176 // Overridden from client::WindowTreeClient: | 176 // Overridden from client::WindowTreeClient: |
| 177 virtual aura::Window* GetDefaultParent(aura::Window* context, | 177 virtual aura::Window* GetDefaultParent(aura::Window* context, |
| 178 aura::Window* window, | 178 aura::Window* window, |
| 179 const gfx::Rect& bounds) OVERRIDE { | 179 const gfx::Rect& bounds) override { |
| 180 bool is_fullscreen = window->GetProperty(aura::client::kShowStateKey) == | 180 bool is_fullscreen = window->GetProperty(aura::client::kShowStateKey) == |
| 181 ui::SHOW_STATE_FULLSCREEN; | 181 ui::SHOW_STATE_FULLSCREEN; |
| 182 bool is_menu = window->type() == ui::wm::WINDOW_TYPE_MENU; | 182 bool is_menu = window->type() == ui::wm::WINDOW_TYPE_MENU; |
| 183 | 183 |
| 184 if (is_fullscreen || is_menu) { | 184 if (is_fullscreen || is_menu) { |
| 185 bool root_is_always_on_top = false; | 185 bool root_is_always_on_top = false; |
| 186 internal::NativeWidgetPrivate* native_widget = | 186 internal::NativeWidgetPrivate* native_widget = |
| 187 DesktopNativeWidgetAura::ForWindow(root_window_); | 187 DesktopNativeWidgetAura::ForWindow(root_window_); |
| 188 if (native_widget) | 188 if (native_widget) |
| 189 root_is_always_on_top = native_widget->IsAlwaysOnTop(); | 189 root_is_always_on_top = native_widget->IsAlwaysOnTop(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 201 }; | 201 }; |
| 202 | 202 |
| 203 } // namespace | 203 } // namespace |
| 204 | 204 |
| 205 class FocusManagerEventHandler : public ui::EventHandler { | 205 class FocusManagerEventHandler : public ui::EventHandler { |
| 206 public: | 206 public: |
| 207 FocusManagerEventHandler(DesktopNativeWidgetAura* desktop_native_widget_aura) | 207 FocusManagerEventHandler(DesktopNativeWidgetAura* desktop_native_widget_aura) |
| 208 : desktop_native_widget_aura_(desktop_native_widget_aura) {} | 208 : desktop_native_widget_aura_(desktop_native_widget_aura) {} |
| 209 | 209 |
| 210 // Implementation of ui::EventHandler: | 210 // Implementation of ui::EventHandler: |
| 211 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE { | 211 virtual void OnKeyEvent(ui::KeyEvent* event) override { |
| 212 Widget* widget = desktop_native_widget_aura_->GetWidget(); | 212 Widget* widget = desktop_native_widget_aura_->GetWidget(); |
| 213 if (widget && widget->GetFocusManager()->GetFocusedView() && | 213 if (widget && widget->GetFocusManager()->GetFocusedView() && |
| 214 !widget->GetFocusManager()->OnKeyEvent(*event)) { | 214 !widget->GetFocusManager()->OnKeyEvent(*event)) { |
| 215 event->SetHandled(); | 215 event->SetHandled(); |
| 216 } | 216 } |
| 217 } | 217 } |
| 218 | 218 |
| 219 private: | 219 private: |
| 220 DesktopNativeWidgetAura* desktop_native_widget_aura_; | 220 DesktopNativeWidgetAura* desktop_native_widget_aura_; |
| 221 | 221 |
| 222 DISALLOW_COPY_AND_ASSIGN(FocusManagerEventHandler); | 222 DISALLOW_COPY_AND_ASSIGN(FocusManagerEventHandler); |
| 223 }; | 223 }; |
| 224 | 224 |
| 225 class RootWindowDestructionObserver : public aura::WindowObserver { | 225 class RootWindowDestructionObserver : public aura::WindowObserver { |
| 226 public: | 226 public: |
| 227 explicit RootWindowDestructionObserver(DesktopNativeWidgetAura* parent) | 227 explicit RootWindowDestructionObserver(DesktopNativeWidgetAura* parent) |
| 228 : parent_(parent) {} | 228 : parent_(parent) {} |
| 229 virtual ~RootWindowDestructionObserver() {} | 229 virtual ~RootWindowDestructionObserver() {} |
| 230 | 230 |
| 231 private: | 231 private: |
| 232 // Overridden from aura::WindowObserver: | 232 // Overridden from aura::WindowObserver: |
| 233 virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE { | 233 virtual void OnWindowDestroyed(aura::Window* window) override { |
| 234 parent_->RootWindowDestroyed(); | 234 parent_->RootWindowDestroyed(); |
| 235 window->RemoveObserver(this); | 235 window->RemoveObserver(this); |
| 236 delete this; | 236 delete this; |
| 237 } | 237 } |
| 238 | 238 |
| 239 DesktopNativeWidgetAura* parent_; | 239 DesktopNativeWidgetAura* parent_; |
| 240 | 240 |
| 241 DISALLOW_COPY_AND_ASSIGN(RootWindowDestructionObserver); | 241 DISALLOW_COPY_AND_ASSIGN(RootWindowDestructionObserver); |
| 242 }; | 242 }; |
| 243 | 243 |
| (...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1211 if (cursor_reference_count_ == 0) { | 1211 if (cursor_reference_count_ == 0) { |
| 1212 // We are the last DesktopNativeWidgetAura instance, and we are responsible | 1212 // We are the last DesktopNativeWidgetAura instance, and we are responsible |
| 1213 // for cleaning up |cursor_manager_|. | 1213 // for cleaning up |cursor_manager_|. |
| 1214 delete cursor_manager_; | 1214 delete cursor_manager_; |
| 1215 native_cursor_manager_ = NULL; | 1215 native_cursor_manager_ = NULL; |
| 1216 cursor_manager_ = NULL; | 1216 cursor_manager_ = NULL; |
| 1217 } | 1217 } |
| 1218 } | 1218 } |
| 1219 | 1219 |
| 1220 } // namespace views | 1220 } // namespace views |
| OLD | NEW |