Index: ui/aura/mus/window_tree_host_mus.cc |
diff --git a/ui/views/mus/window_tree_host_mus.cc b/ui/aura/mus/window_tree_host_mus.cc |
similarity index 46% |
copy from ui/views/mus/window_tree_host_mus.cc |
copy to ui/aura/mus/window_tree_host_mus.cc |
index 0d08e1b3f41fc1ad4ee81980577e1e255d440d8c..0f0959e049b971b33faed5fa65d30c125492c930 100644 |
--- a/ui/views/mus/window_tree_host_mus.cc |
+++ b/ui/aura/mus/window_tree_host_mus.cc |
@@ -2,19 +2,19 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "ui/views/mus/window_tree_host_mus.h" |
+#include "ui/aura/mus/window_tree_host_mus.h" |
#include "base/memory/ptr_util.h" |
-#include "services/ui/public/cpp/window.h" |
#include "ui/aura/env.h" |
+#include "ui/aura/mus/input_method_mus.h" |
+#include "ui/aura/mus/window_port_mus.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_event_dispatcher.h" |
+#include "ui/aura/window_observer.h" |
#include "ui/events/event.h" |
#include "ui/platform_window/stub/stub_window.h" |
-#include "ui/views/mus/input_method_mus.h" |
-#include "ui/views/mus/native_widget_mus.h" |
-namespace views { |
+namespace aura { |
namespace { |
static uint32_t accelerated_widget_count = 1; |
@@ -23,21 +23,51 @@ bool IsUsingTestContext() { |
return aura::Env::GetInstance()->context_factory()->DoesCreateTestContexts(); |
} |
-} |
+} // namespace |
+ |
+class WindowTreeHostMus::ContentWindowObserver : public WindowObserver { |
+ public: |
+ ContentWindowObserver(WindowTreeHostMus* window_tree_host_mus, Window* window) |
+ : window_tree_host_mus_(window_tree_host_mus), window_(window) { |
+ window_->AddObserver(this); |
+ } |
+ ~ContentWindowObserver() override { window_->RemoveObserver(this); } |
+ |
+ // WindowObserver: |
+ void OnWindowDestroyed(Window* window) override { |
+ window_tree_host_mus_->ContentWindowDestroyed(); |
+ } |
+ void OnWindowBoundsChanged(Window* window, |
+ const gfx::Rect& old_bounds, |
+ const gfx::Rect& new_bounds) override { |
+ if (old_bounds.size() != new_bounds.size()) |
+ window_tree_host_mus_->ContentWindowResized(); |
+ } |
+ void OnWindowVisibilityChanging(Window* window, bool visible) override { |
+ window_tree_host_mus_->ContentWindowVisibilityChanging(visible); |
+ } |
+ |
+ private: |
+ WindowTreeHostMus* window_tree_host_mus_; |
+ Window* window_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ContentWindowObserver); |
+}; |
//////////////////////////////////////////////////////////////////////////////// |
// WindowTreeHostMus, public: |
-WindowTreeHostMus::WindowTreeHostMus(NativeWidgetMus* native_widget, |
- ui::Window* window) |
- : native_widget_(native_widget) { |
+WindowTreeHostMus::WindowTreeHostMus(std::unique_ptr<WindowPortMus> window_port, |
+ Window* content_window) |
+ : WindowTreeHostPlatform(std::move(window_port)), |
+ content_window_(content_window) { |
gfx::AcceleratedWidget accelerated_widget; |
if (IsUsingTestContext()) { |
accelerated_widget = gfx::kNullAcceleratedWidget; |
} else { |
- // We need accelerated widget numbers to be different for each |
- // window and fit in the smallest sizeof(AcceleratedWidget) uint32_t |
- // has this property. |
+// We need accelerated widget numbers to be different for each |
+// window and fit in the smallest sizeof(AcceleratedWidget) uint32_t |
+// has this property. |
#if defined(OS_WIN) || defined(OS_ANDROID) |
accelerated_widget = |
reinterpret_cast<gfx::AcceleratedWidget>(accelerated_widget_count++); |
@@ -53,10 +83,21 @@ WindowTreeHostMus::WindowTreeHostMus(NativeWidgetMus* native_widget, |
this, |
false)); // Do not advertise accelerated widget; already set manually. |
- compositor()->SetWindow(window); |
+ if (content_window_) { |
+ window()->AddChild(content_window_); |
+ window()->SetBounds(gfx::Rect(content_window_->bounds().size())); |
+ content_window_observer_ = |
+ base::MakeUnique<ContentWindowObserver>(this, content_window_); |
+ } else { |
+ // Initialize the stub platform window bounds to those of the ui::Window. |
+ platform_window()->SetBounds(window()->bounds()); |
+ } |
+ |
+ input_method_ = base::MakeUnique<InputMethodMus>( |
+ this, content_window_ ? content_window_ : window()); |
- // Initialize the stub platform window bounds to those of the ui::Window. |
- platform_window()->SetBounds(window->bounds()); |
+ // TODO: resolve |
+ // compositor()->SetWindow(window); |
compositor()->SetHostHasTransparentBackground(true); |
} |
@@ -66,15 +107,32 @@ WindowTreeHostMus::~WindowTreeHostMus() { |
DestroyDispatcher(); |
} |
+void WindowTreeHostMus::ContentWindowDestroyed() { |
+ delete this; |
+} |
+ |
+void WindowTreeHostMus::ContentWindowResized() { |
+ window()->SetBounds(gfx::Rect(content_window_->bounds().size())); |
+} |
+ |
+void WindowTreeHostMus::ContentWindowVisibilityChanging(bool visible) { |
+ if (visible) |
+ window()->Show(); |
+ else |
+ window()->Hide(); |
+} |
+ |
void WindowTreeHostMus::DispatchEvent(ui::Event* event) { |
- // Key events are sent to InputMethodMus directly from NativeWidgetMus. |
DCHECK(!event->IsKeyEvent()); |
WindowTreeHostPlatform::DispatchEvent(event); |
} |
void WindowTreeHostMus::OnClosed() { |
+ // TODO: figure out if needed. |
+ /* |
if (native_widget_) |
native_widget_->OnPlatformWindowClosed(); |
+ */ |
} |
void WindowTreeHostMus::OnActivationChanged(bool active) { |
@@ -82,8 +140,11 @@ void WindowTreeHostMus::OnActivationChanged(bool active) { |
GetInputMethod()->OnFocus(); |
else |
GetInputMethod()->OnBlur(); |
+ // TODO: figure out if needed. |
+ /* |
if (native_widget_) |
native_widget_->OnActivationChanged(active); |
+ */ |
WindowTreeHostPlatform::OnActivationChanged(active); |
} |
@@ -96,4 +157,4 @@ gfx::ICCProfile WindowTreeHostMus::GetICCProfileForCurrentDisplay() { |
return gfx::ICCProfile(); |
} |
-} // namespace views |
+} // namespace aura |