Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(554)

Unified Diff: services/ui/ws/display.cc

Issue 2712203002: c++ / mojo changes for 'external window mode'
Patch Set: rebased Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/ws/display.h ('k') | services/ui/ws/window_server.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/display.cc
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc
index 7fc5771a689b12454b47d45b124b35f174ac2284..0c27b87cd42e674828d03ee1d8be1780b54ab34c 100644
--- a/services/ui/ws/display.cc
+++ b/services/ui/ws/display.cc
@@ -196,7 +196,29 @@ void Display::SetTitle(const std::string& title) {
platform_display_->SetTitle(base::UTF8ToUTF16(title));
}
+void Display::InitDisplayRoot() {
+ DCHECK(window_server_->IsInExternalWindowMode());
+ DCHECK(binding_);
+
+ external_mode_root_ = base::MakeUnique<WindowManagerDisplayRoot>(this);
+ // TODO(tonikitoo): Code still has assumptions that even in external window
+ // mode make 'window_manager_display_root_map_' needed.
+ window_manager_display_root_map_[service_manager::mojom::kRootUserID] =
+ external_mode_root_.get();
+
+ ServerWindow* server_window = external_mode_root_->root();
+ WindowTree* window_tree = window_server_->GetTreeForExternalWindowMode();
+ window_tree->AddRoot(server_window);
+ window_tree->DoOnEmbed(nullptr /*mojom::WindowTreePtr*/, server_window);
+
+ display_manager()->OnDisplayUpdate(display_);
+}
+
void Display::InitWindowManagerDisplayRoots() {
+ // Tests can create ws::Display instances directly, by-passing
+ // WindowTreeHostFactory.
+ // TODO(tonikitoo): Check if with the introduction of 'external window mode'
+ // this path is still needed.
if (binding_) {
std::unique_ptr<WindowManagerDisplayRoot> display_root_ptr(
new WindowManagerDisplayRoot(this));
@@ -262,7 +284,11 @@ ServerWindow* Display::GetRootWindow() {
void Display::OnAcceleratedWidgetAvailable() {
display_manager()->OnDisplayAcceleratedWidgetAvailable(this);
- InitWindowManagerDisplayRoots();
+
+ if (window_server_->IsInExternalWindowMode())
+ InitDisplayRoot();
+ else
+ InitWindowManagerDisplayRoots();
}
bool Display::IsInHighContrastMode() {
@@ -270,8 +296,14 @@ bool Display::IsInHighContrastMode() {
}
void Display::OnEvent(const ui::Event& event) {
+ // TODO(tonikitoo): Current WindowManagerDisplayRoot class is misnamed, since
+ // in external window mode a non-WindowManager specific 'DisplayRoot' is also
+ // needed.
+ // Bits of WindowManagerState also should be factored out and made available
+ // in external window mode, so that event handling is functional.
+ // htts://crbug.com/701129
WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot();
- if (display_root)
+ if (display_root && display_root->window_manager_state())
display_root->window_manager_state()->ProcessEvent(event, GetId());
window_server_
->GetUserActivityMonitorForUser(
@@ -281,7 +313,7 @@ void Display::OnEvent(const ui::Event& event) {
void Display::OnNativeCaptureLost() {
WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot();
- if (display_root)
+ if (display_root && display_root->window_manager_state())
display_root->window_manager_state()->SetCapture(nullptr, kInvalidClientId);
}
@@ -364,7 +396,7 @@ void Display::OnFocusChanged(FocusControllerChangeSource change_source,
// WindowManagers are always notified of focus changes.
WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot();
- if (display_root) {
+ if (display_root && display_root->window_manager_state()) {
WindowTree* wm_tree = display_root->window_manager_state()->window_tree();
if (wm_tree != owning_tree_old && wm_tree != embedded_tree_old &&
wm_tree != owning_tree_new && wm_tree != embedded_tree_new) {
« no previous file with comments | « services/ui/ws/display.h ('k') | services/ui/ws/window_server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698