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 #ifndef UI_BASE_X_X11_MENU_LIST_H_ 6 #define UI_BASE_X_X11_MENU_LIST_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "ui/base/ui_base_export.h" 12 #include "ui/gfx/x/x11_types.h" 13 14 typedef unsigned long Atom; 15 16 // A process wide singleton cache for X menus. 17 template <typename T> struct DefaultSingletonTraits; 18 19 namespace ui { 20 21 // Keeps track of created and destroyed top level menu windows. 22 class UI_BASE_EXPORT XMenuList { 23 public: 24 static XMenuList* GetInstance(); 25 26 // Checks if |menu| has _NET_WM_WINDOW_TYPE property set to 27 // "_NET_WM_WINDOW_TYPE_MENU" atom and if so caches it. 28 void MaybeRegisterMenu(XID menu); 29 30 // Finds |menu| in cache and if found removes it. 31 void MaybeUnregisterMenu(XID menu); 32 33 // Inserts cached menu XIDs at the beginning of |stack|. 34 void InsertMenuWindowXIDs(std::vector<XID>* stack); 35 36 private: 37 friend struct DefaultSingletonTraits<XMenuList>; 38 XMenuList(); 39 ~XMenuList(); 40 41 std::vector<XID> menus_; 42 ::Atom menu_type_atom_; 43 DISALLOW_COPY_AND_ASSIGN(XMenuList); 44 }; 45 46 } // namespace ui 47 48 #endif // UI_BASE_X_X11_MENU_LIST_H_ 49