| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 | 6 |
| 7 #include "chrome/browser/views/frame/browser_view.h" | 7 #include "chrome/browser/views/frame/browser_view.h" |
| 8 | 8 |
| 9 #include "chrome/app/chrome_dll_resource.h" | 9 #include "chrome/app/chrome_dll_resource.h" |
| 10 #include "chrome/app/theme/theme_resources.h" | 10 #include "chrome/app/theme/theme_resources.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } | 116 } |
| 117 | 117 |
| 118 BrowserView::~BrowserView() { | 118 BrowserView::~BrowserView() { |
| 119 browser_->tabstrip_model()->RemoveObserver(this); | 119 browser_->tabstrip_model()->RemoveObserver(this); |
| 120 | 120 |
| 121 // Stop hung plugin monitoring. | 121 // Stop hung plugin monitoring. |
| 122 ticker_.Stop(); | 122 ticker_.Stop(); |
| 123 ticker_.UnregisterTickHandler(&hung_window_detector_); | 123 ticker_.UnregisterTickHandler(&hung_window_detector_); |
| 124 } | 124 } |
| 125 | 125 |
| 126 int BrowserView::GetShowState() const { |
| 127 STARTUPINFO si = {0}; |
| 128 si.cb = sizeof(si); |
| 129 si.dwFlags = STARTF_USESHOWWINDOW; |
| 130 GetStartupInfo(&si); |
| 131 return si.wShowWindow; |
| 132 } |
| 133 |
| 126 void BrowserView::WindowMoved() { | 134 void BrowserView::WindowMoved() { |
| 127 // Cancel any tabstrip animations, some of them may be invalidated by the | 135 // Cancel any tabstrip animations, some of them may be invalidated by the |
| 128 // window being repositioned. | 136 // window being repositioned. |
| 129 // Comment out for one cycle to see if this fixes dist tests. | 137 // Comment out for one cycle to see if this fixes dist tests. |
| 130 //tabstrip_->DestroyDragController(); | 138 //tabstrip_->DestroyDragController(); |
| 131 | 139 |
| 132 status_bubble_->Reposition(); | 140 status_bubble_->Reposition(); |
| 133 | 141 |
| 134 // Close the omnibox popup, if any. | 142 // Close the omnibox popup, if any. |
| 135 if (GetLocationBarView()) | 143 if (GetLocationBarView()) |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 EnablePersonalization(CommandLine().HasSwitch(switches::kEnableP13n)); | 321 EnablePersonalization(CommandLine().HasSwitch(switches::kEnableP13n)); |
| 314 if (IsPersonalizationEnabled()) { | 322 if (IsPersonalizationEnabled()) { |
| 315 personalization_ = Personalization::CreateFramePersonalization( | 323 personalization_ = Personalization::CreateFramePersonalization( |
| 316 browser_->profile(), this); | 324 browser_->profile(), this); |
| 317 } | 325 } |
| 318 #endif | 326 #endif |
| 319 | 327 |
| 320 InitSystemMenu(); | 328 InitSystemMenu(); |
| 321 } | 329 } |
| 322 | 330 |
| 323 void BrowserView::Show(int command, bool adjust_to_fit) { | 331 void BrowserView::Show() { |
| 324 frame_->GetWindow()->Show(command); | 332 // If the window is already visible, just activate it. |
| 333 if (frame_->GetWindow()->IsVisible()) { |
| 334 frame_->GetWindow()->Activate(); |
| 335 return; |
| 336 } |
| 337 |
| 338 // Setting the focus doesn't work when the window is invisible, so any focus |
| 339 // initialization that happened before this will be lost. |
| 340 // |
| 341 // We really "should" restore the focus whenever the window becomes unhidden, |
| 342 // but I think initializing is the only time where this can happen where |
| 343 // there is some focus change we need to pick up, and this is easier than |
| 344 // plumbing through an un-hide message all the way from the frame. |
| 345 // |
| 346 // If we do find there are cases where we need to restore the focus on show, |
| 347 // that should be added and this should be removed. |
| 348 TabContents* selected_tab_contents = GetSelectedTabContents(); |
| 349 if (selected_tab_contents) |
| 350 selected_tab_contents->RestoreFocus(); |
| 351 |
| 352 frame_->GetWindow()->Show(); |
| 353 int show_state = frame_->GetWindow()->GetShowState(); |
| 354 if (show_state == SW_SHOWNORMAL || show_state == SW_SHOWMAXIMIZED) |
| 355 frame_->GetWindow()->Activate(); |
| 325 } | 356 } |
| 326 | 357 |
| 327 void BrowserView::Close() { | 358 void BrowserView::Close() { |
| 328 frame_->GetWindow()->Close(); | 359 frame_->GetWindow()->Close(); |
| 329 } | 360 } |
| 330 | 361 |
| 331 void BrowserView::Activate() { | 362 void BrowserView::Activate() { |
| 332 frame_->GetWindow()->Activate(); | 363 frame_->GetWindow()->Activate(); |
| 333 } | 364 } |
| 334 | 365 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 frame_->GetWindow()->UpdateWindowIcon(); | 402 frame_->GetWindow()->UpdateWindowIcon(); |
| 372 } | 403 } |
| 373 | 404 |
| 374 void BrowserView::ValidateThrobber() { | 405 void BrowserView::ValidateThrobber() { |
| 375 if (ShouldShowWindowIcon()) { | 406 if (ShouldShowWindowIcon()) { |
| 376 TabContents* tab_contents = browser_->GetSelectedTabContents(); | 407 TabContents* tab_contents = browser_->GetSelectedTabContents(); |
| 377 frame_->UpdateThrobber(tab_contents ? tab_contents->is_loading() : false); | 408 frame_->UpdateThrobber(tab_contents ? tab_contents->is_loading() : false); |
| 378 } | 409 } |
| 379 } | 410 } |
| 380 | 411 |
| 381 gfx::Rect BrowserView::GetNormalBounds() { | 412 gfx::Rect BrowserView::GetNormalBounds() const { |
| 382 WINDOWPLACEMENT wp; | 413 WINDOWPLACEMENT wp; |
| 383 wp.length = sizeof(wp); | 414 wp.length = sizeof(wp); |
| 384 const bool ret = !!GetWindowPlacement(frame_->GetWindow()->GetHWND(), &wp); | 415 const bool ret = !!GetWindowPlacement(frame_->GetWindow()->GetHWND(), &wp); |
| 385 DCHECK(ret); | 416 DCHECK(ret); |
| 386 return gfx::Rect(wp.rcNormalPosition); | 417 return gfx::Rect(wp.rcNormalPosition); |
| 387 } | 418 } |
| 388 | 419 |
| 389 bool BrowserView::IsMaximized() { | 420 bool BrowserView::IsMaximized() { |
| 390 return frame_->GetWindow()->IsMaximized(); | 421 return frame_->GetWindow()->IsMaximized(); |
| 391 } | 422 } |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 command_id = command_id_from_app_command; | 586 command_id = command_id_from_app_command; |
| 556 | 587 |
| 557 if (browser_->SupportsCommand(command_id)) { | 588 if (browser_->SupportsCommand(command_id)) { |
| 558 if (browser_->IsCommandEnabled(command_id)) | 589 if (browser_->IsCommandEnabled(command_id)) |
| 559 browser_->ExecuteCommand(command_id); | 590 browser_->ExecuteCommand(command_id); |
| 560 return true; | 591 return true; |
| 561 } | 592 } |
| 562 return false; | 593 return false; |
| 563 } | 594 } |
| 564 | 595 |
| 565 void BrowserView::SaveWindowPosition(const CRect& bounds, | 596 void BrowserView::SaveWindowPlacement(const gfx::Rect& bounds, |
| 566 bool maximized, | 597 bool maximized, |
| 567 bool always_on_top) { | 598 bool always_on_top) { |
| 568 browser_->SaveWindowPosition(gfx::Rect(bounds), maximized); | 599 browser_->SaveWindowPlacement(bounds, maximized); |
| 569 } | 600 } |
| 570 | 601 |
| 571 bool BrowserView::RestoreWindowPosition(CRect* bounds, | 602 bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { |
| 572 bool* maximized, | |
| 573 bool* always_on_top) { | |
| 574 DCHECK(bounds && maximized && always_on_top); | |
| 575 *always_on_top = false; | |
| 576 | |
| 577 if (browser_->type() == BrowserType::BROWSER) { | 603 if (browser_->type() == BrowserType::BROWSER) { |
| 578 // We are a popup window. The value passed in |bounds| represents two | 604 // We are a popup window. The value passed in |bounds| represents two |
| 579 // pieces of information: | 605 // pieces of information: |
| 580 // - the position of the window, in screen coordinates (outer position). | 606 // - the position of the window, in screen coordinates (outer position). |
| 581 // - the size of the content area (inner size). | 607 // - the size of the content area (inner size). |
| 582 // We need to use these values to determine the appropriate size and | 608 // We need to use these values to determine the appropriate size and |
| 583 // position of the resulting window. | 609 // position of the resulting window. |
| 584 if (SupportsWindowFeature(FEATURE_TOOLBAR) || | 610 if (SupportsWindowFeature(FEATURE_TOOLBAR) || |
| 585 SupportsWindowFeature(FEATURE_LOCATIONBAR)) { | 611 SupportsWindowFeature(FEATURE_LOCATIONBAR)) { |
| 586 // If we're showing the toolbar, we need to adjust |*bounds| to include | 612 // If we're showing the toolbar, we need to adjust |*bounds| to include |
| 587 // its desired height, since the toolbar is considered part of the | 613 // its desired height, since the toolbar is considered part of the |
| 588 // window's client area as far as GetWindowBoundsForClientBounds is | 614 // window's client area as far as GetWindowBoundsForClientBounds is |
| 589 // concerned... | 615 // concerned... |
| 590 bounds->bottom += toolbar_->GetPreferredSize().height(); | 616 bounds->set_height( |
| 617 bounds->height() + toolbar_->GetPreferredSize().height()); |
| 591 } | 618 } |
| 592 | 619 |
| 593 gfx::Rect window_rect = | 620 gfx::Rect window_rect = frame_->GetWindowBoundsForClientBounds(*bounds); |
| 594 frame_->GetWindowBoundsForClientBounds(gfx::Rect(*bounds)); | 621 window_rect.set_origin(gfx::Point(bounds->x(), bounds->y())); |
| 595 window_rect.set_origin(gfx::Point(bounds->left, bounds->top)); | |
| 596 | 622 |
| 597 // When we are given x/y coordinates of 0 on a created popup window, | 623 // When we are given x/y coordinates of 0 on a created popup window, |
| 598 // assume none were given by the window.open() command. | 624 // assume none were given by the window.open() command. |
| 599 if (window_rect.x() == 0 && window_rect.y() == 0) { | 625 if (window_rect.x() == 0 && window_rect.y() == 0) { |
| 600 gfx::Point origin = GetNormalBounds().origin(); | 626 gfx::Point origin = GetNormalBounds().origin(); |
| 601 origin.set_x(origin.x() + kWindowTilePixels); | 627 origin.set_x(origin.x() + kWindowTilePixels); |
| 602 origin.set_y(origin.y() + kWindowTilePixels); | 628 origin.set_y(origin.y() + kWindowTilePixels); |
| 603 window_rect.set_origin(origin); | 629 window_rect.set_origin(origin); |
| 604 } | 630 } |
| 605 | 631 |
| 606 *bounds = window_rect.ToRECT(); | 632 *bounds = window_rect; |
| 607 *maximized = false; | |
| 608 } else { | 633 } else { |
| 609 // TODO(beng): (http://b/1317622) Make these functions take gfx::Rects. | 634 *bounds = browser_->GetSavedWindowBounds(); |
| 610 gfx::Rect b(*bounds); | |
| 611 browser_->RestoreWindowPosition(&b, maximized); | |
| 612 *bounds = b.ToRECT(); | |
| 613 } | 635 } |
| 614 | 636 |
| 615 // We return true because we can _always_ locate reasonable bounds using the | 637 // We return true because we can _always_ locate reasonable bounds using the |
| 616 // WindowSizer, and we don't want to trigger the Window's built-in "size to | 638 // WindowSizer, and we don't want to trigger the Window's built-in "size to |
| 617 // default" handling because the browser window has no default preferred | 639 // default" handling because the browser window has no default preferred |
| 618 // size. | 640 // size. |
| 619 return true; | 641 return true; |
| 620 } | 642 } |
| 621 | 643 |
| 644 bool BrowserView::GetSavedMaximizedState(bool* maximized) const { |
| 645 *maximized = browser_->GetSavedMaximizedState(); |
| 646 return true; |
| 647 } |
| 648 |
| 622 void BrowserView::WindowClosing() { | 649 void BrowserView::WindowClosing() { |
| 623 } | 650 } |
| 624 | 651 |
| 625 views::View* BrowserView::GetContentsView() { | 652 views::View* BrowserView::GetContentsView() { |
| 626 return contents_container_; | 653 return contents_container_; |
| 627 } | 654 } |
| 628 | 655 |
| 629 views::ClientView* BrowserView::CreateClientView(views::Window* window) { | 656 views::ClientView* BrowserView::CreateClientView(views::Window* window) { |
| 630 set_window(window); | 657 set_window(window); |
| 631 return this; | 658 return this; |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 | 1196 |
| 1170 // static | 1197 // static |
| 1171 void BrowserView::InitClass() { | 1198 void BrowserView::InitClass() { |
| 1172 static bool initialized = false; | 1199 static bool initialized = false; |
| 1173 if (!initialized) { | 1200 if (!initialized) { |
| 1174 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 1201 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 1175 default_favicon_ = *rb.GetBitmapNamed(IDR_DEFAULT_FAVICON); | 1202 default_favicon_ = *rb.GetBitmapNamed(IDR_DEFAULT_FAVICON); |
| 1176 initialized = true; | 1203 initialized = true; |
| 1177 } | 1204 } |
| 1178 } | 1205 } |
| OLD | NEW |