OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "chrome/browser/views/frame/browser_view.h" | 5 #include "chrome/browser/views/frame/browser_view.h" |
6 | 6 |
7 #if defined(OS_LINUX) | 7 #if defined(OS_LINUX) |
8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
9 #endif | 9 #endif |
10 | 10 |
11 #include "app/drag_drop_types.h" | 11 #include "app/drag_drop_types.h" |
12 #include "app/gfx/canvas.h" | 12 #include "app/gfx/canvas.h" |
13 #include "app/l10n_util.h" | 13 #include "app/l10n_util.h" |
14 #include "app/os_exchange_data.h" | 14 #include "app/os_exchange_data.h" |
15 #include "app/resource_bundle.h" | 15 #include "app/resource_bundle.h" |
16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
17 #include "base/time.h" | 17 #include "base/time.h" |
18 #include "build/build_config.h" | 18 #include "build/build_config.h" |
19 #include "chrome/app/chrome_dll_resource.h" | 19 #include "chrome/app/chrome_dll_resource.h" |
20 #include "chrome/browser/app_modal_dialog_queue.h" | 20 #include "chrome/browser/app_modal_dialog_queue.h" |
21 #include "chrome/browser/bookmarks/bookmark_utils.h" | 21 #include "chrome/browser/bookmarks/bookmark_utils.h" |
22 #include "chrome/browser/browser.h" | 22 #include "chrome/browser/browser.h" |
23 #include "chrome/browser/browser_list.h" | 23 #include "chrome/browser/browser_list.h" |
24 #include "chrome/browser/browser_process.h" | 24 #include "chrome/browser/browser_process.h" |
| 25 #include "chrome/browser/debugger/devtools_window.h" |
25 #include "chrome/browser/download/download_manager.h" | 26 #include "chrome/browser/download/download_manager.h" |
26 #include "chrome/browser/find_bar.h" | 27 #include "chrome/browser/find_bar.h" |
27 #include "chrome/browser/find_bar_controller.h" | 28 #include "chrome/browser/find_bar_controller.h" |
28 #include "chrome/browser/profile.h" | 29 #include "chrome/browser/profile.h" |
29 #include "chrome/browser/view_ids.h" | 30 #include "chrome/browser/view_ids.h" |
30 #include "chrome/browser/views/bookmark_bar_view.h" | 31 #include "chrome/browser/views/bookmark_bar_view.h" |
31 #include "chrome/browser/views/browser_bubble.h" | 32 #include "chrome/browser/views/browser_bubble.h" |
32 #include "chrome/browser/views/browser_dialogs.h" | 33 #include "chrome/browser/views/browser_dialogs.h" |
33 #include "chrome/browser/views/chrome_views_delegate.h" | 34 #include "chrome/browser/views/chrome_views_delegate.h" |
34 #include "chrome/browser/views/download_shelf_view.h" | 35 #include "chrome/browser/views/download_shelf_view.h" |
(...skipping 17 matching lines...) Expand all Loading... |
52 #include "chrome/common/pref_names.h" | 53 #include "chrome/common/pref_names.h" |
53 #include "chrome/common/pref_service.h" | 54 #include "chrome/common/pref_service.h" |
54 #include "grit/app_resources.h" | 55 #include "grit/app_resources.h" |
55 #include "grit/chromium_strings.h" | 56 #include "grit/chromium_strings.h" |
56 #include "grit/generated_resources.h" | 57 #include "grit/generated_resources.h" |
57 #include "grit/theme_resources.h" | 58 #include "grit/theme_resources.h" |
58 #include "grit/webkit_resources.h" | 59 #include "grit/webkit_resources.h" |
59 #if defined(OS_WIN) | 60 #if defined(OS_WIN) |
60 #include "views/controls/scrollbar/native_scroll_bar.h" | 61 #include "views/controls/scrollbar/native_scroll_bar.h" |
61 #endif | 62 #endif |
| 63 #include "views/controls/single_split_view.h" |
62 #include "views/fill_layout.h" | 64 #include "views/fill_layout.h" |
63 #include "views/view.h" | 65 #include "views/view.h" |
64 #include "views/widget/root_view.h" | 66 #include "views/widget/root_view.h" |
65 #include "views/window/dialog_delegate.h" | 67 #include "views/window/dialog_delegate.h" |
66 #if !defined(OS_WIN) | 68 #if !defined(OS_WIN) |
67 #include "views/window/hit_test.h" | 69 #include "views/window/hit_test.h" |
68 #endif | 70 #endif |
69 #include "views/window/non_client_view.h" | 71 #include "views/window/non_client_view.h" |
70 #include "views/window/window.h" | 72 #include "views/window/window.h" |
71 | 73 |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 BrowserView::BrowserView(Browser* browser) | 272 BrowserView::BrowserView(Browser* browser) |
271 : views::ClientView(NULL, NULL), | 273 : views::ClientView(NULL, NULL), |
272 frame_(NULL), | 274 frame_(NULL), |
273 browser_(browser), | 275 browser_(browser), |
274 active_bookmark_bar_(NULL), | 276 active_bookmark_bar_(NULL), |
275 tabstrip_(NULL), | 277 tabstrip_(NULL), |
276 toolbar_(NULL), | 278 toolbar_(NULL), |
277 infobar_container_(NULL), | 279 infobar_container_(NULL), |
278 find_bar_y_(0), | 280 find_bar_y_(0), |
279 contents_container_(NULL), | 281 contents_container_(NULL), |
| 282 devtools_container_(NULL), |
| 283 contents_split_(NULL), |
280 initialized_(false), | 284 initialized_(false), |
281 ignore_layout_(false), | 285 ignore_layout_(false), |
282 #if defined(OS_WIN) | 286 #if defined(OS_WIN) |
283 hung_window_detector_(&hung_plugin_action_), | 287 hung_window_detector_(&hung_plugin_action_), |
284 ticker_(0), | 288 ticker_(0), |
285 #endif | 289 #endif |
286 extension_shelf_(NULL) { | 290 extension_shelf_(NULL) { |
287 InitClass(); | 291 InitClass(); |
288 browser_->tabstrip_model()->AddObserver(this); | 292 browser_->tabstrip_model()->AddObserver(this); |
289 } | 293 } |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 system_menu_->UpdateStates(); | 531 system_menu_->UpdateStates(); |
528 } | 532 } |
529 #endif | 533 #endif |
530 | 534 |
531 // static | 535 // static |
532 void BrowserView::RegisterBrowserViewPrefs(PrefService* prefs) { | 536 void BrowserView::RegisterBrowserViewPrefs(PrefService* prefs) { |
533 prefs->RegisterIntegerPref(prefs::kPluginMessageResponseTimeout, | 537 prefs->RegisterIntegerPref(prefs::kPluginMessageResponseTimeout, |
534 kDefaultPluginMessageResponseTimeout); | 538 kDefaultPluginMessageResponseTimeout); |
535 prefs->RegisterIntegerPref(prefs::kHungPluginDetectFrequency, | 539 prefs->RegisterIntegerPref(prefs::kHungPluginDetectFrequency, |
536 kDefaultHungPluginDetectFrequency); | 540 kDefaultHungPluginDetectFrequency); |
| 541 prefs->RegisterIntegerPref(prefs::kDevToolsSplitLocation, -1); |
537 } | 542 } |
538 | 543 |
539 void BrowserView::AttachBrowserBubble(BrowserBubble* bubble) { | 544 void BrowserView::AttachBrowserBubble(BrowserBubble* bubble) { |
540 browser_bubbles_.insert(bubble); | 545 browser_bubbles_.insert(bubble); |
541 } | 546 } |
542 | 547 |
543 void BrowserView::DetachBrowserBubble(BrowserBubble* bubble) { | 548 void BrowserView::DetachBrowserBubble(BrowserBubble* bubble) { |
544 BubbleSet::iterator it = browser_bubbles_.find(bubble); | 549 BubbleSet::iterator it = browser_bubbles_.find(bubble); |
545 if (it != browser_bubbles_.end()) | 550 if (it != browser_bubbles_.end()) |
546 browser_bubbles_.erase(it); | 551 browser_bubbles_.erase(it); |
(...skipping 16 matching lines...) Expand all Loading... |
563 // but I think initializing is the only time where this can happen where | 568 // but I think initializing is the only time where this can happen where |
564 // there is some focus change we need to pick up, and this is easier than | 569 // there is some focus change we need to pick up, and this is easier than |
565 // plumbing through an un-hide message all the way from the frame. | 570 // plumbing through an un-hide message all the way from the frame. |
566 // | 571 // |
567 // If we do find there are cases where we need to restore the focus on show, | 572 // If we do find there are cases where we need to restore the focus on show, |
568 // that should be added and this should be removed. | 573 // that should be added and this should be removed. |
569 TabContents* selected_tab_contents = GetSelectedTabContents(); | 574 TabContents* selected_tab_contents = GetSelectedTabContents(); |
570 if (selected_tab_contents) | 575 if (selected_tab_contents) |
571 selected_tab_contents->view()->RestoreFocus(); | 576 selected_tab_contents->view()->RestoreFocus(); |
572 | 577 |
| 578 // Restore split offset. |
| 579 int split_offset = g_browser_process->local_state()->GetInteger( |
| 580 prefs::kDevToolsSplitLocation); |
| 581 if (split_offset == -1) { |
| 582 // Initial load, set to default value. |
| 583 split_offset = 2 * contents_split_->height() / 3; |
| 584 } |
| 585 // Make sure user can see both panes. |
| 586 int min_split_size = contents_split_->height() / 10; |
| 587 split_offset = std::min(contents_split_->height() - min_split_size, |
| 588 std::max(min_split_size, split_offset)); |
| 589 contents_split_->set_divider_offset(split_offset); |
| 590 |
573 frame_->GetWindow()->Show(); | 591 frame_->GetWindow()->Show(); |
574 } | 592 } |
575 | 593 |
576 void BrowserView::SetBounds(const gfx::Rect& bounds) { | 594 void BrowserView::SetBounds(const gfx::Rect& bounds) { |
577 GetWidget()->SetBounds(bounds); | 595 GetWidget()->SetBounds(bounds); |
578 } | 596 } |
579 | 597 |
580 void BrowserView::Close() { | 598 void BrowserView::Close() { |
581 frame_->GetWindow()->Close(); | 599 frame_->GetWindow()->Close(); |
582 | 600 |
583 BubbleSet::iterator bubble = browser_bubbles_.begin(); | 601 BubbleSet::iterator bubble = browser_bubbles_.begin(); |
584 for (; bubble != browser_bubbles_.end(); ++bubble) { | 602 for (; bubble != browser_bubbles_.end(); ++bubble) { |
585 (*bubble)->BrowserWindowClosed(); | 603 (*bubble)->BrowserWindowClosed(); |
586 } | 604 } |
| 605 |
| 606 g_browser_process->local_state()->SetInteger( |
| 607 prefs::kDevToolsSplitLocation, contents_split_->divider_offset()); |
587 } | 608 } |
588 | 609 |
589 void BrowserView::Activate() { | 610 void BrowserView::Activate() { |
590 frame_->GetWindow()->Activate(); | 611 frame_->GetWindow()->Activate(); |
591 } | 612 } |
592 | 613 |
593 bool BrowserView::IsActive() const { | 614 bool BrowserView::IsActive() const { |
594 return frame_->GetWindow()->IsActive(); | 615 return frame_->GetWindow()->IsActive(); |
595 } | 616 } |
596 | 617 |
(...skipping 27 matching lines...) Expand all Loading... |
624 #endif | 645 #endif |
625 } | 646 } |
626 | 647 |
627 void BrowserView::SelectedTabToolbarSizeChanged(bool is_animating) { | 648 void BrowserView::SelectedTabToolbarSizeChanged(bool is_animating) { |
628 if (is_animating) { | 649 if (is_animating) { |
629 contents_container_->SetFastResize(true); | 650 contents_container_->SetFastResize(true); |
630 UpdateUIForContents(browser_->GetSelectedTabContents()); | 651 UpdateUIForContents(browser_->GetSelectedTabContents()); |
631 contents_container_->SetFastResize(false); | 652 contents_container_->SetFastResize(false); |
632 } else { | 653 } else { |
633 UpdateUIForContents(browser_->GetSelectedTabContents()); | 654 UpdateUIForContents(browser_->GetSelectedTabContents()); |
634 contents_container_->Layout(); | 655 contents_split_->Layout(); |
635 } | 656 } |
636 } | 657 } |
637 | 658 |
638 void BrowserView::UpdateTitleBar() { | 659 void BrowserView::UpdateTitleBar() { |
639 frame_->GetWindow()->UpdateWindowTitle(); | 660 frame_->GetWindow()->UpdateWindowTitle(); |
640 if (ShouldShowWindowIcon()) | 661 if (ShouldShowWindowIcon()) |
641 frame_->GetWindow()->UpdateWindowIcon(); | 662 frame_->GetWindow()->UpdateWindowIcon(); |
642 } | 663 } |
643 | 664 |
644 void BrowserView::UpdateDevTools() { | 665 void BrowserView::UpdateDevTools() { |
645 NOTIMPLEMENTED(); | 666 UpdateDevToolsForContents(GetSelectedTabContents()); |
| 667 Layout(); |
646 } | 668 } |
647 | 669 |
648 void BrowserView::UpdateLoadingAnimations(bool should_animate) { | 670 void BrowserView::UpdateLoadingAnimations(bool should_animate) { |
649 if (should_animate) { | 671 if (should_animate) { |
650 if (!loading_animation_timer_.IsRunning()) { | 672 if (!loading_animation_timer_.IsRunning()) { |
651 // Loads are happening, and the timer isn't running, so start it. | 673 // Loads are happening, and the timer isn't running, so start it. |
652 loading_animation_timer_.Start( | 674 loading_animation_timer_.Start( |
653 TimeDelta::FromMilliseconds(kLoadingAnimationFrameTimeMs), this, | 675 TimeDelta::FromMilliseconds(kLoadingAnimationFrameTimeMs), this, |
654 &BrowserView::LoadingAnimationCallback); | 676 &BrowserView::LoadingAnimationCallback); |
655 } | 677 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
793 | 815 |
794 // We don't specify a resize corner size if we have a bottom shelf either. | 816 // We don't specify a resize corner size if we have a bottom shelf either. |
795 // This is because we take care of drawing the resize corner on top of that | 817 // This is because we take care of drawing the resize corner on top of that |
796 // shelf, so we don't want others to do it for us in this case. | 818 // shelf, so we don't want others to do it for us in this case. |
797 // Currently, the only visible bottom shelf is the download shelf. | 819 // Currently, the only visible bottom shelf is the download shelf. |
798 // Other tests should be added here if we add more bottom shelves. | 820 // Other tests should be added here if we add more bottom shelves. |
799 if (download_shelf_.get() && download_shelf_->IsShowing()) { | 821 if (download_shelf_.get() && download_shelf_->IsShowing()) { |
800 return gfx::Rect(); | 822 return gfx::Rect(); |
801 } | 823 } |
802 | 824 |
803 gfx::Rect client_rect = contents_container_->bounds(); | 825 gfx::Rect client_rect = contents_split_->bounds(); |
804 gfx::Size resize_corner_size = ResizeCorner::GetSize(); | 826 gfx::Size resize_corner_size = ResizeCorner::GetSize(); |
805 int x = client_rect.width() - resize_corner_size.width(); | 827 int x = client_rect.width() - resize_corner_size.width(); |
806 if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) | 828 if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) |
807 x = 0; | 829 x = 0; |
808 return gfx::Rect(x, client_rect.height() - resize_corner_size.height(), | 830 return gfx::Rect(x, client_rect.height() - resize_corner_size.height(), |
809 resize_corner_size.width(), resize_corner_size.height()); | 831 resize_corner_size.width(), resize_corner_size.height()); |
810 } | 832 } |
811 | 833 |
812 void BrowserView::DisableInactiveFrame() { | 834 void BrowserView::DisableInactiveFrame() { |
813 frame_->GetWindow()->DisableInactiveRendering(); | 835 frame_->GetWindow()->DisableInactiveRendering(); |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 void BrowserView::TabDetachedAt(TabContents* contents, int index) { | 994 void BrowserView::TabDetachedAt(TabContents* contents, int index) { |
973 // We use index here rather than comparing |contents| because by this time | 995 // We use index here rather than comparing |contents| because by this time |
974 // the model has already removed |contents| from its list, so | 996 // the model has already removed |contents| from its list, so |
975 // browser_->GetSelectedTabContents() will return NULL or something else. | 997 // browser_->GetSelectedTabContents() will return NULL or something else. |
976 if (index == browser_->tabstrip_model()->selected_index()) { | 998 if (index == browser_->tabstrip_model()->selected_index()) { |
977 // We need to reset the current tab contents to NULL before it gets | 999 // We need to reset the current tab contents to NULL before it gets |
978 // freed. This is because the focus manager performs some operations | 1000 // freed. This is because the focus manager performs some operations |
979 // on the selected TabContents when it is removed. | 1001 // on the selected TabContents when it is removed. |
980 infobar_container_->ChangeTabContents(NULL); | 1002 infobar_container_->ChangeTabContents(NULL); |
981 contents_container_->ChangeTabContents(NULL); | 1003 contents_container_->ChangeTabContents(NULL); |
| 1004 UpdateDevToolsForContents(NULL); |
982 } | 1005 } |
983 } | 1006 } |
984 | 1007 |
985 void BrowserView::TabDeselectedAt(TabContents* contents, int index) { | 1008 void BrowserView::TabDeselectedAt(TabContents* contents, int index) { |
986 // We do not store the focus when closing the tab to work-around bug 4633. | 1009 // We do not store the focus when closing the tab to work-around bug 4633. |
987 // Some reports seem to show that the focus manager and/or focused view can | 1010 // Some reports seem to show that the focus manager and/or focused view can |
988 // be garbage at that point, it is not clear why. | 1011 // be garbage at that point, it is not clear why. |
989 if (!contents->is_being_destroyed()) | 1012 if (!contents->is_being_destroyed()) |
990 contents->view()->StoreFocus(); | 1013 contents->view()->StoreFocus(); |
991 } | 1014 } |
992 | 1015 |
993 void BrowserView::TabSelectedAt(TabContents* old_contents, | 1016 void BrowserView::TabSelectedAt(TabContents* old_contents, |
994 TabContents* new_contents, | 1017 TabContents* new_contents, |
995 int index, | 1018 int index, |
996 bool user_gesture) { | 1019 bool user_gesture) { |
997 DCHECK(old_contents != new_contents); | 1020 DCHECK(old_contents != new_contents); |
998 | 1021 |
999 // Update various elements that are interested in knowing the current | 1022 // Update various elements that are interested in knowing the current |
1000 // TabContents. | 1023 // TabContents. |
1001 infobar_container_->ChangeTabContents(new_contents); | 1024 infobar_container_->ChangeTabContents(new_contents); |
1002 contents_container_->ChangeTabContents(new_contents); | 1025 contents_container_->ChangeTabContents(new_contents); |
| 1026 UpdateDevToolsForContents(new_contents); |
1003 // TODO(beng): This should be called automatically by ChangeTabContents, but I | 1027 // TODO(beng): This should be called automatically by ChangeTabContents, but I |
1004 // am striving for parity now rather than cleanliness. This is | 1028 // am striving for parity now rather than cleanliness. This is |
1005 // required to make features like Duplicate Tab, Undo Close Tab, | 1029 // required to make features like Duplicate Tab, Undo Close Tab, |
1006 // etc not result in sad tab. | 1030 // etc not result in sad tab. |
1007 new_contents->DidBecomeSelected(); | 1031 new_contents->DidBecomeSelected(); |
1008 if (BrowserList::GetLastActive() == browser_ && | 1032 if (BrowserList::GetLastActive() == browser_ && |
1009 !browser_->tabstrip_model()->closing_all() && GetWindow()->IsVisible()) { | 1033 !browser_->tabstrip_model()->closing_all() && GetWindow()->IsVisible()) { |
1010 // We only restore focus if our window is visible, to avoid invoking blur | 1034 // We only restore focus if our window is visible, to avoid invoking blur |
1011 // handlers when we are eventually shown. | 1035 // handlers when we are eventually shown. |
1012 new_contents->view()->RestoreFocus(); | 1036 new_contents->view()->RestoreFocus(); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 toolbar_->GetMinimumSize() : gfx::Size()); | 1339 toolbar_->GetMinimumSize() : gfx::Size()); |
1316 if (tabstrip_size.height() && toolbar_size.height()) | 1340 if (tabstrip_size.height() && toolbar_size.height()) |
1317 toolbar_size.Enlarge(0, -kToolbarTabStripVerticalOverlap); | 1341 toolbar_size.Enlarge(0, -kToolbarTabStripVerticalOverlap); |
1318 gfx::Size bookmark_bar_size; | 1342 gfx::Size bookmark_bar_size; |
1319 if (active_bookmark_bar_ && | 1343 if (active_bookmark_bar_ && |
1320 browser_->SupportsWindowFeature(Browser::FEATURE_BOOKMARKBAR)) { | 1344 browser_->SupportsWindowFeature(Browser::FEATURE_BOOKMARKBAR)) { |
1321 bookmark_bar_size = active_bookmark_bar_->GetMinimumSize(); | 1345 bookmark_bar_size = active_bookmark_bar_->GetMinimumSize(); |
1322 bookmark_bar_size.Enlarge(0, | 1346 bookmark_bar_size.Enlarge(0, |
1323 -kSeparationLineHeight - bookmark_bar_view_->GetToolbarOverlap(true)); | 1347 -kSeparationLineHeight - bookmark_bar_view_->GetToolbarOverlap(true)); |
1324 } | 1348 } |
1325 gfx::Size contents_size(contents_container_->GetMinimumSize()); | 1349 gfx::Size contents_size(contents_split_->GetMinimumSize()); |
1326 | 1350 |
1327 int min_height = tabstrip_size.height() + toolbar_size.height() + | 1351 int min_height = tabstrip_size.height() + toolbar_size.height() + |
1328 bookmark_bar_size.height() + contents_size.height(); | 1352 bookmark_bar_size.height() + contents_size.height(); |
1329 int widths[] = { tabstrip_size.width(), toolbar_size.width(), | 1353 int widths[] = { tabstrip_size.width(), toolbar_size.width(), |
1330 bookmark_bar_size.width(), contents_size.width() }; | 1354 bookmark_bar_size.width(), contents_size.width() }; |
1331 int min_width = *std::max_element(&widths[0], &widths[arraysize(widths)]); | 1355 int min_width = *std::max_element(&widths[0], &widths[arraysize(widths)]); |
1332 return gfx::Size(min_width, min_height); | 1356 return gfx::Size(min_width, min_height); |
1333 } | 1357 } |
1334 | 1358 |
1335 /////////////////////////////////////////////////////////////////////////////// | 1359 /////////////////////////////////////////////////////////////////////////////// |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1405 AddChildView(toolbar_); | 1429 AddChildView(toolbar_); |
1406 toolbar_->SetID(VIEW_ID_TOOLBAR); | 1430 toolbar_->SetID(VIEW_ID_TOOLBAR); |
1407 toolbar_->Init(browser_->profile()); | 1431 toolbar_->Init(browser_->profile()); |
1408 toolbar_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_TOOLBAR)); | 1432 toolbar_->SetAccessibleName(l10n_util::GetString(IDS_ACCNAME_TOOLBAR)); |
1409 | 1433 |
1410 infobar_container_ = new InfoBarContainer(this); | 1434 infobar_container_ = new InfoBarContainer(this); |
1411 AddChildView(infobar_container_); | 1435 AddChildView(infobar_container_); |
1412 | 1436 |
1413 contents_container_ = new TabContentsContainer; | 1437 contents_container_ = new TabContentsContainer; |
1414 set_contents_view(contents_container_); | 1438 set_contents_view(contents_container_); |
1415 AddChildView(contents_container_); | 1439 |
| 1440 devtools_container_ = new TabContentsContainer; |
| 1441 contents_split_ = new views::SingleSplitView( |
| 1442 contents_container_, |
| 1443 devtools_container_, |
| 1444 views::SingleSplitView::VERTICAL_SPLIT); |
| 1445 |
| 1446 AddChildView(contents_split_); |
1416 | 1447 |
1417 status_bubble_.reset(new StatusBubbleViews(GetWidget())); | 1448 status_bubble_.reset(new StatusBubbleViews(GetWidget())); |
1418 | 1449 |
1419 extension_shelf_ = new ExtensionShelf(browser_.get()); | 1450 extension_shelf_ = new ExtensionShelf(browser_.get()); |
1420 AddChildView(extension_shelf_); | 1451 AddChildView(extension_shelf_); |
1421 | 1452 |
1422 #if defined(OS_WIN) | 1453 #if defined(OS_WIN) |
1423 InitSystemMenu(); | 1454 InitSystemMenu(); |
1424 #endif | 1455 #endif |
1425 } | 1456 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1500 | 1531 |
1501 int BrowserView::LayoutInfoBar(int top) { | 1532 int BrowserView::LayoutInfoBar(int top) { |
1502 bool visible = browser_->SupportsWindowFeature(Browser::FEATURE_INFOBAR); | 1533 bool visible = browser_->SupportsWindowFeature(Browser::FEATURE_INFOBAR); |
1503 int height = visible ? infobar_container_->GetPreferredSize().height() : 0; | 1534 int height = visible ? infobar_container_->GetPreferredSize().height() : 0; |
1504 infobar_container_->SetVisible(visible); | 1535 infobar_container_->SetVisible(visible); |
1505 infobar_container_->SetBounds(0, top, width(), height); | 1536 infobar_container_->SetBounds(0, top, width(), height); |
1506 return top + height; | 1537 return top + height; |
1507 } | 1538 } |
1508 | 1539 |
1509 void BrowserView::LayoutTabContents(int top, int bottom) { | 1540 void BrowserView::LayoutTabContents(int top, int bottom) { |
1510 contents_container_->SetBounds(0, top, width(), bottom - top); | 1541 contents_split_->SetBounds(0, top, width(), bottom - top); |
1511 } | 1542 } |
1512 | 1543 |
1513 int BrowserView::LayoutDownloadShelf(int bottom) { | 1544 int BrowserView::LayoutDownloadShelf(int bottom) { |
1514 if (IsDownloadShelfVisible()) { | 1545 if (IsDownloadShelfVisible()) { |
1515 bool visible = browser_->SupportsWindowFeature( | 1546 bool visible = browser_->SupportsWindowFeature( |
1516 Browser::FEATURE_DOWNLOADSHELF); | 1547 Browser::FEATURE_DOWNLOADSHELF); |
1517 DCHECK(download_shelf_.get()); | 1548 DCHECK(download_shelf_.get()); |
1518 int height = visible ? download_shelf_->GetPreferredSize().height() : 0; | 1549 int height = visible ? download_shelf_->GetPreferredSize().height() : 0; |
1519 download_shelf_->SetVisible(visible); | 1550 download_shelf_->SetVisible(visible); |
1520 download_shelf_->SetBounds(0, bottom - height, width(), height); | 1551 download_shelf_->SetBounds(0, bottom - height, width(), height); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1567 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_); | 1598 return UpdateChildViewAndLayout(new_bookmark_bar_view, &active_bookmark_bar_); |
1568 } | 1599 } |
1569 | 1600 |
1570 bool BrowserView::MaybeShowInfoBar(TabContents* contents) { | 1601 bool BrowserView::MaybeShowInfoBar(TabContents* contents) { |
1571 // TODO(beng): Remove this function once the interface between | 1602 // TODO(beng): Remove this function once the interface between |
1572 // InfoBarContainer, DownloadShelfView and TabContents and this | 1603 // InfoBarContainer, DownloadShelfView and TabContents and this |
1573 // view is sorted out. | 1604 // view is sorted out. |
1574 return true; | 1605 return true; |
1575 } | 1606 } |
1576 | 1607 |
| 1608 void BrowserView::UpdateDevToolsForContents(TabContents* tab_contents) { |
| 1609 TabContents* devtools_contents = |
| 1610 DevToolsWindow::GetDevToolsContents(tab_contents); |
| 1611 devtools_container_->ChangeTabContents(devtools_contents); |
| 1612 devtools_container_->SetVisible(devtools_contents != NULL); |
| 1613 } |
| 1614 |
1577 void BrowserView::UpdateUIForContents(TabContents* contents) { | 1615 void BrowserView::UpdateUIForContents(TabContents* contents) { |
1578 bool needs_layout = MaybeShowBookmarkBar(contents); | 1616 bool needs_layout = MaybeShowBookmarkBar(contents); |
1579 needs_layout |= MaybeShowInfoBar(contents); | 1617 needs_layout |= MaybeShowInfoBar(contents); |
1580 if (needs_layout) | 1618 if (needs_layout) |
1581 Layout(); | 1619 Layout(); |
1582 } | 1620 } |
1583 | 1621 |
1584 bool BrowserView::UpdateChildViewAndLayout(views::View* new_view, | 1622 bool BrowserView::UpdateChildViewAndLayout(views::View* new_view, |
1585 views::View** old_view) { | 1623 views::View** old_view) { |
1586 DCHECK(old_view); | 1624 DCHECK(old_view); |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1812 | 1850 |
1813 // static | 1851 // static |
1814 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { | 1852 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { |
1815 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); | 1853 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); |
1816 } | 1854 } |
1817 | 1855 |
1818 // static | 1856 // static |
1819 void BrowserList::AllBrowsersClosed() { | 1857 void BrowserList::AllBrowsersClosed() { |
1820 views::Window::CloseAllSecondaryWindows(); | 1858 views::Window::CloseAllSecondaryWindows(); |
1821 } | 1859 } |
OLD | NEW |