| Index: chrome/browser/gtk/bookmark_manager_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/bookmark_manager_gtk.cc (revision 19623)
|
| +++ chrome/browser/gtk/bookmark_manager_gtk.cc (working copy)
|
| @@ -26,6 +26,7 @@
|
| #include "chrome/common/pref_service.h"
|
| #include "grit/app_resources.h"
|
| #include "grit/generated_resources.h"
|
| +#include "grit/locale_settings.h"
|
| #include "grit/theme_resources.h"
|
|
|
| namespace {
|
| @@ -45,6 +46,12 @@
|
| // Time between a user action in the search box and when we perform the search.
|
| const int kSearchDelayMS = 200;
|
|
|
| +// The default width of a column in the right tree view. Since we set the
|
| +// columns to ellipsize, if we don't explicitly set a width they will be
|
| +// wide enough to display only '...'. This will be overridden if the user
|
| +// resizes the column.
|
| +const int kDefaultColumnWidth = 200;
|
| +
|
| // We only have one manager open at a time.
|
| BookmarkManagerGtk* manager = NULL;
|
|
|
| @@ -277,9 +284,11 @@
|
| Loaded(model_);
|
|
|
| gtk_widget_show_all(window_);
|
| + gtk_tree_view_columns_autosize(GTK_TREE_VIEW(right_tree_view_));
|
| }
|
|
|
| BookmarkManagerGtk::~BookmarkManagerGtk() {
|
| + SaveColumnConfiguration();
|
| model_->RemoveObserver(this);
|
| }
|
|
|
| @@ -287,11 +296,31 @@
|
| window_ = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
| gtk_window_set_title(GTK_WINDOW(window_),
|
| l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_TITLE).c_str());
|
| - // TODO(estade): use dimensions based on
|
| - // IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS and
|
| - // IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES.
|
| - gtk_window_set_default_size(GTK_WINDOW(window_), 640, 480);
|
|
|
| + // Set the default size of the bookmark manager.
|
| + // Windows has code to do this that uses ChromeFont; we could share it but
|
| + // since we don't plan to use it elsewhere it's probably not worth the effort.
|
| + PangoContext* context = gtk_widget_create_pango_context(window_);
|
| + PangoFontMetrics* metrics =
|
| + pango_context_get_metrics(context, window_->style->font_desc,
|
| + pango_context_get_language(context));
|
| + double chars = 0;
|
| + StringToDouble(WideToUTF8(l10n_util::GetString(
|
| + IDS_BOOKMARK_MANAGER_DIALOG_WIDTH_CHARS)), &chars);
|
| + int width =
|
| + pango_font_metrics_get_approximate_char_width(metrics) *
|
| + static_cast<int>(chars) / PANGO_SCALE;
|
| + double lines = 0;
|
| + StringToDouble(WideToUTF8(l10n_util::GetString(
|
| + IDS_BOOKMARK_MANAGER_DIALOG_HEIGHT_LINES)), &lines);
|
| + int height =
|
| + (pango_font_metrics_get_ascent(metrics) +
|
| + pango_font_metrics_get_descent(metrics)) *
|
| + static_cast<int>(lines) / PANGO_SCALE;
|
| + gtk_window_set_default_size(GTK_WINDOW(window_), width, height);
|
| + pango_font_metrics_unref(metrics);
|
| + g_object_unref(context);
|
| +
|
| // Build the organize and tools menus.
|
| organize_ = gtk_menu_item_new_with_label(
|
| l10n_util::GetStringUTF8(IDS_BOOKMARK_MANAGER_ORGANIZE_MENU).c_str());
|
| @@ -338,10 +367,7 @@
|
|
|
| GtkWidget* paned = gtk_hpaned_new();
|
| // Set the initial position of the pane divider.
|
| - // TODO(estade): we should set this to one third of the width of the window
|
| - // when it first shows (depending on the WM, this may or may not be the value
|
| - // we set below in gtk_window_set_size()).
|
| - gtk_paned_set_position(GTK_PANED(paned), 200);
|
| + gtk_paned_set_position(GTK_PANED(paned), width / 3);
|
| gtk_paned_pack1(GTK_PANED(paned), left_pane, FALSE, FALSE);
|
| gtk_paned_pack2(GTK_PANED(paned), right_pane, TRUE, FALSE);
|
|
|
| @@ -403,29 +429,34 @@
|
| right_store_ = gtk_list_store_new(RIGHT_PANE_NUM,
|
| GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
|
|
|
| - GtkTreeViewColumn* title_column = gtk_tree_view_column_new();
|
| - gtk_tree_view_column_set_title(title_column,
|
| + title_column_ = gtk_tree_view_column_new();
|
| + gtk_tree_view_column_set_title(title_column_,
|
| l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_TITLE).c_str());
|
| GtkCellRenderer* image_renderer = gtk_cell_renderer_pixbuf_new();
|
| - gtk_tree_view_column_pack_start(title_column, image_renderer, FALSE);
|
| - gtk_tree_view_column_add_attribute(title_column, image_renderer,
|
| + gtk_tree_view_column_pack_start(title_column_, image_renderer, FALSE);
|
| + gtk_tree_view_column_add_attribute(title_column_, image_renderer,
|
| "pixbuf", RIGHT_PANE_PIXBUF);
|
| GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new();
|
| - gtk_tree_view_column_pack_start(title_column, text_renderer, TRUE);
|
| - gtk_tree_view_column_add_attribute(title_column, text_renderer,
|
| + g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
|
| + gtk_tree_view_column_pack_start(title_column_, text_renderer, TRUE);
|
| + gtk_tree_view_column_add_attribute(title_column_, text_renderer,
|
| "text", RIGHT_PANE_TITLE);
|
| - GtkTreeViewColumn* url_column = gtk_tree_view_column_new_with_attributes(
|
| +
|
| + url_column_ = gtk_tree_view_column_new_with_attributes(
|
| l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_URL).c_str(),
|
| - gtk_cell_renderer_text_new(), "text", RIGHT_PANE_URL, NULL);
|
| + text_renderer, "text", RIGHT_PANE_URL, NULL);
|
| +
|
| path_column_ = gtk_tree_view_column_new_with_attributes(
|
| l10n_util::GetStringUTF8(IDS_BOOKMARK_TABLE_PATH).c_str(),
|
| - gtk_cell_renderer_text_new(), "text", RIGHT_PANE_PATH, NULL);
|
| + text_renderer, "text", RIGHT_PANE_PATH, NULL);
|
|
|
| + SizeColumns();
|
| +
|
| right_tree_view_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_));
|
| // Let |tree_view| own the store.
|
| g_object_unref(right_store_);
|
| - gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column);
|
| - gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column_);
|
| + gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column_);
|
| gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), path_column_);
|
| gtk_tree_selection_set_mode(right_selection(), GTK_SELECTION_MULTIPLE);
|
|
|
| @@ -647,6 +678,40 @@
|
| SetRightSideColumnValues(row, &iter);
|
| }
|
|
|
| +void BookmarkManagerGtk::SizeColumn(GtkTreeViewColumn* column,
|
| + const wchar_t* prefname) {
|
| + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
|
| + gtk_tree_view_column_set_resizable(column, TRUE);
|
| +
|
| + PrefService* prefs = profile_->GetPrefs();
|
| + if (!prefs)
|
| + return;
|
| +
|
| + int width = prefs->GetInteger(prefname);
|
| + if (width <= 0)
|
| + width = kDefaultColumnWidth;
|
| + gtk_tree_view_column_set_fixed_width(column, width);
|
| +}
|
| +
|
| +void BookmarkManagerGtk::SizeColumns() {
|
| + SizeColumn(title_column_, prefs::kBookmarkTableNameWidth1);
|
| + SizeColumn(url_column_, prefs::kBookmarkTableURLWidth1);
|
| + SizeColumn(path_column_, prefs::kBookmarkTablePathWidth);
|
| +}
|
| +
|
| +void BookmarkManagerGtk::SaveColumnConfiguration() {
|
| + PrefService* prefs = profile_->GetPrefs();
|
| + if (!prefs)
|
| + return;
|
| +
|
| + prefs->SetInteger(prefs::kBookmarkTableNameWidth1,
|
| + gtk_tree_view_column_get_width(title_column_));
|
| + prefs->SetInteger(prefs::kBookmarkTableURLWidth1,
|
| + gtk_tree_view_column_get_width(url_column_));
|
| + prefs->SetInteger(prefs::kBookmarkTablePathWidth,
|
| + gtk_tree_view_column_get_width(path_column_));
|
| +}
|
| +
|
| bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter,
|
| int target) {
|
| GValue value = { 0, };
|
|
|