Index: ui/base/x/x11_menu_list.cc |
diff --git a/ui/base/x/x11_menu_list.cc b/ui/base/x/x11_menu_list.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3396e57840edc352b244cd231bbbfc4bf29825f6 |
--- /dev/null |
+++ b/ui/base/x/x11_menu_list.cc |
@@ -0,0 +1,46 @@ |
+// Copyright (c) 2014 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 "ui/base/x/x11_menu_list.h" |
+ |
+#include "base/memory/singleton.h" |
+#include "ui/base/x/x11_util.h" |
+ |
+namespace ui { |
+ |
+// static |
+XMenuList* XMenuList::GetInstance() { |
+ return Singleton<XMenuList>::get(); |
+} |
+ |
+XMenuList::XMenuList() |
+ : menu_type_atom_(GetAtom("_NET_WM_WINDOW_TYPE_MENU")) { |
+} |
+ |
+XMenuList::~XMenuList() { |
+ menus_.clear(); |
+} |
+ |
+void XMenuList::MaybeRegisterMenu(XID menu) { |
+ int value = 0; |
+ if (!GetIntProperty(menu, "_NET_WM_WINDOW_TYPE", &value) || |
+ static_cast<Atom>(value) != menu_type_atom_) { |
+ return; |
+ } |
+ menus_.push_back(menu); |
+} |
+ |
+void XMenuList::MaybeUnregisterMenu(XID menu) { |
+ std::vector<XID>::iterator iter = std::find(menus_.begin(), menus_.end(), |
+ menu); |
+ if (iter == menus_.end()) |
+ return; |
+ menus_.erase(iter); |
+} |
+ |
+void XMenuList::InsertMenuWindowXIDs(std::vector<XID>* stack) { |
+ stack->insert(stack->begin(), menus_.begin(), menus_.end()); |
+} |
+ |
+} // namespace ui |