This CL adds accelerators to the Linux toolkit views.
The MessageLoop had to be modified to support Dispatchers on Linux.
BUG=None
TEST=On Windows and Linux, make sure the accelerators still work as expected. On Linux toolkit views, build and run the unit-tests.
Review URL: http://codereview.chromium.org/159046
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22210 0039d316-1c4b-4281-b951-d872f2087c98
CrOS-Libchrome-Original-Commit: 148d105e27c7c8c2cda0c81292690b9edafcae1f
diff --git a/base/message_loop.cc b/base/message_loop.cc
index 4c91b1f..5464670 100644
--- a/base/message_loop.cc
+++ b/base/message_loop.cc
@@ -188,9 +188,10 @@
StartHistogrammer();
-#if defined(OS_WIN)
- if (state_->dispatcher) {
- pump_win()->RunWithDispatcher(this, state_->dispatcher);
+#if defined(OS_WIN) || defined(OS_LINUX)
+ if (state_->dispatcher && type() == TYPE_UI) {
+ static_cast<base::MessagePumpForUI*>(pump_.get())->
+ RunWithDispatcher(this, state_->dispatcher);
return;
}
#endif
@@ -480,7 +481,7 @@
// Initialize the other fields:
quit_received = false;
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
dispatcher = NULL;
#endif
}
@@ -570,26 +571,7 @@
//------------------------------------------------------------------------------
// MessageLoopForUI
-#if defined(OS_LINUX) || defined(OS_WIN)
-
-void MessageLoopForUI::AddObserver(Observer* observer) {
- pump_ui()->AddObserver(observer);
-}
-
-void MessageLoopForUI::RemoveObserver(Observer* observer) {
- pump_ui()->RemoveObserver(observer);
-}
-
-#endif
-
#if defined(OS_WIN)
-
-void MessageLoopForUI::Run(Dispatcher* dispatcher) {
- AutoRunState save_state(this);
- state_->dispatcher = dispatcher;
- RunHandler();
-}
-
void MessageLoopForUI::WillProcessMessage(const MSG& message) {
pump_win()->WillProcessMessage(message);
}
@@ -602,6 +584,22 @@
#endif // defined(OS_WIN)
+#if defined(OS_LINUX) || defined(OS_WIN)
+void MessageLoopForUI::AddObserver(Observer* observer) {
+ pump_ui()->AddObserver(observer);
+}
+
+void MessageLoopForUI::RemoveObserver(Observer* observer) {
+ pump_ui()->RemoveObserver(observer);
+}
+
+void MessageLoopForUI::Run(Dispatcher* dispatcher) {
+ AutoRunState save_state(this);
+ state_->dispatcher = dispatcher;
+ RunHandler();
+}
+#endif // defined(OS_LINUX) || defined(OS_WIN)
+
//------------------------------------------------------------------------------
// MessageLoopForIO