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

Side by Side Diff: views/controls/tabbed_pane/native_tabbed_pane_gtk.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, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/controls/tabbed_pane/native_tabbed_pane_gtk.h" 5 #include "views/controls/tabbed_pane/native_tabbed_pane_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "app/resource_bundle.h" 9 #include "app/resource_bundle.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 WidgetGtk* widget = WidgetGtk::GetViewForNative(page); 68 WidgetGtk* widget = WidgetGtk::GetViewForNative(page);
69 69
70 // detach the content view from widget so that we can delete widget 70 // detach the content view from widget so that we can delete widget
71 // without destroying the content view. 71 // without destroying the content view.
72 View* removed_tab = GetTabViewAt(index); 72 View* removed_tab = GetTabViewAt(index);
73 widget->GetRootView()->RemoveChildView(removed_tab); 73 widget->GetRootView()->RemoveChildView(removed_tab);
74 74
75 // widget delete itself when native_view is deleted. 75 // widget delete itself when native_view is deleted.
76 gtk_notebook_remove_page(GTK_NOTEBOOK(native_view()), index); 76 gtk_notebook_remove_page(GTK_NOTEBOOK(native_view()), index);
77 77
78 // Removing a tab might change the size of the tabbed pane.
79 RootView* root_view = GetRootView();
80 if (root_view)
81 GetRootView()->Layout();
82
78 return removed_tab; 83 return removed_tab;
79 } 84 }
80 85
81 void NativeTabbedPaneGtk::SelectTabAt(int index) { 86 void NativeTabbedPaneGtk::SelectTabAt(int index) {
82 DCHECK((index >= 0) && (index < GetTabCount())); 87 DCHECK((index >= 0) && (index < GetTabCount()));
83 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), index); 88 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), index);
84 } 89 }
85 90
86 int NativeTabbedPaneGtk::GetTabCount() { 91 int NativeTabbedPaneGtk::GetTabCount() {
87 return gtk_notebook_get_n_pages(GTK_NOTEBOOK(native_view())); 92 return gtk_notebook_get_n_pages(GTK_NOTEBOOK(native_view()));
88 } 93 }
89 94
90 int NativeTabbedPaneGtk::GetSelectedTabIndex() { 95 int NativeTabbedPaneGtk::GetSelectedTabIndex() {
91 return gtk_notebook_get_current_page(GTK_NOTEBOOK(native_view())); 96 return gtk_notebook_get_current_page(GTK_NOTEBOOK(native_view()));
92 } 97 }
93 98
94 View* NativeTabbedPaneGtk::GetSelectedTab() { 99 View* NativeTabbedPaneGtk::GetSelectedTab() {
95 return GetTabViewAt(GetSelectedTabIndex()); 100 return GetTabViewAt(GetSelectedTabIndex());
96 } 101 }
97 102
98 View* NativeTabbedPaneGtk::GetView() { 103 View* NativeTabbedPaneGtk::GetView() {
99 return this; 104 return this;
100 } 105 }
101 106
102 void NativeTabbedPaneGtk::SetFocus() { 107 void NativeTabbedPaneGtk::SetFocus() {
103 Focus(); 108 Focus();
104 } 109 }
105 110
111 gfx::Size NativeTabbedPaneGtk::GetPreferredSize() {
112 if (!native_view())
113 return gfx::Size();
114
115 // For some strange reason (or maybe it's a bug), the requisition is not
116 // returned in the passed requisition parameter, but instead written to the
117 // widget's requisition field.
118 GtkRequisition requisition = { 0, 0 };
119 gtk_widget_size_request(GTK_WIDGET(native_view()), &requisition);
120 GtkRequisition& size(GTK_WIDGET(native_view())->requisition);
121 return gfx::Size(size.width, size.height);
122 }
123
106 gfx::NativeView NativeTabbedPaneGtk::GetTestingHandle() const { 124 gfx::NativeView NativeTabbedPaneGtk::GetTestingHandle() const {
107 return native_view(); 125 return native_view();
108 } 126 }
109 127
110 //////////////////////////////////////////////////////////////////////////////// 128 ////////////////////////////////////////////////////////////////////////////////
111 // NativeTabbedPaneGtk, NativeControlGtk override: 129 // NativeTabbedPaneGtk, NativeControlGtk override:
112 130
113 void NativeTabbedPaneGtk::CreateNativeControl() { 131 void NativeTabbedPaneGtk::CreateNativeControl() {
114 GtkWidget* widget = gtk_notebook_new(); 132 GtkWidget* widget = gtk_notebook_new();
115 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widget), GTK_POS_TOP); 133 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widget), GTK_POS_TOP);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 GtkWidget* label = gtk_label_new(WideToUTF8(title).c_str()); 177 GtkWidget* label = gtk_label_new(WideToUTF8(title).c_str());
160 gtk_widget_show(label); 178 gtk_widget_show(label);
161 gtk_notebook_insert_page(GTK_NOTEBOOK(native_view()), 179 gtk_notebook_insert_page(GTK_NOTEBOOK(native_view()),
162 page, 180 page,
163 label, 181 label,
164 index); 182 index);
165 g_object_unref(page); 183 g_object_unref(page);
166 184
167 if (tab_count == 0 && select_if_first_tab) 185 if (tab_count == 0 && select_if_first_tab)
168 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), 0); 186 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), 0);
187
188 // Relayout the hierarchy, since the added tab might require more space.
189 RootView* root_view = GetRootView();
190 if (root_view)
191 GetRootView()->Layout();
169 } 192 }
170 193
171 WidgetGtk* NativeTabbedPaneGtk::GetWidgetAt(int index) { 194 WidgetGtk* NativeTabbedPaneGtk::GetWidgetAt(int index) {
172 DCHECK(index <= GetTabCount()); 195 DCHECK(index <= GetTabCount());
173 GtkWidget* page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()), 196 GtkWidget* page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()),
174 index); 197 index);
175 WidgetGtk* widget = WidgetGtk::GetViewForNative(page); 198 WidgetGtk* widget = WidgetGtk::GetViewForNative(page);
176 DCHECK(widget); 199 DCHECK(widget);
177 return widget; 200 return widget;
178 } 201 }
(...skipping 21 matching lines...) Expand all
200 //////////////////////////////////////////////////////////////////////////////// 223 ////////////////////////////////////////////////////////////////////////////////
201 // NativeTabbedPaneWrapper, public: 224 // NativeTabbedPaneWrapper, public:
202 225
203 // static 226 // static
204 NativeTabbedPaneWrapper* NativeTabbedPaneWrapper::CreateNativeWrapper( 227 NativeTabbedPaneWrapper* NativeTabbedPaneWrapper::CreateNativeWrapper(
205 TabbedPane* tabbed_pane) { 228 TabbedPane* tabbed_pane) {
206 return new NativeTabbedPaneGtk(tabbed_pane); 229 return new NativeTabbedPaneGtk(tabbed_pane);
207 } 230 }
208 231
209 } // namespace views 232 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/tabbed_pane/native_tabbed_pane_gtk.h ('k') | views/controls/tabbed_pane/native_tabbed_pane_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698