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

Unified Diff: chrome/browser/chromeos/options/options_window_view.cc

Issue 2812026: Auto-size the views version of the options dialog. (Closed)
Patch Set: Fix autosizing issue with gtk pref pages in chromeos options dialog. Created 10 years, 6 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/chromeos/options/options_window_view.cc
diff --git a/chrome/browser/chromeos/options/options_window_view.cc b/chrome/browser/chromeos/options/options_window_view.cc
index d284ce342a6016cfe62220cc848f6546f808c4f8..4535e8bae79ba7abab91082f73a6f8d553255bc6 100644
--- a/chrome/browser/chromeos/options/options_window_view.cc
+++ b/chrome/browser/chromeos/options/options_window_view.cc
@@ -35,6 +35,48 @@
namespace chromeos {
///////////////////////////////////////////////////////////////////////////////
+// GtkPreferencePageHost
+//
+// Hosts a GTK preference page and takes care of sizing it appropriately.
+//
+class GtkPreferencePageHost : public views::NativeViewHost {
+ public:
+ explicit GtkPreferencePageHost(GtkWidget* widget);
+
+ private:
+ // views::View overrides:
+ virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child);
+ virtual gfx::Size GetPreferredSize();
+
+ GtkWidget* widget_;
+
+ DISALLOW_COPY_AND_ASSIGN(GtkPreferencePageHost);
+};
+
+GtkPreferencePageHost::GtkPreferencePageHost(GtkWidget* widget)
+ : widget_(widget) {
+ set_background(views::Background::CreateSolidBackground(SK_ColorWHITE));
+}
+
+void GtkPreferencePageHost::ViewHierarchyChanged(bool is_add,
+ View* parent,
+ View* child) {
+ NativeViewHost::ViewHierarchyChanged(is_add, parent, child);
+ if (is_add && child == this)
+ Attach(widget_);
+}
+
+gfx::Size GtkPreferencePageHost::GetPreferredSize() {
+ // We need to show the widget and its children since otherwise containers like
+ // gtk_box don't compute the correct size.
+ gtk_widget_show_all(widget_);
+ GtkRequisition requisition = { 0, 0 };
+ gtk_widget_size_request(GTK_WIDGET(widget_), &requisition);
+ GtkRequisition& size(widget_->requisition);
+ return gfx::Size(size.width, size.height);
+}
+
+///////////////////////////////////////////////////////////////////////////////
// OptionsWindowView
//
// The contents of the Options dialog window.
@@ -214,9 +256,9 @@ void OptionsWindowView::Layout() {
}
gfx::Size OptionsWindowView::GetPreferredSize() {
- return gfx::Size(views::Window::GetLocalizedContentsSize(
- IDS_OPTIONS_DIALOG_WIDTH_CHARS,
- IDS_OPTIONS_DIALOG_HEIGHT_LINES));
+ gfx::Size size(tabs_->GetPreferredSize());
+ size.Enlarge(2 * kDialogPadding, 2 * kDialogPadding);
+ return size;
}
void OptionsWindowView::ViewHierarchyChanged(bool is_add,
@@ -263,29 +305,23 @@ void OptionsWindowView::Init() {
l10n_util::GetString(IDS_OPTIONS_INTERNET_TAB_LABEL),
internet_page, false);
- views::NativeViewHost* general_page_view = new views::NativeViewHost();
- general_page_view->set_background(views::Background::CreateSolidBackground(
- SK_ColorWHITE));
tabs_->AddTabAtIndex(tab_index++,
l10n_util::GetString(IDS_OPTIONS_GENERAL_TAB_LABEL),
- general_page_view, false);
- general_page_view->Attach(general_page_.get_page_widget());
+ new GtkPreferencePageHost(
+ general_page_.get_page_widget()),
+ false);
- views::NativeViewHost* content_page_view = new views::NativeViewHost();
- content_page_view->set_background(views::Background::CreateSolidBackground(
- SK_ColorWHITE));
tabs_->AddTabAtIndex(tab_index++,
l10n_util::GetString(IDS_OPTIONS_CONTENT_TAB_LABEL),
- content_page_view, false);
- content_page_view->Attach(content_page_.get_page_widget());
+ new GtkPreferencePageHost(
+ content_page_.get_page_widget()),
+ false);
- views::NativeViewHost* advanced_page_view = new views::NativeViewHost();
- advanced_page_view->set_background(views::Background::CreateSolidBackground(
- SK_ColorWHITE));
tabs_->AddTabAtIndex(tab_index++,
l10n_util::GetString(IDS_OPTIONS_ADVANCED_TAB_LABEL),
- advanced_page_view, false);
- advanced_page_view->Attach(advanced_page_.get_page_widget());
+ new GtkPreferencePageHost(
+ advanced_page_.get_page_widget()),
+ false);
DCHECK(tabs_->GetTabCount() == OPTIONS_PAGE_COUNT);
@@ -344,4 +380,3 @@ void ShowOptionsWindow(OptionsPage page,
OptionsWindowView::instance_->ShowOptionsPage(page, highlight_group);
}
-
« no previous file with comments | « chrome/app/resources/locale_settings_zh-TW.xtb ('k') | chrome/browser/views/options/advanced_contents_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698