summaryrefslogtreecommitdiffstats
path: root/views/controls/menu/nested_dispatcher_gtk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'views/controls/menu/nested_dispatcher_gtk.cc')
-rw-r--r--views/controls/menu/nested_dispatcher_gtk.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/views/controls/menu/nested_dispatcher_gtk.cc b/views/controls/menu/nested_dispatcher_gtk.cc
new file mode 100644
index 0000000..856b0a8
--- /dev/null
+++ b/views/controls/menu/nested_dispatcher_gtk.cc
@@ -0,0 +1,39 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "views/controls/menu/nested_dispatcher_gtk.h"
+
+namespace views {
+
+NestedDispatcherGtk::NestedDispatcherGtk(MessageLoopForUI::Dispatcher* creator,
+ bool allow_nested_task)
+ : creator_(creator),
+ allow_nested_task_(allow_nested_task) {
+}
+
+bool NestedDispatcherGtk::RunAndSelfDestruct() {
+ bool nestable = MessageLoopForUI::current()->NestableTasksAllowed();
+ if (allow_nested_task_)
+ MessageLoopForUI::current()->SetNestableTasksAllowed(true);
+ MessageLoopForUI::current()->Run(this);
+ if (allow_nested_task_)
+ MessageLoopForUI::current()->SetNestableTasksAllowed(nestable);
+ bool creator_is_deleted = creator_ == NULL;
+ delete this;
+ return creator_is_deleted;
+}
+
+void NestedDispatcherGtk::CreatorDestroyed() {
+ creator_ = NULL;
+}
+
+bool NestedDispatcherGtk::Dispatch(GdkEvent* event) {
+ if (creator_ != NULL) {
+ return creator_->Dispatch(event);
+ } else {
+ return false;
+ }
+}
+
+} // namespace views