Index: chrome/browser/ui/views/frame/global_menu_bar_x11.h |
diff --git a/chrome/browser/ui/views/frame/global_menu_bar_x11.h b/chrome/browser/ui/views/frame/global_menu_bar_x11.h |
index 46f8cf34de3d6d5ef406d116668b020e1c15ce6e..269153ee9934a6ff3894a5c9f08fa9feedcc46a0 100644 |
--- a/chrome/browser/ui/views/frame/global_menu_bar_x11.h |
+++ b/chrome/browser/ui/views/frame/global_menu_bar_x11.h |
@@ -11,18 +11,29 @@ |
#include "base/compiler_specific.h" |
#include "base/prefs/pref_change_registrar.h" |
#include "chrome/browser/command_observer.h" |
+#include "chrome/browser/common/cancelable_request.h" |
+#include "chrome/browser/history/history_types.h" |
+#include "chrome/browser/sessions/tab_restore_service.h" |
+#include "chrome/browser/sessions/tab_restore_service_observer.h" |
+#include "content/public/browser/notification_observer.h" |
+#include "content/public/browser/notification_registrar.h" |
#include "ui/base/glib/glib_signal.h" |
#include "ui/views/widget/desktop_aura/desktop_root_window_host_observer_x11.h" |
typedef struct _DbusmenuMenuitem DbusmenuMenuitem; |
typedef struct _DbusmenuServer DbusmenuServer; |
+namespace history { |
+class TopSites; |
+} |
+ |
namespace ui { |
class Accelerator; |
} |
class Browser; |
class BrowserView; |
+class Profile; |
class BrowserDesktopRootWindowHostX11; |
struct GlobalMenuBarCommand; |
@@ -36,6 +47,8 @@ struct GlobalMenuBarCommand; |
// interface directly with the lower level libdbusmenu-glib, which we |
// opportunistically dlopen() since not everyone is running Ubuntu. |
class GlobalMenuBarX11 : public CommandObserver, |
+ public content::NotificationObserver, |
+ public TabRestoreServiceObserver, |
public views::DesktopRootWindowHostObserverX11 { |
public: |
GlobalMenuBarX11(BrowserView* browser_view, |
@@ -46,8 +59,16 @@ class GlobalMenuBarX11 : public CommandObserver, |
static std::string GetPathForWindow(unsigned long xid); |
private: |
+ struct HistoryItem; |
typedef std::map<int, DbusmenuMenuitem*> CommandIDMenuItemMap; |
+ // Builds a separator. |
+ DbusmenuMenuitem* BuildSeparator(); |
+ |
+ // Creates an individual menu item from a title and command, and subscribes |
+ // to the activation signal. |
+ DbusmenuMenuitem* BuildMenuItem(const std::string& label, int tag_id); |
+ |
// Creates a DbusmenuServer, and attaches all the menu items. |
void InitServer(unsigned long xid); |
@@ -56,37 +77,68 @@ class GlobalMenuBarX11 : public CommandObserver, |
// Creates a whole menu defined with |commands| and titled with the string |
// |menu_str_id|. Then appends it to |parent|. |
- void BuildMenuFrom(DbusmenuMenuitem* parent, |
- int menu_str_id, |
- CommandIDMenuItemMap* id_to_menu_item, |
- GlobalMenuBarCommand* commands); |
- |
- // Creates an individual menu item from a title and command, and subscribes |
- // to the activation signal. |
- DbusmenuMenuitem* BuildMenuItem( |
- int string_id, |
- int command_id, |
- int tag_id, |
- CommandIDMenuItemMap* id_to_menu_item); |
+ DbusmenuMenuitem* BuildStaticMenu(DbusmenuMenuitem* parent, |
+ int menu_str_id, |
+ GlobalMenuBarCommand* commands); |
// Sets the accelerator for |item|. |
void RegisterAccelerator(DbusmenuMenuitem* item, |
const ui::Accelerator& accelerator); |
+ // Creates a HistoryItem from the data in |entry|. |
+ HistoryItem* HistoryItemForTab(const TabRestoreService::Tab& entry); |
+ |
+ // Creates a menu item form |item| and inserts it in |menu| at |index|. |
+ void AddHistoryItemToMenu(HistoryItem* item, |
+ DbusmenuMenuitem* menu, |
+ int tag, |
+ int index); |
+ |
+ // Sends a message off to History for data. |
+ void GetTopSitesData(); |
+ |
+ // Callback to receive data requested from GetTopSitesData(). |
+ void OnTopSitesReceived(const history::MostVisitedURLList& visited_list); |
+ |
// Updates the visibility of the bookmark bar on pref changes. |
void OnBookmarkBarVisibilityChanged(); |
+ // Find the first index of the item in |menu| with the tag |tag_id|. |
+ int GetIndexOfMenuItemWithTag(DbusmenuMenuitem* menu, int tag_id); |
+ |
+ // This will remove all menu items in |menu| with |tag| as their tag. This |
+ // clears state about HistoryItems* that we keep to prevent that data from |
+ // going stale. That's why this method recurses into its child menus. |
+ void ClearMenuSection(DbusmenuMenuitem* menu, int tag_id); |
+ |
+ // Deleter function for HistoryItem implementation detail. |
+ static void DeleteHistoryItem(void* void_item); |
+ |
// Overridden from CommandObserver: |
virtual void EnabledStateChangedForCommand(int id, bool enabled) OVERRIDE; |
- // Overridden from DesktopRootWindowHostObserverX11: |
+ // Overridden from content::NotificationObserver: |
+ virtual void Observe(int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) OVERRIDE; |
+ |
+ // Overridden from TabRestoreServiceObserver: |
+ virtual void TabRestoreServiceChanged(TabRestoreService* service) OVERRIDE; |
+ virtual void TabRestoreServiceDestroyed(TabRestoreService* service) OVERRIDE; |
+ |
+ // Overridden from views::DesktopRootWindowHostObserverX11: |
virtual void OnWindowMapped(unsigned long xid) OVERRIDE; |
virtual void OnWindowUnmapped(unsigned long xid) OVERRIDE; |
CHROMEG_CALLBACK_1(GlobalMenuBarX11, void, OnItemActivated, DbusmenuMenuitem*, |
unsigned int); |
+ CHROMEG_CALLBACK_1(GlobalMenuBarX11, void, OnHistoryItemActivated, |
+ DbusmenuMenuitem*, unsigned int); |
+ CHROMEG_CALLBACK_0(GlobalMenuBarX11, void, OnHistoryMenuAboutToShow, |
+ DbusmenuMenuitem*); |
Browser* browser_; |
+ Profile* profile_; |
BrowserView* browser_view_; |
BrowserDesktopRootWindowHostX11* host_; |
@@ -96,10 +148,20 @@ class GlobalMenuBarX11 : public CommandObserver, |
DbusmenuServer* server_; |
DbusmenuMenuitem* root_item_; |
+ DbusmenuMenuitem* history_menu_; |
// Tracks value of the kShowBookmarkBar preference. |
PrefChangeRegistrar pref_change_registrar_; |
+ history::TopSites* top_sites_; |
+ |
+ TabRestoreService* tab_restore_service_; // weak |
+ |
+ content::NotificationRegistrar registrar_; |
+ |
+ // For callbacks may be run after destruction. |
+ base::WeakPtrFactory<GlobalMenuBarX11> weak_ptr_factory_; |
+ |
DISALLOW_COPY_AND_ASSIGN(GlobalMenuBarX11); |
}; |