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

Unified Diff: ui/views/mus/native_widget_mus.cc

Issue 2049723002: views/mus: Chaneg how Widget activation works in mus. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 | « ui/views/mus/BUILD.gn ('k') | ui/wm/core/focus_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/mus/native_widget_mus.cc
diff --git a/ui/views/mus/native_widget_mus.cc b/ui/views/mus/native_widget_mus.cc
index d7b679fcefe2ebf703cd312a88d8b84a229a803c..954d454c380994d238d5f88d72c2bf7443762cf6 100644
--- a/ui/views/mus/native_widget_mus.cc
+++ b/ui/views/mus/native_widget_mus.cc
@@ -73,6 +73,28 @@ class FocusRulesImpl : public wm::BaseFocusRules {
DISALLOW_COPY_AND_ASSIGN(FocusRulesImpl);
};
+// This makes sure that an aura::Window focused (or activated) through the
+// aura::client::FocusClient (or ActivationClient) focuses (or activates) the
+// corresponding mus::Window too.
+class FocusControllerMus : public wm::FocusController {
+ public:
+ explicit FocusControllerMus(wm::FocusRules* rules) : FocusController(rules) {}
+ ~FocusControllerMus() override {}
+
+ private:
+ void FocusWindow(aura::Window* window) override {
+ FocusController::FocusWindow(window);
+ if (window) {
+ mus::Window* mus_window =
+ window->GetRootWindow()->GetProperty(kMusWindow);
+ if (mus_window)
+ mus_window->SetFocus();
+ }
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(FocusControllerMus);
+};
+
class ContentWindowLayoutManager : public aura::LayoutManager {
public:
ContentWindowLayoutManager(aura::Window* outer, aura::Window* inner)
@@ -663,7 +685,7 @@ void NativeWidgetMus::InitNativeWidget(const Widget::InitParams& params) {
hosted_window->SetProperty(kMusWindow, window_);
focus_client_.reset(
- new wm::FocusController(new FocusRulesImpl(hosted_window)));
+ new FocusControllerMus(new FocusRulesImpl(hosted_window)));
aura::client::SetFocusClient(hosted_window, focus_client_.get());
aura::client::SetActivationClient(hosted_window, focus_client_.get());
@@ -981,10 +1003,11 @@ bool NativeWidgetMus::IsVisible() const {
}
void NativeWidgetMus::Activate() {
- if (window_)
- window_->SetFocus();
static_cast<aura::client::ActivationClient*>(focus_client_.get())
->ActivateWindow(content_);
+ // FocusControllerMus should have focused |window_| when |content_| is
+ // activated.
+ DCHECK(!window_ || window_->HasFocus());
}
void NativeWidgetMus::Deactivate() {
« no previous file with comments | « ui/views/mus/BUILD.gn ('k') | ui/wm/core/focus_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698