1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/base/x/x11_menu_list.h" 6 7 #include "base/memory/singleton.h" 8 #include "ui/base/x/x11_util.h" 9 10 namespace ui { 11 12 // static GetInstance()13XMenuList* XMenuList::GetInstance() { 14 return Singleton<XMenuList>::get(); 15 } 16 XMenuList()17XMenuList::XMenuList() 18 : menu_type_atom_(GetAtom("_NET_WM_WINDOW_TYPE_MENU")) { 19 } 20 ~XMenuList()21XMenuList::~XMenuList() { 22 menus_.clear(); 23 } 24 MaybeRegisterMenu(XID menu)25void XMenuList::MaybeRegisterMenu(XID menu) { 26 int value = 0; 27 if (!GetIntProperty(menu, "_NET_WM_WINDOW_TYPE", &value) || 28 static_cast<XAtom>(value) != menu_type_atom_) { 29 return; 30 } 31 menus_.push_back(menu); 32 } 33 MaybeUnregisterMenu(XID menu)34void XMenuList::MaybeUnregisterMenu(XID menu) { 35 std::vector<XID>::iterator iter = std::find(menus_.begin(), menus_.end(), 36 menu); 37 if (iter == menus_.end()) 38 return; 39 menus_.erase(iter); 40 } 41 InsertMenuWindowXIDs(std::vector<XID> * stack)42void XMenuList::InsertMenuWindowXIDs(std::vector<XID>* stack) { 43 stack->insert(stack->begin(), menus_.begin(), menus_.end()); 44 } 45 46 } // namespace ui 47