diff options
-rw-r--r-- | chrome/browser/gtk/bookmark_editor_gtk.cc | 2 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.cc | 8 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_tree_model.cc | 8 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.cc | 54 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_utils_gtk.h | 11 | ||||
-rw-r--r-- | chrome/browser/gtk/list_store_favicon_loader.cc | 12 | ||||
-rw-r--r-- | chrome/browser/gtk/list_store_favicon_loader.h | 5 |
7 files changed, 69 insertions, 31 deletions
diff --git a/chrome/browser/gtk/bookmark_editor_gtk.cc b/chrome/browser/gtk/bookmark_editor_gtk.cc index a6d46c3..3aee43b 100644 --- a/chrome/browser/gtk/bookmark_editor_gtk.cc +++ b/chrome/browser/gtk/bookmark_editor_gtk.cc @@ -313,7 +313,7 @@ void BookmarkEditorGtk::AddNewGroup(GtkTreeIter* parent, GtkTreeIter* child) { gtk_tree_store_set( tree_store_, child, bookmark_utils::FOLDER_ICON, - bookmark_utils::GetFolderIcon(), + bookmark_utils::GetFolderIcon(true), bookmark_utils::FOLDER_NAME, l10n_util::GetStringUTF8(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME).c_str(), bookmark_utils::ITEM_ID, static_cast<int64>(0), diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc index 19fee77..a7a516d 100644 --- a/chrome/browser/gtk/bookmark_manager_gtk.cc +++ b/chrome/browser/gtk/bookmark_manager_gtk.cc @@ -611,6 +611,7 @@ void BookmarkManagerGtk::BuildLeftStore() { model_->GetBookmarkBarNode()->id(), left_store_, &select_iter); gtk_tree_selection_select_iter(left_selection(), &select_iter); + // TODO(estade): is there a decent stock icon we can use here? ResourceBundle& rb = ResourceBundle::GetSharedInstance(); gtk_tree_store_append(left_store_, &select_iter, NULL); gtk_tree_store_set(left_store_, &select_iter, @@ -622,15 +623,18 @@ void BookmarkManagerGtk::BuildLeftStore() { bookmark_utils::ITEM_ID, kRecentID, -1); + GdkPixbuf* search_icon = gtk_widget_render_icon( + window_, GTK_STOCK_FIND, GTK_ICON_SIZE_MENU, NULL); gtk_tree_store_append(left_store_, &select_iter, NULL); gtk_tree_store_set(left_store_, &select_iter, bookmark_utils::FOLDER_ICON, - rb.GetPixbufNamed(IDR_BOOKMARK_MANAGER_SEARCH_ICON), + search_icon, bookmark_utils::FOLDER_NAME, l10n_util::GetStringUTF8( IDS_BOOKMARK_TREE_SEARCH_NODE_TITLE).c_str(), bookmark_utils::ITEM_ID, kSearchID, -1); + g_object_unref(search_icon); } void BookmarkManagerGtk::BuildRightStore() { @@ -735,7 +739,7 @@ void BookmarkManagerGtk::SetRightSideColumnValues(int row, GtkTreeIter* iter) { // TODO(estade): building the path could be optimized out when we aren't // showing the path column. const BookmarkNode* node = right_tree_model_->GetNodeForRow(row); - GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model_); + GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model_, true); std::wstring title = right_tree_model_->GetText(row, IDS_BOOKMARK_TABLE_TITLE); std::wstring url = right_tree_model_->GetText(row, IDS_BOOKMARK_TABLE_URL); diff --git a/chrome/browser/gtk/bookmark_tree_model.cc b/chrome/browser/gtk/bookmark_tree_model.cc index f78baf1..7682e9b 100644 --- a/chrome/browser/gtk/bookmark_tree_model.cc +++ b/chrome/browser/gtk/bookmark_tree_model.cc @@ -16,10 +16,14 @@ namespace { void AddSingleNodeToTreeStore(GtkTreeStore* store, const BookmarkNode* node, GtkTreeIter *iter, GtkTreeIter* parent) { gtk_tree_store_append(store, iter, parent); - // TODO(estade): we should show the folder open icon when it's expanded. + // It would be easy to show a different icon when the folder is open (as they + // do on Windows, for example), using pixbuf-expander-closed and + // pixbuf-expander-open. Unfortunately there is no GTK_STOCK_OPEN_DIRECTORY + // (and indeed, Nautilus does not render an expanded directory any + // differently). gtk_tree_store_set(store, iter, bookmark_utils::FOLDER_ICON, - bookmark_utils::GetFolderIcon(), + bookmark_utils::GetFolderIcon(true), bookmark_utils::FOLDER_NAME, WideToUTF8(node->GetTitle()).c_str(), bookmark_utils::ITEM_ID, node->id(), diff --git a/chrome/browser/gtk/bookmark_utils_gtk.cc b/chrome/browser/gtk/bookmark_utils_gtk.cc index 937cb3a..3d73794 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.cc +++ b/chrome/browser/gtk/bookmark_utils_gtk.cc @@ -45,6 +45,10 @@ void* AsVoid(const BookmarkNode* node) { return const_cast<BookmarkNode*>(node); } +// This is a dummy widget that only exists so we have something to pass to +// gtk_widget_render_icon(). +GtkWidget* icon_widget = NULL; + } // namespace namespace bookmark_utils { @@ -54,32 +58,53 @@ const char kBookmarkNode[] = "bookmark-node"; // Spacing between the buttons on the bar. const int kBarButtonPadding = 4; -GdkPixbuf* GetFolderIcon() { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed( - IDR_BOOKMARK_BAR_FOLDER); - return default_folder_icon; +GdkPixbuf* GetFolderIcon(bool native) { + if (!native) { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + static GdkPixbuf* default_folder_icon = rb.GetPixbufNamed( + IDR_BOOKMARK_BAR_FOLDER); + return default_folder_icon; + } else { + if (!icon_widget) + icon_widget = gtk_fixed_new(); + // We never release our ref, so we will leak this on program shutdown. + static GdkPixbuf* default_folder_icon = + gtk_widget_render_icon(icon_widget, GTK_STOCK_DIRECTORY, + GTK_ICON_SIZE_MENU, NULL); + return default_folder_icon; + } } -GdkPixbuf* GetDefaultFavicon() { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - static GdkPixbuf* default_bookmark_icon = rb.GetPixbufNamed( - IDR_DEFAULT_FAVICON); - return default_bookmark_icon; +GdkPixbuf* GetDefaultFavicon(bool native) { + if (!native) { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + static GdkPixbuf* default_bookmark_icon = rb.GetPixbufNamed( + IDR_DEFAULT_FAVICON); + return default_bookmark_icon; + } else { + if (!icon_widget) + icon_widget = gtk_fixed_new(); + // We never release our ref, so we will leak this on program shutdown. + static GdkPixbuf* default_bookmark_icon = + gtk_widget_render_icon(icon_widget, GTK_STOCK_FILE, + GTK_ICON_SIZE_MENU, NULL); + return default_bookmark_icon; + } } -GdkPixbuf* GetPixbufForNode(const BookmarkNode* node, BookmarkModel* model) { +GdkPixbuf* GetPixbufForNode(const BookmarkNode* node, BookmarkModel* model, + bool native) { GdkPixbuf* pixbuf; if (node->is_url()) { if (model->GetFavIcon(node).width() != 0) { pixbuf = gfx::GdkPixbufFromSkBitmap(&model->GetFavIcon(node)); } else { - pixbuf = GetDefaultFavicon(); + pixbuf = GetDefaultFavicon(native); g_object_ref(pixbuf); } } else { - pixbuf = GetFolderIcon(); + pixbuf = GetFolderIcon(native); g_object_ref(pixbuf); } @@ -124,7 +149,8 @@ void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model, // We pack the button manually (rather than using gtk_button_set_*) so that // we can have finer control over its label. - GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model); + GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model, + provider->UseGtkTheme()); GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); diff --git a/chrome/browser/gtk/bookmark_utils_gtk.h b/chrome/browser/gtk/bookmark_utils_gtk.h index 865a79e..3bab09d 100644 --- a/chrome/browser/gtk/bookmark_utils_gtk.h +++ b/chrome/browser/gtk/bookmark_utils_gtk.h @@ -23,12 +23,14 @@ extern const int kBarButtonPadding; // These functions do not add a ref to the returned pixbuf, and it should not be // unreffed. -GdkPixbuf* GetFolderIcon(); -GdkPixbuf* GetDefaultFavicon(); +// If |native| is true, get the GTK_STOCK version of the icon. +GdkPixbuf* GetFolderIcon(bool native); +GdkPixbuf* GetDefaultFavicon(bool native); // Get the image that is used to represent the node. This function adds a ref // to the returned pixbuf, so it requires a matching call to g_object_unref(). -GdkPixbuf* GetPixbufForNode(const BookmarkNode* node, BookmarkModel* model); +GdkPixbuf* GetPixbufForNode(const BookmarkNode* node, BookmarkModel* model, + bool native); // Returns a GtkWindow with a visual hierarchy for passing to // gtk_drag_set_icon_widget(). @@ -47,8 +49,7 @@ std::string BuildTooltipFor(const BookmarkNode* node); // Returns the "bookmark-node" property of |widget| casted to the correct type. const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget); -// This function is a temporary hack to fix fonts on dark system themes. -// TODO(estade): remove this function. +// Set the colors on |label| as per the theme. void SetButtonTextColors(GtkWidget* label, GtkThemeProvider* provider); // Drag and drop. -------------------------------------------------------------- diff --git a/chrome/browser/gtk/list_store_favicon_loader.cc b/chrome/browser/gtk/list_store_favicon_loader.cc index 5a34dd0..feb0e8e 100644 --- a/chrome/browser/gtk/list_store_favicon_loader.cc +++ b/chrome/browser/gtk/list_store_favicon_loader.cc @@ -4,11 +4,10 @@ #include "chrome/browser/gtk/list_store_favicon_loader.h" -#include "app/resource_bundle.h" #include "base/gfx/gtk_util.h" #include "base/gfx/png_decoder.h" +#include "chrome/browser/gtk/bookmark_utils_gtk.h" #include "chrome/browser/profile.h" -#include "grit/app_resources.h" #include "third_party/skia/include/core/SkBitmap.h" ListStoreFavIconLoader::ListStoreFavIconLoader( @@ -16,9 +15,12 @@ ListStoreFavIconLoader::ListStoreFavIconLoader( Profile* profile, CancelableRequestConsumer* consumer) : list_store_(list_store), favicon_col_(favicon_col), favicon_handle_col_(favicon_handle_col), profile_(profile), - consumer_(consumer) { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - default_favicon_ = rb.GetPixbufNamed(IDR_DEFAULT_FAVICON); + consumer_(consumer), + default_favicon_(bookmark_utils::GetDefaultFavicon(true)) { +} + +ListStoreFavIconLoader::~ListStoreFavIconLoader() { + g_object_unref(default_favicon_); } void ListStoreFavIconLoader::LoadFaviconForRow(const GURL& url, diff --git a/chrome/browser/gtk/list_store_favicon_loader.h b/chrome/browser/gtk/list_store_favicon_loader.h index 935c0f7..86bb7e0 100644 --- a/chrome/browser/gtk/list_store_favicon_loader.h +++ b/chrome/browser/gtk/list_store_favicon_loader.h @@ -25,6 +25,8 @@ class ListStoreFavIconLoader { Profile* profile, CancelableRequestConsumer* consumer); + ~ListStoreFavIconLoader(); + // Start loading the favicon for |url| into the row |iter|. void LoadFaviconForRow(const GURL& url, GtkTreeIter* iter); @@ -55,8 +57,7 @@ class ListStoreFavIconLoader { // Used in loading favicons. CancelableRequestConsumer* consumer_; - // Default icon to show when one can't be found for the URL. This is owned by - // the ResourceBundle and we do not need to free it. + // Default icon to show when one can't be found for the URL. GdkPixbuf* default_favicon_; DISALLOW_COPY_AND_ASSIGN(ListStoreFavIconLoader); |