| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/stl_util-inl.h" | 10 #include "base/stl_util-inl.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 // We are the last tab, select the previous one. | 70 // We are the last tab, select the previous one. |
| 71 if (index > 0) { | 71 if (index > 0) { |
| 72 SelectTabAt(index - 1); | 72 SelectTabAt(index - 1); |
| 73 } else { | 73 } else { |
| 74 // last tab. nothing to select. | 74 // last tab. nothing to select. |
| 75 } | 75 } |
| 76 } | 76 } |
| 77 | 77 |
| 78 GtkWidget* page = | 78 GtkWidget* page = |
| 79 gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()), index); | 79 gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()), index); |
| 80 WidgetGtk* widget = | 80 Widget* widget = |
| 81 static_cast<WidgetGtk*>(NativeWidget::GetNativeWidgetForNativeView(page)); | 81 NativeWidget::GetNativeWidgetForNativeView(page)->GetWidget(); |
| 82 | 82 |
| 83 // detach the content view from widget so that we can delete widget | 83 // detach the content view from widget so that we can delete widget |
| 84 // without destroying the content view. | 84 // without destroying the content view. |
| 85 View* removed_tab = GetTabViewAt(index); | 85 View* removed_tab = GetTabViewAt(index); |
| 86 widget->GetRootView()->RemoveChildView(removed_tab); | 86 widget->GetRootView()->RemoveChildView(removed_tab); |
| 87 | 87 |
| 88 // widget delete itself when native_view is deleted. | 88 // widget delete itself when native_view is deleted. |
| 89 gtk_notebook_remove_page(GTK_NOTEBOOK(native_view()), index); | 89 gtk_notebook_remove_page(GTK_NOTEBOOK(native_view()), index); |
| 90 | 90 |
| 91 // Removing a tab might change the size of the tabbed pane. | 91 // Removing a tab might change the size of the tabbed pane. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 | 147 |
| 148 //////////////////////////////////////////////////////////////////////////////// | 148 //////////////////////////////////////////////////////////////////////////////// |
| 149 // NativeTabbedPaneGtk, private: | 149 // NativeTabbedPaneGtk, private: |
| 150 void NativeTabbedPaneGtk::DoAddTabAtIndex(int index, | 150 void NativeTabbedPaneGtk::DoAddTabAtIndex(int index, |
| 151 const std::wstring& title, | 151 const std::wstring& title, |
| 152 View* contents, | 152 View* contents, |
| 153 bool select_if_first_tab) { | 153 bool select_if_first_tab) { |
| 154 int tab_count = GetTabCount(); | 154 int tab_count = GetTabCount(); |
| 155 DCHECK(index <= tab_count); | 155 DCHECK(index <= tab_count); |
| 156 | 156 |
| 157 Widget* page_container = Widget::CreateWidget(); | 157 Widget* page_container = new Widget; |
| 158 page_container->Init( | 158 page_container->Init( |
| 159 Widget::InitParams(Widget::InitParams::TYPE_CONTROL)); | 159 Widget::InitParams(Widget::InitParams::TYPE_CONTROL)); |
| 160 page_container->SetContentsView(contents); | 160 page_container->SetContentsView(contents); |
| 161 page_container->SetFocusTraversableParent(GetWidget()->GetFocusTraversable()); | 161 page_container->SetFocusTraversableParent(GetWidget()->GetFocusTraversable()); |
| 162 page_container->SetFocusTraversableParentView(this); | 162 page_container->SetFocusTraversableParentView(this); |
| 163 page_container->Show(); | 163 page_container->Show(); |
| 164 | 164 |
| 165 if (!contents->background()) { | 165 if (!contents->background()) { |
| 166 GtkStyle* window_style = | 166 GtkStyle* window_style = |
| 167 gtk_widget_get_style(page_container->GetNativeView()); | 167 gtk_widget_get_style(page_container->GetNativeView()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 188 | 188 |
| 189 if (tab_count == 0 && select_if_first_tab) | 189 if (tab_count == 0 && select_if_first_tab) |
| 190 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), 0); | 190 gtk_notebook_set_current_page(GTK_NOTEBOOK(native_view()), 0); |
| 191 | 191 |
| 192 // Relayout the hierarchy, since the added tab might require more space. | 192 // Relayout the hierarchy, since the added tab might require more space. |
| 193 RootView* root_view = GetRootView(); | 193 RootView* root_view = GetRootView(); |
| 194 if (root_view) | 194 if (root_view) |
| 195 GetRootView()->Layout(); | 195 GetRootView()->Layout(); |
| 196 } | 196 } |
| 197 | 197 |
| 198 WidgetGtk* NativeTabbedPaneGtk::GetWidgetAt(int index) { | 198 Widget* NativeTabbedPaneGtk::GetWidgetAt(int index) { |
| 199 DCHECK(index <= GetTabCount()); | 199 DCHECK(index <= GetTabCount()); |
| 200 GtkWidget* page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()), | 200 GtkWidget* page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(native_view()), |
| 201 index); | 201 index); |
| 202 WidgetGtk* widget = | 202 Widget* widget = |
| 203 static_cast<WidgetGtk*>(NativeWidget::GetNativeWidgetForNativeView(page)); | 203 NativeWidget::GetNativeWidgetForNativeView(page)->GetWidget(); |
| 204 DCHECK(widget); | 204 DCHECK(widget); |
| 205 return widget; | 205 return widget; |
| 206 } | 206 } |
| 207 | 207 |
| 208 View* NativeTabbedPaneGtk::GetTabViewAt(int index) { | 208 View* NativeTabbedPaneGtk::GetTabViewAt(int index) { |
| 209 WidgetGtk* widget = GetWidgetAt(index); | 209 Widget* widget = GetWidgetAt(index); |
| 210 DCHECK(widget && widget->GetRootView()->child_count() == 1); | 210 DCHECK(widget && widget->GetRootView()->child_count() == 1); |
| 211 return widget->GetRootView()->GetChildViewAt(0); | 211 return widget->GetRootView()->GetChildViewAt(0); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void NativeTabbedPaneGtk::OnSwitchPage(int selected_tab_index) { | 214 void NativeTabbedPaneGtk::OnSwitchPage(int selected_tab_index) { |
| 215 TabbedPaneListener* listener = tabbed_pane_->listener(); | 215 TabbedPaneListener* listener = tabbed_pane_->listener(); |
| 216 if (listener != NULL) | 216 if (listener != NULL) |
| 217 listener->TabSelectedAt(selected_tab_index); | 217 listener->TabSelectedAt(selected_tab_index); |
| 218 } | 218 } |
| 219 | 219 |
| 220 // static | 220 // static |
| 221 void NativeTabbedPaneGtk::CallSwitchPage(GtkNotebook* widget, | 221 void NativeTabbedPaneGtk::CallSwitchPage(GtkNotebook* widget, |
| 222 GtkNotebookPage* page, | 222 GtkNotebookPage* page, |
| 223 guint selected_tab_index, | 223 guint selected_tab_index, |
| 224 NativeTabbedPaneGtk* tabbed_pane) { | 224 NativeTabbedPaneGtk* tabbed_pane) { |
| 225 tabbed_pane->OnSwitchPage(selected_tab_index); | 225 tabbed_pane->OnSwitchPage(selected_tab_index); |
| 226 } | 226 } |
| 227 | 227 |
| 228 //////////////////////////////////////////////////////////////////////////////// | 228 //////////////////////////////////////////////////////////////////////////////// |
| 229 // NativeTabbedPaneWrapper, public: | 229 // NativeTabbedPaneWrapper, public: |
| 230 | 230 |
| 231 // static | 231 // static |
| 232 NativeTabbedPaneWrapper* NativeTabbedPaneWrapper::CreateNativeWrapper( | 232 NativeTabbedPaneWrapper* NativeTabbedPaneWrapper::CreateNativeWrapper( |
| 233 TabbedPane* tabbed_pane) { | 233 TabbedPane* tabbed_pane) { |
| 234 return new NativeTabbedPaneGtk(tabbed_pane); | 234 return new NativeTabbedPaneGtk(tabbed_pane); |
| 235 } | 235 } |
| 236 | 236 |
| 237 } // namespace views | 237 } // namespace views |
| OLD | NEW |