Home | History | Annotate | Download | only in x
      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
     13 XMenuList* XMenuList::GetInstance() {
     14   return Singleton<XMenuList>::get();
     15 }
     16 
     17 XMenuList::XMenuList()
     18     : menu_type_atom_(GetAtom("_NET_WM_WINDOW_TYPE_MENU")) {
     19 }
     20 
     21 XMenuList::~XMenuList() {
     22   menus_.clear();
     23 }
     24 
     25 void 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 
     34 void 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 
     42 void XMenuList::InsertMenuWindowXIDs(std::vector<XID>* stack) {
     43   stack->insert(stack->begin(), menus_.begin(), menus_.end());
     44 }
     45 
     46 }  // namespace ui
     47