global_menu_bar_registrar_x11.h revision 3240926e260ce088908e02ac07a6cf7b0c0cbf44
1// Copyright 2013 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 CHROME_BROWSER_UI_VIEWS_FRAME_GLOBAL_MENU_BAR_REGISTRAR_X11_H_ 6#define CHROME_BROWSER_UI_VIEWS_FRAME_GLOBAL_MENU_BAR_REGISTRAR_X11_H_ 7 8#include <gio/gio.h> 9 10#include <set> 11 12#include "base/basictypes.h" 13#include "base/memory/ref_counted.h" 14#include "base/memory/singleton.h" 15#include "ui/base/glib/glib_signal.h" 16 17// Advertises our menu bars to Unity. 18// 19// GlobalMenuBarX11 is responsible for managing the DbusmenuServer for each 20// XID. We need a separate object to own the dbus channel to 21// com.canonical.AppMenu.Registrar and to register/unregister the mapping 22// between a XID and the DbusmenuServer instance we are offering. 23class GlobalMenuBarRegistrarX11 { 24 public: 25 static GlobalMenuBarRegistrarX11* GetInstance(); 26 27 void OnWindowMapped(unsigned long xid); 28 void OnWindowUnmapped(unsigned long xid); 29 30 private: 31 friend struct DefaultSingletonTraits<GlobalMenuBarRegistrarX11>; 32 33 GlobalMenuBarRegistrarX11(); 34 ~GlobalMenuBarRegistrarX11(); 35 36 // Sends the actual message. 37 void RegisterXID(unsigned long xid); 38 void UnregisterXID(unsigned long xid); 39 40 CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11, void, OnProxyCreated, 41 GObject*, GAsyncResult*); 42 CHROMEG_CALLBACK_1(GlobalMenuBarRegistrarX11, void, OnNameOwnerChanged, 43 GObject*, GParamSpec*); 44 45 GDBusProxy* registrar_proxy_; 46 47 // Window XIDs which want to be registered, but haven't yet been because 48 // we're waiting for the proxy to become available. 49 std::set<unsigned long> live_xids_; 50 51 DISALLOW_COPY_AND_ASSIGN(GlobalMenuBarRegistrarX11); 52}; 53 54#endif // CHROME_BROWSER_UI_VIEWS_FRAME_GLOBAL_MENU_BAR_REGISTRAR_X11_H_ 55