Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6312)

Unified Diff: chrome/browser/ui/views/frame/global_menu_bar_x11.h

Issue 22562005: linux_aura: Implement the dynamic History menu in the dbusmenu. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Redo how HistoryItems are stored. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
};

Powered by Google App Engine
This is Rietveld 408576698