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

Unified Diff: ui/views/controls/menu/menu_controller.cc

Issue 267593005: Refactor menu controller to isolate aura dependency. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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
Index: ui/views/controls/menu/menu_controller.cc
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index a63448d679b1d8715e1550f65095e324cc1624cc..fa6af11fe1c919a2a518e082c8786d86397cbe81 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -107,6 +107,7 @@ bool TitleMatchesMnemonic(MenuItemView* menu, base::char16 key) {
return !lower_title.empty() && lower_title[0] == key;
}
+#if defined(USE_AURA)
tapted 2014/05/02 00:22:57 I think there will be resistance to this many #ifd
aura::Window* GetOwnerRootWindow(views::Widget* owner) {
return owner ? owner->GetNativeWindow()->GetRootWindow() : NULL;
}
@@ -167,6 +168,7 @@ class ActivationChangeObserverImpl
DISALLOW_COPY_AND_ASSIGN(ActivationChangeObserverImpl);
};
+#endif // USE_AURA
} // namespace
@@ -1191,6 +1193,13 @@ void MenuController::RunMessageLoop(bool nested_menu) {
run_loop.Run();
}
}
+#elif defined(OS_MACOSX)
+void MenuController::RunMessageLoop(bool nested_menu) {
+ base::MessageLoopForUI* loop = base::MessageLoopForUI::current();
+ base::MessageLoop::ScopedNestableTaskAllower allow(loop);
+ base::RunLoop run_loop;
+ run_loop.Run();
+}
#else
void MenuController::RunMessageLoop(bool nested_menu) {
internal::MenuEventDispatcher event_dispatcher(this);
@@ -2229,6 +2238,7 @@ void MenuController::RepostEvent(SubmenuView* source,
if (!window)
return;
+#if defined(USE_AURA)
aura::Window* root = window->GetRootWindow();
ScreenPositionClient* spc = aura::client::GetScreenPositionClient(root);
if (!spc)
@@ -2241,6 +2251,7 @@ void MenuController::RepostEvent(SubmenuView* source,
clone.set_location(root_loc);
clone.set_root_location(root_loc);
root->GetHost()->dispatcher()->RepostEvent(clone);
+#endif
}
void MenuController::SetDropMenuItem(
@@ -2379,21 +2390,29 @@ void MenuController::SetExitType(ExitType type) {
message_loop_depth_;
if (quit_now) {
+#if defined(USE_AURA)
if (owner_) {
aura::Window* root = owner_->GetNativeWindow()->GetRootWindow();
aura::client::GetDispatcherClient(root)->QuitNestedMessageLoop();
} else {
base::MessageLoop::current()->QuitNow();
}
+#else
+ base::MessageLoop::current()->QuitNow();
+#endif
// Restore the previous dispatcher.
nested_dispatcher_.reset();
}
}
bool MenuController::ShouldQuitNow() const {
+#if defined(USE_AURA)
aura::Window* root = GetOwnerRootWindow(owner_);
return !aura::client::GetDragDropClient(root) ||
!aura::client::GetDragDropClient(root)->IsDragDropInProgress();
+#else
+ return true;
+#endif
}
void MenuController::HandleMouseLocation(SubmenuView* source,
@@ -2429,8 +2448,8 @@ void MenuController::HandleMouseLocation(SubmenuView* source,
}
gfx::Screen* MenuController::GetScreen() {
- aura::Window* root = GetOwnerRootWindow(owner_);
- return root ? gfx::Screen::GetScreenFor(root)
+ Widget* root = owner_->GetTopLevelWidget();
+ return root ? gfx::Screen::GetScreenFor(root->GetNativeView())
Andre 2014/05/01 22:38:43 I'm not sure about this change (limited experience
tapted 2014/05/02 00:22:57 This looks good! (I think :)
: gfx::Screen::GetNativeScreen();
}

Powered by Google App Engine
This is Rietveld 408576698