diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-17 17:50:45 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-17 17:50:45 +0000 |
commit | 8bbb3ac22f87e12532a1c74992eba97bb0a52812 (patch) | |
tree | 60e0da57ce409e7fa40e66563627515de751ef90 /chrome | |
parent | fb497ca596afe928e180609c579208db40f56d3d (diff) | |
download | chromium_src-8bbb3ac22f87e12532a1c74992eba97bb0a52812.zip chromium_src-8bbb3ac22f87e12532a1c74992eba97bb0a52812.tar.gz chromium_src-8bbb3ac22f87e12532a1c74992eba97bb0a52812.tar.bz2 |
GTK: Remove the global bookmark menu code. It's been behind a flag and bitrotting.
BUG=86715, 85466
TEST=none
Review URL: http://codereview.chromium.org/8293002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105841 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/ui/gtk/global_bookmark_menu.cc | 268 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/global_bookmark_menu.h | 127 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/global_menu_bar.cc | 25 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/global_menu_bar.h | 4 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 8 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 4 |
7 files changed, 0 insertions, 438 deletions
diff --git a/chrome/browser/ui/gtk/global_bookmark_menu.cc b/chrome/browser/ui/gtk/global_bookmark_menu.cc deleted file mode 100644 index 8357319..0000000 --- a/chrome/browser/ui/gtk/global_bookmark_menu.cc +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/gtk/global_bookmark_menu.h" - -#include <dlfcn.h> -#include <gtk/gtk.h> - -#include "base/bind.h" -#include "base/logging.h" -#include "base/utf_string_conversions.h" -#include "chrome/browser/bookmarks/bookmark_model.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/themes/theme_service_factory.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h" -#include "chrome/browser/ui/gtk/global_bookmark_menu.h" -#include "chrome/browser/ui/gtk/global_menu_bar.h" -#include "chrome/browser/ui/gtk/gtk_theme_service.h" -#include "chrome/browser/ui/gtk/gtk_util.h" -#include "chrome/common/chrome_notification_types.h" -#include "content/common/notification_service.h" -#include "grit/generated_resources.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/gfx/gtk_util.h" - -GlobalBookmarkMenu::GlobalBookmarkMenu(Browser* browser) - : browser_(browser), - profile_(browser->profile()), - default_favicon_(NULL), - ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { - DCHECK(profile_); - - default_favicon_ = GtkThemeService::GetDefaultFavicon(true); - default_folder_ = GtkThemeService::GetFolderIcon(true); - registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, - Source<ThemeService>( - ThemeServiceFactory::GetForProfile(profile_))); -} - -GlobalBookmarkMenu::~GlobalBookmarkMenu() { - profile_->GetBookmarkModel()->RemoveObserver(this); -} - -void GlobalBookmarkMenu::Init(GtkWidget* bookmark_menu, - GtkWidget* bookmark_menu_item) { - bookmark_menu_.Own(bookmark_menu); - - BookmarkModel* model = profile_->GetBookmarkModel(); - model->AddObserver(this); - if (model->IsLoaded()) - Loaded(model, false); -} - -void GlobalBookmarkMenu::RebuildMenuInFuture() { - weak_factory_.InvalidateWeakPtrs(); - MessageLoop::current()->PostTask( - FROM_HERE, - base::Bind(&GlobalBookmarkMenu::RebuildMenu, - weak_factory_.GetWeakPtr())); -} - -void GlobalBookmarkMenu::RebuildMenu() { - BookmarkModel* model = profile_->GetBookmarkModel(); - DCHECK(model); - DCHECK(model->IsLoaded()); - - ClearBookmarkMenu(); - - const BookmarkNode* bar_node = model->bookmark_bar_node(); - if (!bar_node->empty()) { - AddBookmarkMenuItem(bookmark_menu_.get(), gtk_separator_menu_item_new()); - AddNodeToMenu(bar_node, bookmark_menu_.get()); - } - - // Only display the other bookmarks folder in the menu if it has items in it. - const BookmarkNode* other_node = model->other_node(); - if (!other_node->empty()) { - GtkWidget* submenu = gtk_menu_new(); - AddNodeToMenu(other_node, submenu); - - AddBookmarkMenuItem(bookmark_menu_.get(), gtk_separator_menu_item_new()); - - GtkWidget* menu_item = gtk_image_menu_item_new_with_label( - l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_OTHER_FOLDER_NAME).c_str()); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu); - gtk_image_menu_item_set_image( - GTK_IMAGE_MENU_ITEM(menu_item), - gtk_image_new_from_pixbuf(default_folder_)); - gtk_util::SetAlwaysShowImage(menu_item); - - AddBookmarkMenuItem(bookmark_menu_.get(), menu_item); - } -} - -void GlobalBookmarkMenu::AddBookmarkMenuItem(GtkWidget* menu, - GtkWidget* menu_item) { - g_object_set_data(G_OBJECT(menu_item), "type-tag", - GINT_TO_POINTER(GlobalMenuBar::TAG_BOOKMARK_CLEARABLE)); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); - gtk_widget_show(menu_item); -} - -void GlobalBookmarkMenu::AddNodeToMenu(const BookmarkNode* node, - GtkWidget* menu) { - if (node->empty()) { - GtkWidget* item = gtk_menu_item_new_with_label( - l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str()); - gtk_widget_set_sensitive(item, FALSE); - AddBookmarkMenuItem(menu, item); - } else { - for (int i = 0; i < node->child_count(); ++i) { - const BookmarkNode* child = node->GetChild(i); - GtkWidget* item = gtk_image_menu_item_new(); - ConfigureMenuItem(child, item); - bookmark_nodes_[child] = item; - - if (child->is_folder()) { - GtkWidget* submenu = gtk_menu_new(); - AddNodeToMenu(child, submenu); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); - } else { - g_object_set_data(G_OBJECT(item), "bookmark-node", - const_cast<BookmarkNode*>(child)); - g_signal_connect(item, "activate", - G_CALLBACK(OnBookmarkItemActivatedThunk), this); - } - - AddBookmarkMenuItem(menu, item); - } - } -} - -void GlobalBookmarkMenu::ConfigureMenuItem(const BookmarkNode* node, - GtkWidget* menu_item) { - CHECK(node); - CHECK(menu_item); - - gtk_menu_item_set_label(GTK_MENU_ITEM(menu_item), - bookmark_utils::BuildMenuLabelFor(node).c_str()); - - if (node->is_url()) { - gtk_widget_set_tooltip_markup( - menu_item, - bookmark_utils::BuildTooltipFor(node).c_str()); - } - - const SkBitmap& bitmap = profile_->GetBookmarkModel()->GetFavicon(node); - if (!bitmap.isNull()) { - GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), - gtk_image_new_from_pixbuf(pixbuf)); - g_object_unref(pixbuf); - } else { - GdkPixbuf* pixbuf = node->is_url() ? default_favicon_ : default_folder_; - CHECK(pixbuf); - GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf); - CHECK(image); - - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image); - } - - gtk_util::SetAlwaysShowImage(menu_item); -} - -GtkWidget* GlobalBookmarkMenu::MenuItemForNode(const BookmarkNode* node) { - if (!node) - return NULL; - std::map<const BookmarkNode*, GtkWidget*>::iterator it = - bookmark_nodes_.find(node); - if (it == bookmark_nodes_.end()) - return NULL; - return it->second; -} - -void GlobalBookmarkMenu::ClearBookmarkMenu() { - bookmark_nodes_.clear(); - - gtk_container_foreach(GTK_CONTAINER(bookmark_menu_.get()), - &ClearBookmarkItemCallback, - NULL); -} - -// static -void GlobalBookmarkMenu::ClearBookmarkItemCallback(GtkWidget* menu_item, - void* unused) { - int tag = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menu_item), "type-tag")); - if (tag == GlobalMenuBar::TAG_BOOKMARK_CLEARABLE) - gtk_widget_destroy(menu_item); -} - -void GlobalBookmarkMenu::Observe(int type, - const NotificationSource& source, - const NotificationDetails& details) { - DCHECK(type == chrome::NOTIFICATION_BROWSER_THEME_CHANGED); - - // Change the icon and invalidate the menu. - default_favicon_ = GtkThemeService::GetDefaultFavicon(true); - default_folder_ = GtkThemeService::GetFolderIcon(true); - RebuildMenuInFuture(); -} - -void GlobalBookmarkMenu::Loaded(BookmarkModel* model, bool ids_reassigned) { - // If we have a Loaded() event, then we need to build the menu immediately - // for the first time. - RebuildMenu(); -} - -void GlobalBookmarkMenu::BookmarkModelBeingDeleted(BookmarkModel* model) { - ClearBookmarkMenu(); -} - -void GlobalBookmarkMenu::BookmarkNodeMoved(BookmarkModel* model, - const BookmarkNode* old_parent, - int old_index, - const BookmarkNode* new_parent, - int new_index) { - RebuildMenuInFuture(); -} - -void GlobalBookmarkMenu::BookmarkNodeAdded(BookmarkModel* model, - const BookmarkNode* parent, - int index) { - RebuildMenuInFuture(); -} - -void GlobalBookmarkMenu::BookmarkNodeRemoved(BookmarkModel* model, - const BookmarkNode* parent, - int old_index, - const BookmarkNode* node) { - GtkWidget* item = MenuItemForNode(node); - if (item) { - gtk_widget_destroy(item); - bookmark_nodes_.erase(node); - } -} - -void GlobalBookmarkMenu::BookmarkNodeChanged(BookmarkModel* model, - const BookmarkNode* node) { - GtkWidget* item = MenuItemForNode(node); - if (item) - ConfigureMenuItem(node, item); -} - -void GlobalBookmarkMenu::BookmarkNodeFaviconChanged(BookmarkModel* model, - const BookmarkNode* node) { - GtkWidget* item = MenuItemForNode(node); - if (item) - ConfigureMenuItem(node, item); -} - -void GlobalBookmarkMenu::BookmarkNodeChildrenReordered( - BookmarkModel* model, - const BookmarkNode* node) { - RebuildMenuInFuture(); -} - -void GlobalBookmarkMenu::OnBookmarkItemActivated(GtkWidget* menu_item) { - // The actual mouse event that generated this activated event was in a - // different process. Go with something default. - const BookmarkNode* node = static_cast<const BookmarkNode*>( - g_object_get_data(G_OBJECT(menu_item), "bookmark-node")); - - browser_->OpenURL(OpenURLParams(node->url(), GURL(), NEW_FOREGROUND_TAB, - content::PAGE_TRANSITION_AUTO_BOOKMARK, false)); -} - diff --git a/chrome/browser/ui/gtk/global_bookmark_menu.h b/chrome/browser/ui/gtk/global_bookmark_menu.h deleted file mode 100644 index 92b712a..0000000 --- a/chrome/browser/ui/gtk/global_bookmark_menu.h +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_GTK_GLOBAL_BOOKMARK_MENU_H_ -#define CHROME_BROWSER_UI_GTK_GLOBAL_BOOKMARK_MENU_H_ - -#include <map> - -#include "base/compiler_specific.h" -#include "base/memory/weak_ptr.h" -#include "base/task.h" -#include "chrome/browser/bookmarks/bookmark_model_observer.h" -#include "chrome/browser/ui/gtk/global_menu_owner.h" -#include "content/common/notification_observer.h" -#include "content/common/notification_registrar.h" -#include "ui/base/gtk/gtk_signal.h" -#include "ui/base/gtk/owned_widget_gtk.h" - -class Browser; -class Profile; - -typedef struct _GdkPixbuf GdkPixbuf; -typedef struct _GtkWidget GtkWidget; - -// Manages the global bookmarks menu. -// -// There are a few subtleties here: we can't rely on accurate event -// dispositions being sent back, right click menus on menu items are placed -// relative to the main chrome window instead of the global menu bar, and we -// need to update the menu in the background (instead of building it on showing -// and not updating it if the model changes). I'm not even thinking about -// making these draggable since these items aren't displayed in our process. -class GlobalBookmarkMenu : public GlobalMenuOwner, - public NotificationObserver, - public BookmarkModelObserver { - public: - explicit GlobalBookmarkMenu(Browser* browser); - virtual ~GlobalBookmarkMenu(); - - // Takes the bookmark menu we need to modify based on bookmark state. - virtual void Init(GtkWidget* bookmark_menu, GtkWidget* bookmark_menu_item); - - private: - // Schedules the menu to be rebuilt. The mac version sets a boolean and - // rebuilds the menu during their pre-show callback. We don't have anything - // like that: by the time we get a "show" signal from GTK+, the menu has - // already been displayed and it will take multiple dbus calls to add the - // menu items. - // - // Since the bookmark model works by sending us BookmarkNodeEvent - // notifications one by one, we use a timer to batch up calls. - void RebuildMenuInFuture(); - - // Rebuilds the menu now. Called on initial Load() and from - // RebuildMenuInFuture(). - void RebuildMenu(); - - // Adds |item| to |menu| and marks it as a dynamic item. - void AddBookmarkMenuItem(GtkWidget* menu, GtkWidget* menu_item); - - // Adds an menu item representing |node| to |menu|. - void AddNodeToMenu(const BookmarkNode* node, GtkWidget* menu); - - // This configures a GtkWidget with all the data from a BookmarkNode. This is - // used to update existing menu items, as well as to configure newly created - // ones, like in AddNodeToMenu(). - void ConfigureMenuItem(const BookmarkNode* node, GtkWidget* menu_item); - - // Returns the GtkMenuItem for |node|. - GtkWidget* MenuItemForNode(const BookmarkNode* node); - - // Removes all bookmark entries from the bookmark menu in anticipation that - // we're about to do a rebuild. - void ClearBookmarkMenu(); - - // Callback used in ClearBookmarkMenu(). - static void ClearBookmarkItemCallback(GtkWidget* menu_item, - void* unused); - - // NotificationObserver: - virtual void Observe(int type, - const NotificationSource& source, - const NotificationDetails& details); - - // BookmarkModelObserver: - virtual void Loaded(BookmarkModel* model, bool ids_reassigned) OVERRIDE; - virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; - virtual void BookmarkNodeMoved(BookmarkModel* model, - const BookmarkNode* old_parent, - int old_index, - const BookmarkNode* new_parent, - int new_index) OVERRIDE; - virtual void BookmarkNodeAdded(BookmarkModel* model, - const BookmarkNode* parent, - int index) OVERRIDE; - virtual void BookmarkNodeRemoved(BookmarkModel* model, - const BookmarkNode* parent, - int old_index, - const BookmarkNode* node) OVERRIDE; - virtual void BookmarkNodeChanged(BookmarkModel* model, - const BookmarkNode* node) OVERRIDE; - virtual void BookmarkNodeFaviconChanged(BookmarkModel* model, - const BookmarkNode* node) OVERRIDE; - virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, - const BookmarkNode* node) OVERRIDE; - - CHROMEGTK_CALLBACK_0(GlobalBookmarkMenu, void, OnBookmarkItemActivated); - - Browser* browser_; - Profile* profile_; - - NotificationRegistrar registrar_; - - GdkPixbuf* default_favicon_; - GdkPixbuf* default_folder_; - - ui::OwnedWidgetGtk bookmark_menu_; - - base::WeakPtrFactory<GlobalBookmarkMenu> weak_factory_; - - // In order to appropriately update items in the bookmark menu, without - // forcing a rebuild, map the model's nodes to menu items. - std::map<const BookmarkNode*, GtkWidget*> bookmark_nodes_; -}; - -#endif // CHROME_BROWSER_UI_GTK_GLOBAL_BOOKMARK_MENU_H_ diff --git a/chrome/browser/ui/gtk/global_menu_bar.cc b/chrome/browser/ui/gtk/global_menu_bar.cc index 4e37ed8..f03a45c 100644 --- a/chrome/browser/ui/gtk/global_menu_bar.cc +++ b/chrome/browser/ui/gtk/global_menu_bar.cc @@ -12,7 +12,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/gtk/accelerators_gtk.h" -#include "chrome/browser/ui/gtk/global_bookmark_menu.h" #include "chrome/browser/ui/gtk/gtk_theme_service.h" #include "chrome/browser/ui/gtk/gtk_util.h" #include "chrome/common/chrome_notification_types.h" @@ -118,14 +117,6 @@ GlobalMenuBarCommand history_menu[] = { { MENU_END, MENU_END } }; -GlobalMenuBarCommand bookmark_menu[] = { - { IDS_BOOKMARK_MANAGER, IDC_SHOW_BOOKMARK_MANAGER }, - { IDS_BOOKMARK_CURRENT_PAGE_LINUX, IDC_BOOKMARK_PAGE }, - { IDS_BOOKMARK_ALL_TABS_LINUX, IDC_BOOKMARK_ALL_TABS }, - - { MENU_END, MENU_END } -}; - GlobalMenuBarCommand tools_menu[] = { { IDS_SHOW_DOWNLOADS, IDC_SHOW_DOWNLOADS }, { IDS_SHOW_HISTORY, IDC_SHOW_HISTORY }, @@ -173,22 +164,6 @@ GlobalMenuBar::GlobalMenuBar(Browser* browser) BuildGtkMenuFrom(IDS_HISTORY_MENU_LINUX, &id_to_menu_item_, history_menu, &history_menu_); - if (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableGlobalBookmarkMenu)) { - // TODO(erg): dbusmenu-glib in Ubuntu Natty does not like it when we shove - // 100k or more of favicon data over it. Users have reported that the - // browser hangs on startup for over a minute and breaking during this time - // shows a stack entirely of dbus/glib code (See #86715). For now, just - // hide the menu until appmenu-gtk catches up and doesn't hang if we throw - // (potentially) megs of icon data at it. (Some of our users have thousands - // of bookmarks and we're already unacceptably laggy at 100.) - // - // http://crbug.com/86715, http://crbug.com/85466 - bookmark_menu_.reset(new GlobalBookmarkMenu(browser_)); - BuildGtkMenuFrom(IDS_BOOKMARKS_MENU_LINUX, &id_to_menu_item_, bookmark_menu, - bookmark_menu_.get()); - } - BuildGtkMenuFrom(IDS_TOOLS_MENU_LINUX, &id_to_menu_item_, tools_menu, NULL); BuildGtkMenuFrom(IDS_HELP_MENU_LINUX, &id_to_menu_item_, help_menu, NULL); diff --git a/chrome/browser/ui/gtk/global_menu_bar.h b/chrome/browser/ui/gtk/global_menu_bar.h index caac222..b1a6cc4 100644 --- a/chrome/browser/ui/gtk/global_menu_bar.h +++ b/chrome/browser/ui/gtk/global_menu_bar.h @@ -16,7 +16,6 @@ #include "ui/base/gtk/owned_widget_gtk.h" class Browser; -class GlobalBookmarkMenu; struct GlobalMenuBarCommand; class GlobalMenuOwner; @@ -91,9 +90,6 @@ class GlobalMenuBar : public CommandUpdater::CommandObserver, // history menu fresh. GlobalHistoryMenu history_menu_; - // Listens to the bookmark model and updates the menu. - scoped_ptr<GlobalBookmarkMenu> bookmark_menu_; - // For some menu items, we want to show the accelerator, but not actually // explicitly handle it. To this end we connect those menu items' accelerators // to this group, but don't attach this group to any top level window. diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index b086144..33883e7 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2966,8 +2966,6 @@ 'browser/ui/gtk/fullscreen_exit_bubble_gtk.h', 'browser/ui/gtk/gconf_titlebar_listener.cc', 'browser/ui/gtk/gconf_titlebar_listener.h', - 'browser/ui/gtk/global_bookmark_menu.cc', - 'browser/ui/gtk/global_bookmark_menu.h', 'browser/ui/gtk/global_error_bubble.cc', 'browser/ui/gtk/global_error_bubble.h', 'browser/ui/gtk/global_history_menu.cc', diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index bd3fe443..1cd7ffa 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -1183,14 +1183,6 @@ const char kUseMockKeychain[] = "use-mock-keychain"; const char kKioskMode[] = "kiosk"; #endif -#if defined(TOOLKIT_GTK) -// Enables the global bookmark menu in our global menu bar on Ubuntu -// Natty. This is disabled because of issues where dbus will hang for over a -// minute because it doesn't like it when we thrown hundreds of kilobytes (or -// even megabytes) of favicon data at it. -const char kEnableGlobalBookmarkMenu[] = "enable-global-bookmark-menu"; -#endif - #if defined(TOOLKIT_VIEWS) // Enables debug paint in views framework. Enabling this causes the damaged // region being painted to flash in red. diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index abce30c..0812fdb 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -340,10 +340,6 @@ extern const char kUseMockKeychain[]; extern const char kKioskMode[]; #endif -#if defined(TOOLKIT_GTK) -extern const char kEnableGlobalBookmarkMenu[]; -#endif - #if defined(TOOLKIT_VIEWS) extern const char kDebugViewsPaint[]; extern const char kViewsDesktop[]; |