| 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 "chrome/browser/ui/views/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 6 | 6 |
| 7 #if defined(TOOLKIT_USES_GTK) | 7 #if defined(TOOLKIT_USES_GTK) |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 #include "views/controls/single_split_view.h" | 98 #include "views/controls/single_split_view.h" |
| 99 #include "views/events/event.h" | 99 #include "views/events/event.h" |
| 100 #include "views/focus/external_focus_tracker.h" | 100 #include "views/focus/external_focus_tracker.h" |
| 101 #include "views/focus/view_storage.h" | 101 #include "views/focus/view_storage.h" |
| 102 #include "views/layout/grid_layout.h" | 102 #include "views/layout/grid_layout.h" |
| 103 #include "views/widget/native_widget.h" | 103 #include "views/widget/native_widget.h" |
| 104 #include "views/widget/root_view.h" | 104 #include "views/widget/root_view.h" |
| 105 #include "views/widget/widget.h" | 105 #include "views/widget/widget.h" |
| 106 #include "views/window/dialog_delegate.h" | 106 #include "views/window/dialog_delegate.h" |
| 107 | 107 |
| 108 #if defined(OS_WIN) | 108 #if defined(USE_AURA) |
| 109 #elif defined(OS_WIN) |
| 109 #include "chrome/browser/aeropeek_manager.h" | 110 #include "chrome/browser/aeropeek_manager.h" |
| 110 #include "chrome/browser/jumplist_win.h" | 111 #include "chrome/browser/jumplist_win.h" |
| 111 #include "ui/base/message_box_win.h" | 112 #include "ui/base/message_box_win.h" |
| 112 #include "ui/base/view_prop.h" | 113 #include "ui/base/view_prop.h" |
| 113 #include "views/widget/native_widget_win.h" | 114 #include "views/widget/native_widget_win.h" |
| 114 #elif defined(TOOLKIT_USES_GTK) | 115 #elif defined(TOOLKIT_USES_GTK) |
| 115 #include "chrome/browser/ui/views/accelerator_table_gtk.h" | 116 #include "chrome/browser/ui/views/accelerator_table_gtk.h" |
| 116 #include "views/window/hit_test.h" | 117 #include "views/window/hit_test.h" |
| 117 #if !defined(TOUCH_UI) | 118 #if !defined(TOUCH_UI) |
| 118 #include "chrome/browser/ui/views/handle_web_keyboard_event_gtk.h" | 119 #include "chrome/browser/ui/views/handle_web_keyboard_event_gtk.h" |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 infobar_container_(NULL), | 324 infobar_container_(NULL), |
| 324 sidebar_container_(NULL), | 325 sidebar_container_(NULL), |
| 325 sidebar_split_(NULL), | 326 sidebar_split_(NULL), |
| 326 contents_container_(NULL), | 327 contents_container_(NULL), |
| 327 devtools_container_(NULL), | 328 devtools_container_(NULL), |
| 328 preview_container_(NULL), | 329 preview_container_(NULL), |
| 329 contents_(NULL), | 330 contents_(NULL), |
| 330 contents_split_(NULL), | 331 contents_split_(NULL), |
| 331 initialized_(false), | 332 initialized_(false), |
| 332 ignore_layout_(true) | 333 ignore_layout_(true) |
| 333 #if defined(OS_WIN) | 334 #if defined(OS_WIN) && !defined(USE_AURA) |
| 334 , hung_window_detector_(&hung_plugin_action_), | 335 , hung_window_detector_(&hung_plugin_action_), |
| 335 ticker_(0) | 336 ticker_(0) |
| 336 #endif | 337 #endif |
| 337 { | 338 { |
| 338 browser_->tabstrip_model()->AddObserver(this); | 339 browser_->tabstrip_model()->AddObserver(this); |
| 339 | 340 |
| 340 registrar_.Add(this, | 341 registrar_.Add(this, |
| 341 chrome::NOTIFICATION_SIDEBAR_CHANGED, | 342 chrome::NOTIFICATION_SIDEBAR_CHANGED, |
| 342 Source<SidebarManager>(SidebarManager::GetInstance())); | 343 Source<SidebarManager>(SidebarManager::GetInstance())); |
| 343 } | 344 } |
| 344 | 345 |
| 345 BrowserView::~BrowserView() { | 346 BrowserView::~BrowserView() { |
| 346 browser_->tabstrip_model()->RemoveObserver(this); | 347 browser_->tabstrip_model()->RemoveObserver(this); |
| 347 | 348 |
| 348 #if defined(OS_WIN) | 349 #if defined(OS_WIN) && !defined(USE_AURA) |
| 349 // Remove this observer. | 350 // Remove this observer. |
| 350 if (aeropeek_manager_.get()) | 351 if (aeropeek_manager_.get()) |
| 351 browser_->tabstrip_model()->RemoveObserver(aeropeek_manager_.get()); | 352 browser_->tabstrip_model()->RemoveObserver(aeropeek_manager_.get()); |
| 352 | 353 |
| 353 // Stop hung plugin monitoring. | 354 // Stop hung plugin monitoring. |
| 354 ticker_.Stop(); | 355 ticker_.Stop(); |
| 355 ticker_.UnregisterTickHandler(&hung_window_detector_); | 356 ticker_.UnregisterTickHandler(&hung_window_detector_); |
| 356 | 357 |
| 357 // Terminate the jumplist (must be called before browser_->profile() is | 358 // Terminate the jumplist (must be called before browser_->profile() is |
| 358 // destroyed. | 359 // destroyed. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 379 // Child views maintain PrefMember attributes that point to | 380 // Child views maintain PrefMember attributes that point to |
| 380 // OffTheRecordProfile's PrefService which gets deleted by ~Browser. | 381 // OffTheRecordProfile's PrefService which gets deleted by ~Browser. |
| 381 RemoveAllChildViews(true); | 382 RemoveAllChildViews(true); |
| 382 // Explicitly set browser_ to NULL. | 383 // Explicitly set browser_ to NULL. |
| 383 browser_.reset(); | 384 browser_.reset(); |
| 384 } | 385 } |
| 385 | 386 |
| 386 // static | 387 // static |
| 387 BrowserView* BrowserView::GetBrowserViewForNativeWindow( | 388 BrowserView* BrowserView::GetBrowserViewForNativeWindow( |
| 388 gfx::NativeWindow window) { | 389 gfx::NativeWindow window) { |
| 389 #if defined(OS_WIN) | 390 #if defined(USE_AURA) |
| 391 // TODO(beng): |
| 392 NOTIMPLEMENTED(); |
| 393 #elif defined(OS_WIN) |
| 390 if (IsWindow(window)) { | 394 if (IsWindow(window)) { |
| 391 return reinterpret_cast<BrowserView*>( | 395 return reinterpret_cast<BrowserView*>( |
| 392 ui::ViewProp::GetValue(window, kBrowserViewKey)); | 396 ui::ViewProp::GetValue(window, kBrowserViewKey)); |
| 393 } | 397 } |
| 394 #else | 398 #else |
| 395 if (window) { | 399 if (window) { |
| 396 return static_cast<BrowserView*>( | 400 return static_cast<BrowserView*>( |
| 397 g_object_get_data(G_OBJECT(window), kBrowserViewKey)); | 401 g_object_get_data(G_OBJECT(window), kBrowserViewKey)); |
| 398 } | 402 } |
| 399 #endif | 403 #endif |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 SkBitmap BrowserView::GetOTRAvatarIcon() { | 571 SkBitmap BrowserView::GetOTRAvatarIcon() { |
| 568 static SkBitmap* otr_avatar_ = new SkBitmap(); | 572 static SkBitmap* otr_avatar_ = new SkBitmap(); |
| 569 | 573 |
| 570 if (otr_avatar_->isNull()) { | 574 if (otr_avatar_->isNull()) { |
| 571 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 575 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| 572 *otr_avatar_ = *rb.GetBitmapNamed(IDR_OTR_ICON); | 576 *otr_avatar_ = *rb.GetBitmapNamed(IDR_OTR_ICON); |
| 573 } | 577 } |
| 574 return *otr_avatar_; | 578 return *otr_avatar_; |
| 575 } | 579 } |
| 576 | 580 |
| 577 #if defined(OS_WIN) | 581 #if defined(OS_WIN) && !defined(USE_AURA) |
| 578 void BrowserView::PrepareToRunSystemMenu(HMENU menu) { | 582 void BrowserView::PrepareToRunSystemMenu(HMENU menu) { |
| 579 system_menu_->UpdateStates(); | 583 system_menu_->UpdateStates(); |
| 580 } | 584 } |
| 581 #endif | 585 #endif |
| 582 | 586 |
| 583 // static | 587 // static |
| 584 void BrowserView::RegisterBrowserViewPrefs(PrefService* prefs) { | 588 void BrowserView::RegisterBrowserViewPrefs(PrefService* prefs) { |
| 585 prefs->RegisterIntegerPref(prefs::kPluginMessageResponseTimeout, | 589 prefs->RegisterIntegerPref(prefs::kPluginMessageResponseTimeout, |
| 586 kDefaultPluginMessageResponseTimeout); | 590 kDefaultPluginMessageResponseTimeout); |
| 587 prefs->RegisterIntegerPref(prefs::kHungPluginDetectFrequency, | 591 prefs->RegisterIntegerPref(prefs::kHungPluginDetectFrequency, |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 | 652 |
| 649 void BrowserView::Deactivate() { | 653 void BrowserView::Deactivate() { |
| 650 frame_->Deactivate(); | 654 frame_->Deactivate(); |
| 651 } | 655 } |
| 652 | 656 |
| 653 bool BrowserView::IsActive() const { | 657 bool BrowserView::IsActive() const { |
| 654 return frame_->IsActive(); | 658 return frame_->IsActive(); |
| 655 } | 659 } |
| 656 | 660 |
| 657 void BrowserView::FlashFrame() { | 661 void BrowserView::FlashFrame() { |
| 658 #if defined(OS_WIN) | 662 #if defined(OS_WIN) && !defined(USE_AURA) |
| 659 FLASHWINFO fwi; | 663 FLASHWINFO fwi; |
| 660 fwi.cbSize = sizeof(fwi); | 664 fwi.cbSize = sizeof(fwi); |
| 661 fwi.hwnd = frame_->GetNativeWindow(); | 665 fwi.hwnd = frame_->GetNativeWindow(); |
| 662 fwi.dwFlags = FLASHW_ALL; | 666 fwi.dwFlags = FLASHW_ALL; |
| 663 fwi.uCount = 4; | 667 fwi.uCount = 4; |
| 664 fwi.dwTimeout = 0; | 668 fwi.dwTimeout = 0; |
| 665 FlashWindowEx(&fwi); | 669 FlashWindowEx(&fwi); |
| 666 #else | 670 #else |
| 667 // Doesn't matter for chrome os. | 671 // Doesn't matter for chrome os. |
| 668 #endif | 672 #endif |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 } | 794 } |
| 791 | 795 |
| 792 bool BrowserView::IsMinimized() const { | 796 bool BrowserView::IsMinimized() const { |
| 793 return frame_->IsMinimized(); | 797 return frame_->IsMinimized(); |
| 794 } | 798 } |
| 795 | 799 |
| 796 void BrowserView::SetFullscreen(bool fullscreen) { | 800 void BrowserView::SetFullscreen(bool fullscreen) { |
| 797 if (IsFullscreen() == fullscreen) | 801 if (IsFullscreen() == fullscreen) |
| 798 return; // Nothing to do. | 802 return; // Nothing to do. |
| 799 | 803 |
| 800 #if defined(OS_WIN) | 804 #if defined(OS_WIN) && !defined(USE_AURA) |
| 801 ProcessFullscreen(fullscreen); | 805 ProcessFullscreen(fullscreen); |
| 802 #else | 806 #else |
| 803 // On Linux changing fullscreen is async. Ask the window to change it's | 807 // On Linux changing fullscreen is async. Ask the window to change it's |
| 804 // fullscreen state, and when done invoke ProcessFullscreen. | 808 // fullscreen state, and when done invoke ProcessFullscreen. |
| 805 frame_->SetFullscreen(fullscreen); | 809 frame_->SetFullscreen(fullscreen); |
| 806 #endif | 810 #endif |
| 807 } | 811 } |
| 808 | 812 |
| 809 bool BrowserView::IsFullscreen() const { | 813 bool BrowserView::IsFullscreen() const { |
| 810 return frame_->IsFullscreen(); | 814 return frame_->IsFullscreen(); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 bool BrowserView::IsToolbarVisible() const { | 1011 bool BrowserView::IsToolbarVisible() const { |
| 1008 if (UseCompactNavigationBar()) { | 1012 if (UseCompactNavigationBar()) { |
| 1009 return false; | 1013 return false; |
| 1010 } else { | 1014 } else { |
| 1011 return browser_->SupportsWindowFeature(Browser::FEATURE_TOOLBAR) || | 1015 return browser_->SupportsWindowFeature(Browser::FEATURE_TOOLBAR) || |
| 1012 browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR); | 1016 browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR); |
| 1013 } | 1017 } |
| 1014 } | 1018 } |
| 1015 | 1019 |
| 1016 void BrowserView::DisableInactiveFrame() { | 1020 void BrowserView::DisableInactiveFrame() { |
| 1017 #if defined(OS_WIN) | 1021 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1018 frame_->DisableInactiveRendering(); | 1022 frame_->DisableInactiveRendering(); |
| 1019 #endif // No tricks are needed to get the right behavior on Linux. | 1023 #endif // No tricks are needed to get the right behavior on Linux. |
| 1020 } | 1024 } |
| 1021 | 1025 |
| 1022 void BrowserView::ConfirmSetDefaultSearchProvider( | 1026 void BrowserView::ConfirmSetDefaultSearchProvider( |
| 1023 TabContents* tab_contents, | 1027 TabContents* tab_contents, |
| 1024 TemplateURL* template_url, | 1028 TemplateURL* template_url, |
| 1025 TemplateURLService* template_url_service) { | 1029 TemplateURLService* template_url_service) { |
| 1026 #if defined(OS_WIN) | 1030 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1027 DefaultSearchView::Show(tab_contents, template_url, template_url_service); | 1031 DefaultSearchView::Show(tab_contents, template_url, template_url_service); |
| 1028 #else | 1032 #else |
| 1029 // TODO(levin): Implement for other platforms. Right now this is behind | 1033 // TODO(levin): Implement for other platforms. Right now this is behind |
| 1030 // a command line flag which is off. http://crbug.com/38475 | 1034 // a command line flag which is off. http://crbug.com/38475 |
| 1031 #endif | 1035 #endif |
| 1032 } | 1036 } |
| 1033 | 1037 |
| 1034 void BrowserView::ConfirmAddSearchProvider(const TemplateURL* template_url, | 1038 void BrowserView::ConfirmAddSearchProvider(const TemplateURL* template_url, |
| 1035 Profile* profile) { | 1039 Profile* profile) { |
| 1036 browser::EditSearchEngine(GetWidget()->GetNativeWindow(), template_url, NULL, | 1040 browser::EditSearchEngine(GetWidget()->GetNativeWindow(), template_url, NULL, |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 void BrowserView::ShowAppMenu() { | 1206 void BrowserView::ShowAppMenu() { |
| 1203 // TODO(mad): find out how to add this to compact nav view. | 1207 // TODO(mad): find out how to add this to compact nav view. |
| 1204 toolbar_->app_menu()->Activate(); | 1208 toolbar_->app_menu()->Activate(); |
| 1205 } | 1209 } |
| 1206 | 1210 |
| 1207 bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, | 1211 bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, |
| 1208 bool* is_keyboard_shortcut) { | 1212 bool* is_keyboard_shortcut) { |
| 1209 if (event.type != WebKit::WebInputEvent::RawKeyDown) | 1213 if (event.type != WebKit::WebInputEvent::RawKeyDown) |
| 1210 return false; | 1214 return false; |
| 1211 | 1215 |
| 1212 #if defined(OS_WIN) | 1216 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1213 // As Alt+F4 is the close-app keyboard shortcut, it needs processing | 1217 // As Alt+F4 is the close-app keyboard shortcut, it needs processing |
| 1214 // immediately. | 1218 // immediately. |
| 1215 if (event.windowsKeyCode == ui::VKEY_F4 && | 1219 if (event.windowsKeyCode == ui::VKEY_F4 && |
| 1216 event.modifiers == NativeWebKeyboardEvent::AltKey) { | 1220 event.modifiers == NativeWebKeyboardEvent::AltKey) { |
| 1217 DefWindowProc(event.os_event.hwnd, event.os_event.message, | 1221 DefWindowProc(event.os_event.hwnd, event.os_event.message, |
| 1218 event.os_event.wParam, event.os_event.lParam); | 1222 event.os_event.wParam, event.os_event.lParam); |
| 1219 return true; | 1223 return true; |
| 1220 } | 1224 } |
| 1221 #endif | 1225 #endif |
| 1222 | 1226 |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 void BrowserView::PrepareForInstant() { | 1344 void BrowserView::PrepareForInstant() { |
| 1341 contents_->FadeActiveContents(); | 1345 contents_->FadeActiveContents(); |
| 1342 } | 1346 } |
| 1343 | 1347 |
| 1344 void BrowserView::ShowInstant(TabContentsWrapper* preview) { | 1348 void BrowserView::ShowInstant(TabContentsWrapper* preview) { |
| 1345 if (!preview_container_) | 1349 if (!preview_container_) |
| 1346 preview_container_ = new TabContentsContainer(); | 1350 preview_container_ = new TabContentsContainer(); |
| 1347 contents_->SetPreview(preview_container_, preview->tab_contents()); | 1351 contents_->SetPreview(preview_container_, preview->tab_contents()); |
| 1348 preview_container_->ChangeTabContents(preview->tab_contents()); | 1352 preview_container_->ChangeTabContents(preview->tab_contents()); |
| 1349 | 1353 |
| 1350 #if defined(OS_WIN) | 1354 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1351 // Removing the fade is instant (on windows). We need to force the preview to | 1355 // Removing the fade is instant (on windows). We need to force the preview to |
| 1352 // draw, otherwise the current page flickers before the new page appears. | 1356 // draw, otherwise the current page flickers before the new page appears. |
| 1353 RedrawWindow(preview->tab_contents()->view()->GetContentNativeView(), NULL, | 1357 RedrawWindow(preview->tab_contents()->view()->GetContentNativeView(), NULL, |
| 1354 NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN); | 1358 NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_NOCHILDREN); |
| 1355 #endif | 1359 #endif |
| 1356 | 1360 |
| 1357 contents_->RemoveFade(); | 1361 contents_->RemoveFade(); |
| 1358 } | 1362 } |
| 1359 | 1363 |
| 1360 void BrowserView::HideInstant(bool instant_is_active) { | 1364 void BrowserView::HideInstant(bool instant_is_active) { |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1607 return browser_->GetCurrentPageIcon(); | 1611 return browser_->GetCurrentPageIcon(); |
| 1608 return SkBitmap(); | 1612 return SkBitmap(); |
| 1609 } | 1613 } |
| 1610 | 1614 |
| 1611 bool BrowserView::ShouldShowWindowIcon() const { | 1615 bool BrowserView::ShouldShowWindowIcon() const { |
| 1612 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); | 1616 return browser_->SupportsWindowFeature(Browser::FEATURE_TITLEBAR); |
| 1613 } | 1617 } |
| 1614 | 1618 |
| 1615 bool BrowserView::ExecuteWindowsCommand(int command_id) { | 1619 bool BrowserView::ExecuteWindowsCommand(int command_id) { |
| 1616 // This function handles WM_SYSCOMMAND, WM_APPCOMMAND, and WM_COMMAND. | 1620 // This function handles WM_SYSCOMMAND, WM_APPCOMMAND, and WM_COMMAND. |
| 1617 #if defined(OS_WIN) | 1621 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1618 if (command_id == IDC_DEBUG_FRAME_TOGGLE) | 1622 if (command_id == IDC_DEBUG_FRAME_TOGGLE) |
| 1619 GetWidget()->DebugToggleFrameType(); | 1623 GetWidget()->DebugToggleFrameType(); |
| 1620 #endif | 1624 #endif |
| 1621 // Translate WM_APPCOMMAND command ids into a command id that the browser | 1625 // Translate WM_APPCOMMAND command ids into a command id that the browser |
| 1622 // knows how to handle. | 1626 // knows how to handle. |
| 1623 int command_id_from_app_command = GetCommandIDForAppCommandID(command_id); | 1627 int command_id_from_app_command = GetCommandIDForAppCommandID(command_id); |
| 1624 if (command_id_from_app_command != -1) | 1628 if (command_id_from_app_command != -1) |
| 1625 command_id = command_id_from_app_command; | 1629 command_id = command_id_from_app_command; |
| 1626 | 1630 |
| 1627 return browser_->ExecuteCommandIfEnabled(command_id); | 1631 return browser_->ExecuteCommandIfEnabled(command_id); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1769 | 1773 |
| 1770 // Empty TabStripModel, it's now safe to allow the Window to be closed. | 1774 // Empty TabStripModel, it's now safe to allow the Window to be closed. |
| 1771 NotificationService::current()->Notify( | 1775 NotificationService::current()->Notify( |
| 1772 chrome::NOTIFICATION_WINDOW_CLOSED, | 1776 chrome::NOTIFICATION_WINDOW_CLOSED, |
| 1773 Source<gfx::NativeWindow>(frame_->GetNativeWindow()), | 1777 Source<gfx::NativeWindow>(frame_->GetNativeWindow()), |
| 1774 NotificationService::NoDetails()); | 1778 NotificationService::NoDetails()); |
| 1775 return true; | 1779 return true; |
| 1776 } | 1780 } |
| 1777 | 1781 |
| 1778 int BrowserView::NonClientHitTest(const gfx::Point& point) { | 1782 int BrowserView::NonClientHitTest(const gfx::Point& point) { |
| 1779 #if defined(OS_WIN) | 1783 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1780 // The following code is not in the LayoutManager because it's | 1784 // The following code is not in the LayoutManager because it's |
| 1781 // independent of layout and also depends on the ResizeCorner which | 1785 // independent of layout and also depends on the ResizeCorner which |
| 1782 // is private. | 1786 // is private. |
| 1783 if (!frame_->IsMaximized() && !frame_->IsFullscreen()) { | 1787 if (!frame_->IsMaximized() && !frame_->IsFullscreen()) { |
| 1784 CRect client_rect; | 1788 CRect client_rect; |
| 1785 ::GetClientRect(frame_->GetNativeWindow(), &client_rect); | 1789 ::GetClientRect(frame_->GetNativeWindow(), &client_rect); |
| 1786 gfx::Size resize_corner_size = ResizeCorner::GetSize(); | 1790 gfx::Size resize_corner_size = ResizeCorner::GetSize(); |
| 1787 gfx::Rect resize_corner_rect(client_rect.right - resize_corner_size.width(), | 1791 gfx::Rect resize_corner_rect(client_rect.right - resize_corner_size.width(), |
| 1788 client_rect.bottom - resize_corner_size.height(), | 1792 client_rect.bottom - resize_corner_size.height(), |
| 1789 resize_corner_size.width(), resize_corner_size.height()); | 1793 resize_corner_size.width(), resize_corner_size.height()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1832 } | 1836 } |
| 1833 | 1837 |
| 1834 void BrowserView::Layout() { | 1838 void BrowserView::Layout() { |
| 1835 if (ignore_layout_) | 1839 if (ignore_layout_) |
| 1836 return; | 1840 return; |
| 1837 views::View::Layout(); | 1841 views::View::Layout(); |
| 1838 | 1842 |
| 1839 // The status bubble position requires that all other layout finish first. | 1843 // The status bubble position requires that all other layout finish first. |
| 1840 LayoutStatusBubble(); | 1844 LayoutStatusBubble(); |
| 1841 | 1845 |
| 1842 #if defined(OS_WIN) | 1846 #if defined(OS_WIN) && !defined(USE_AURA) |
| 1843 // Send the margins of the "user-perceived content area" of this | 1847 // Send the margins of the "user-perceived content area" of this |
| 1844 // browser window so AeroPeekManager can render a background-tab image in | 1848 // browser window so AeroPeekManager can render a background-tab image in |
| 1845 // the area. | 1849 // the area. |
| 1846 // TODO(pkasting) correct content inset?? | 1850 // TODO(pkasting) correct content inset?? |
| 1847 if (aeropeek_manager_.get()) { | 1851 if (aeropeek_manager_.get()) { |
| 1848 gfx::Insets insets(GetFindBarBoundingBox().y() + 1, | 1852 gfx::Insets insets(GetFindBarBoundingBox().y() + 1, |
| 1849 0, | 1853 0, |
| 1850 0, | 1854 0, |
| 1851 0); | 1855 0); |
| 1852 aeropeek_manager_->SetContentInsets(insets); | 1856 aeropeek_manager_->SetContentInsets(insets); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1999 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT); | 2003 contents_split_->set_id(VIEW_ID_CONTENTS_SPLIT); |
| 2000 contents_split_->SetAccessibleName( | 2004 contents_split_->SetAccessibleName( |
| 2001 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS)); | 2005 l10n_util::GetStringUTF16(IDS_ACCNAME_WEB_CONTENTS)); |
| 2002 contents_split_->set_background( | 2006 contents_split_->set_background( |
| 2003 views::Background::CreateSolidBackground(bg_color)); | 2007 views::Background::CreateSolidBackground(bg_color)); |
| 2004 AddChildView(contents_split_); | 2008 AddChildView(contents_split_); |
| 2005 set_contents_view(contents_split_); | 2009 set_contents_view(contents_split_); |
| 2006 | 2010 |
| 2007 status_bubble_.reset(new StatusBubbleViews(contents_)); | 2011 status_bubble_.reset(new StatusBubbleViews(contents_)); |
| 2008 | 2012 |
| 2009 #if defined(OS_WIN) | 2013 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2010 InitSystemMenu(); | 2014 InitSystemMenu(); |
| 2011 | 2015 |
| 2012 // Create a custom JumpList and add it to an observer of TabRestoreService | 2016 // Create a custom JumpList and add it to an observer of TabRestoreService |
| 2013 // so we can update the custom JumpList when a tab is added or removed. | 2017 // so we can update the custom JumpList when a tab is added or removed. |
| 2014 if (JumpList::Enabled()) { | 2018 if (JumpList::Enabled()) { |
| 2015 jumplist_ = new JumpList(); | 2019 jumplist_ = new JumpList(); |
| 2016 jumplist_->AddObserver(browser_->profile()); | 2020 jumplist_->AddObserver(browser_->profile()); |
| 2017 } | 2021 } |
| 2018 | 2022 |
| 2019 if (AeroPeekManager::Enabled()) { | 2023 if (AeroPeekManager::Enabled()) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2072 TabContents* tab_contents = browser_->GetSelectedTabContents(); | 2076 TabContents* tab_contents = browser_->GetSelectedTabContents(); |
| 2073 // GetSelectedTabContents can return NULL for example under Purify when | 2077 // GetSelectedTabContents can return NULL for example under Purify when |
| 2074 // the animations are running slowly and this function is called on a timer | 2078 // the animations are running slowly and this function is called on a timer |
| 2075 // through LoadingAnimationCallback. | 2079 // through LoadingAnimationCallback. |
| 2076 frame_->UpdateThrobber(tab_contents && tab_contents->IsLoading()); | 2080 frame_->UpdateThrobber(tab_contents && tab_contents->IsLoading()); |
| 2077 } | 2081 } |
| 2078 } | 2082 } |
| 2079 | 2083 |
| 2080 // BrowserView, private -------------------------------------------------------- | 2084 // BrowserView, private -------------------------------------------------------- |
| 2081 | 2085 |
| 2082 #if defined(OS_WIN) | 2086 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2083 void BrowserView::InitSystemMenu() { | 2087 void BrowserView::InitSystemMenu() { |
| 2084 system_menu_contents_.reset(new views::SystemMenuModel(this)); | 2088 system_menu_contents_.reset(new views::SystemMenuModel(this)); |
| 2085 // We add the menu items in reverse order so that insertion_index never needs | 2089 // We add the menu items in reverse order so that insertion_index never needs |
| 2086 // to change. | 2090 // to change. |
| 2087 if (IsBrowserTypeNormal()) | 2091 if (IsBrowserTypeNormal()) |
| 2088 BuildSystemMenuForBrowserWindow(); | 2092 BuildSystemMenuForBrowserWindow(); |
| 2089 else | 2093 else |
| 2090 BuildSystemMenuForAppOrPopupWindow(); | 2094 BuildSystemMenuForAppOrPopupWindow(); |
| 2091 system_menu_.reset( | 2095 system_menu_.reset( |
| 2092 new views::NativeMenuWin(system_menu_contents_.get(), | 2096 new views::NativeMenuWin(system_menu_contents_.get(), |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2310 return changed; | 2314 return changed; |
| 2311 } | 2315 } |
| 2312 | 2316 |
| 2313 void BrowserView::ProcessFullscreen(bool fullscreen) { | 2317 void BrowserView::ProcessFullscreen(bool fullscreen) { |
| 2314 // Reduce jankiness during the following position changes by: | 2318 // Reduce jankiness during the following position changes by: |
| 2315 // * Hiding the window until it's in the final position | 2319 // * Hiding the window until it's in the final position |
| 2316 // * Ignoring all intervening Layout() calls, which resize the webpage and | 2320 // * Ignoring all intervening Layout() calls, which resize the webpage and |
| 2317 // thus are slow and look ugly | 2321 // thus are slow and look ugly |
| 2318 ignore_layout_ = true; | 2322 ignore_layout_ = true; |
| 2319 LocationBarView* location_bar = GetLocationBarView(); | 2323 LocationBarView* location_bar = GetLocationBarView(); |
| 2320 #if defined(OS_WIN) | 2324 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2321 OmniboxViewWin* omnibox_view = | 2325 OmniboxViewWin* omnibox_view = |
| 2322 static_cast<OmniboxViewWin*>(location_bar->location_entry()); | 2326 static_cast<OmniboxViewWin*>(location_bar->location_entry()); |
| 2323 #endif | 2327 #endif |
| 2324 if (!fullscreen) { | 2328 if (!fullscreen) { |
| 2325 // Hide the fullscreen bubble as soon as possible, since the mode toggle can | 2329 // Hide the fullscreen bubble as soon as possible, since the mode toggle can |
| 2326 // take enough time for the user to notice. | 2330 // take enough time for the user to notice. |
| 2327 fullscreen_bubble_.reset(); | 2331 fullscreen_bubble_.reset(); |
| 2328 } else { | 2332 } else { |
| 2329 // Move focus out of the location bar if necessary. | 2333 // Move focus out of the location bar if necessary. |
| 2330 views::FocusManager* focus_manager = GetFocusManager(); | 2334 views::FocusManager* focus_manager = GetFocusManager(); |
| 2331 DCHECK(focus_manager); | 2335 DCHECK(focus_manager); |
| 2332 if (focus_manager->GetFocusedView() == location_bar) | 2336 if (focus_manager->GetFocusedView() == location_bar) |
| 2333 focus_manager->ClearFocus(); | 2337 focus_manager->ClearFocus(); |
| 2334 | 2338 |
| 2335 #if defined(OS_WIN) | 2339 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2336 // If we don't hide the edit and force it to not show until we come out of | 2340 // If we don't hide the edit and force it to not show until we come out of |
| 2337 // fullscreen, then if the user was on the New Tab Page, the edit contents | 2341 // fullscreen, then if the user was on the New Tab Page, the edit contents |
| 2338 // will appear atop the web contents once we go into fullscreen mode. This | 2342 // will appear atop the web contents once we go into fullscreen mode. This |
| 2339 // has something to do with how we move the main window while it's hidden; | 2343 // has something to do with how we move the main window while it's hidden; |
| 2340 // if we don't hide the main window below, we don't get this problem. | 2344 // if we don't hide the main window below, we don't get this problem. |
| 2341 omnibox_view->set_force_hidden(true); | 2345 omnibox_view->set_force_hidden(true); |
| 2342 ShowWindow(omnibox_view->m_hWnd, SW_HIDE); | 2346 ShowWindow(omnibox_view->m_hWnd, SW_HIDE); |
| 2343 #endif | 2347 #endif |
| 2344 } | 2348 } |
| 2345 #if defined(OS_WIN) | 2349 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2346 static_cast<views::NativeWidgetWin*>(frame_->native_widget())-> | 2350 static_cast<views::NativeWidgetWin*>(frame_->native_widget())-> |
| 2347 PushForceHidden(); | 2351 PushForceHidden(); |
| 2348 #endif | 2352 #endif |
| 2349 | 2353 |
| 2350 // Toggle fullscreen mode. | 2354 // Toggle fullscreen mode. |
| 2351 #if defined(OS_WIN) | 2355 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2352 frame_->SetFullscreen(fullscreen); | 2356 frame_->SetFullscreen(fullscreen); |
| 2353 #endif // No need to invoke SetFullscreen for linux as this code is executed | 2357 #endif // No need to invoke SetFullscreen for linux as this code is executed |
| 2354 // once we're already fullscreen on linux. | 2358 // once we're already fullscreen on linux. |
| 2355 | 2359 |
| 2356 browser_->WindowFullscreenStateChanged(); | 2360 browser_->WindowFullscreenStateChanged(); |
| 2357 | 2361 |
| 2358 if (fullscreen) { | 2362 if (fullscreen) { |
| 2359 bool is_kiosk = | 2363 bool is_kiosk = |
| 2360 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); | 2364 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); |
| 2361 if (!is_kiosk) { | 2365 if (!is_kiosk) { |
| 2362 fullscreen_bubble_.reset(new FullscreenExitBubbleViews(GetWidget(), | 2366 fullscreen_bubble_.reset(new FullscreenExitBubbleViews(GetWidget(), |
| 2363 browser_.get())); | 2367 browser_.get())); |
| 2364 } | 2368 } |
| 2365 } else { | 2369 } else { |
| 2366 #if defined(OS_WIN) | 2370 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2367 // Show the edit again since we're no longer in fullscreen mode. | 2371 // Show the edit again since we're no longer in fullscreen mode. |
| 2368 omnibox_view->set_force_hidden(false); | 2372 omnibox_view->set_force_hidden(false); |
| 2369 ShowWindow(omnibox_view->m_hWnd, SW_SHOW); | 2373 ShowWindow(omnibox_view->m_hWnd, SW_SHOW); |
| 2370 #endif | 2374 #endif |
| 2371 } | 2375 } |
| 2372 | 2376 |
| 2373 // Undo our anti-jankiness hacks and force the window to re-layout now that | 2377 // Undo our anti-jankiness hacks and force the window to re-layout now that |
| 2374 // it's in its final position. | 2378 // it's in its final position. |
| 2375 ignore_layout_ = false; | 2379 ignore_layout_ = false; |
| 2376 Layout(); | 2380 Layout(); |
| 2377 #if defined(OS_WIN) | 2381 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2378 static_cast<views::NativeWidgetWin*>(frame_->native_widget())-> | 2382 static_cast<views::NativeWidgetWin*>(frame_->native_widget())-> |
| 2379 PopForceHidden(); | 2383 PopForceHidden(); |
| 2380 #endif | 2384 #endif |
| 2381 } | 2385 } |
| 2382 | 2386 |
| 2383 | 2387 |
| 2384 void BrowserView::LoadAccelerators() { | 2388 void BrowserView::LoadAccelerators() { |
| 2385 #if defined(OS_WIN) | 2389 #if defined(USE_AURA) |
| 2390 // TODO(beng): |
| 2391 NOTIMPLEMENTED(); |
| 2392 #elif defined(OS_WIN) |
| 2386 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); | 2393 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); |
| 2387 DCHECK(accelerator_table); | 2394 DCHECK(accelerator_table); |
| 2388 | 2395 |
| 2389 // We have to copy the table to access its contents. | 2396 // We have to copy the table to access its contents. |
| 2390 int count = CopyAcceleratorTable(accelerator_table, 0, 0); | 2397 int count = CopyAcceleratorTable(accelerator_table, 0, 0); |
| 2391 if (count == 0) { | 2398 if (count == 0) { |
| 2392 // Nothing to do in that case. | 2399 // Nothing to do in that case. |
| 2393 return; | 2400 return; |
| 2394 } | 2401 } |
| 2395 | 2402 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2425 browser::kAcceleratorMap[i].ctrl_pressed, | 2432 browser::kAcceleratorMap[i].ctrl_pressed, |
| 2426 browser::kAcceleratorMap[i].alt_pressed); | 2433 browser::kAcceleratorMap[i].alt_pressed); |
| 2427 accelerator_table_[accelerator] = browser::kAcceleratorMap[i].command_id; | 2434 accelerator_table_[accelerator] = browser::kAcceleratorMap[i].command_id; |
| 2428 | 2435 |
| 2429 // Also register with the focus manager. | 2436 // Also register with the focus manager. |
| 2430 focus_manager->RegisterAccelerator(accelerator, this); | 2437 focus_manager->RegisterAccelerator(accelerator, this); |
| 2431 } | 2438 } |
| 2432 #endif | 2439 #endif |
| 2433 } | 2440 } |
| 2434 | 2441 |
| 2435 #if defined(OS_WIN) | 2442 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2436 void BrowserView::BuildSystemMenuForBrowserWindow() { | 2443 void BrowserView::BuildSystemMenuForBrowserWindow() { |
| 2437 system_menu_contents_->AddSeparator(); | 2444 system_menu_contents_->AddSeparator(); |
| 2438 system_menu_contents_->AddItemWithStringId(IDC_TASK_MANAGER, | 2445 system_menu_contents_->AddItemWithStringId(IDC_TASK_MANAGER, |
| 2439 IDS_TASK_MANAGER); | 2446 IDS_TASK_MANAGER); |
| 2440 system_menu_contents_->AddSeparator(); | 2447 system_menu_contents_->AddSeparator(); |
| 2441 system_menu_contents_->AddItemWithStringId(IDC_RESTORE_TAB, IDS_RESTORE_TAB); | 2448 system_menu_contents_->AddItemWithStringId(IDC_RESTORE_TAB, IDS_RESTORE_TAB); |
| 2442 system_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); | 2449 system_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB); |
| 2443 AddFrameToggleItems(); | 2450 AddFrameToggleItems(); |
| 2444 // If it's a regular browser window with tabs, we don't add any more items, | 2451 // If it's a regular browser window with tabs, we don't add any more items, |
| 2445 // since it already has menus (Page, Chrome). | 2452 // since it already has menus (Page, Chrome). |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2488 if (CommandLine::ForCurrentProcess()->HasSwitch( | 2495 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 2489 switches::kDebugEnableFrameToggle)) { | 2496 switches::kDebugEnableFrameToggle)) { |
| 2490 system_menu_contents_->AddSeparator(); | 2497 system_menu_contents_->AddSeparator(); |
| 2491 system_menu_contents_->AddItem(IDC_DEBUG_FRAME_TOGGLE, | 2498 system_menu_contents_->AddItem(IDC_DEBUG_FRAME_TOGGLE, |
| 2492 L"Toggle Frame Type"); | 2499 L"Toggle Frame Type"); |
| 2493 } | 2500 } |
| 2494 } | 2501 } |
| 2495 #endif | 2502 #endif |
| 2496 | 2503 |
| 2497 int BrowserView::GetCommandIDForAppCommandID(int app_command_id) const { | 2504 int BrowserView::GetCommandIDForAppCommandID(int app_command_id) const { |
| 2498 #if defined(OS_WIN) | 2505 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2499 switch (app_command_id) { | 2506 switch (app_command_id) { |
| 2500 // NOTE: The order here matches the APPCOMMAND declaration order in the | 2507 // NOTE: The order here matches the APPCOMMAND declaration order in the |
| 2501 // Windows headers. | 2508 // Windows headers. |
| 2502 case APPCOMMAND_BROWSER_BACKWARD: return IDC_BACK; | 2509 case APPCOMMAND_BROWSER_BACKWARD: return IDC_BACK; |
| 2503 case APPCOMMAND_BROWSER_FORWARD: return IDC_FORWARD; | 2510 case APPCOMMAND_BROWSER_FORWARD: return IDC_FORWARD; |
| 2504 case APPCOMMAND_BROWSER_REFRESH: return IDC_RELOAD; | 2511 case APPCOMMAND_BROWSER_REFRESH: return IDC_RELOAD; |
| 2505 case APPCOMMAND_BROWSER_HOME: return IDC_HOME; | 2512 case APPCOMMAND_BROWSER_HOME: return IDC_HOME; |
| 2506 case APPCOMMAND_BROWSER_STOP: return IDC_STOP; | 2513 case APPCOMMAND_BROWSER_STOP: return IDC_STOP; |
| 2507 case APPCOMMAND_BROWSER_SEARCH: return IDC_FOCUS_SEARCH; | 2514 case APPCOMMAND_BROWSER_SEARCH: return IDC_FOCUS_SEARCH; |
| 2508 case APPCOMMAND_HELP: return IDC_HELP_PAGE; | 2515 case APPCOMMAND_HELP: return IDC_HELP_PAGE; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2521 case APPCOMMAND_SPELL_CHECK: | 2528 case APPCOMMAND_SPELL_CHECK: |
| 2522 default: return -1; | 2529 default: return -1; |
| 2523 } | 2530 } |
| 2524 #else | 2531 #else |
| 2525 // App commands are Windows-specific so there's nothing to do here. | 2532 // App commands are Windows-specific so there's nothing to do here. |
| 2526 return -1; | 2533 return -1; |
| 2527 #endif | 2534 #endif |
| 2528 } | 2535 } |
| 2529 | 2536 |
| 2530 void BrowserView::InitHangMonitor() { | 2537 void BrowserView::InitHangMonitor() { |
| 2531 #if defined(OS_WIN) | 2538 #if defined(OS_WIN) && !defined(USE_AURA) |
| 2532 PrefService* pref_service = g_browser_process->local_state(); | 2539 PrefService* pref_service = g_browser_process->local_state(); |
| 2533 if (!pref_service) | 2540 if (!pref_service) |
| 2534 return; | 2541 return; |
| 2535 | 2542 |
| 2536 int plugin_message_response_timeout = | 2543 int plugin_message_response_timeout = |
| 2537 pref_service->GetInteger(prefs::kPluginMessageResponseTimeout); | 2544 pref_service->GetInteger(prefs::kPluginMessageResponseTimeout); |
| 2538 int hung_plugin_detect_freq = | 2545 int hung_plugin_detect_freq = |
| 2539 pref_service->GetInteger(prefs::kHungPluginDetectFrequency); | 2546 pref_service->GetInteger(prefs::kHungPluginDetectFrequency); |
| 2540 if ((hung_plugin_detect_freq > 0) && | 2547 if ((hung_plugin_detect_freq > 0) && |
| 2541 hung_window_detector_.Initialize(GetWidget()->GetNativeView(), | 2548 hung_window_detector_.Initialize(GetWidget()->GetNativeView(), |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2674 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { | 2681 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { |
| 2675 // Create the view and the frame. The frame will attach itself via the view | 2682 // Create the view and the frame. The frame will attach itself via the view |
| 2676 // so we don't need to do anything with the pointer. | 2683 // so we don't need to do anything with the pointer. |
| 2677 BrowserView* view = new BrowserView(browser); | 2684 BrowserView* view = new BrowserView(browser); |
| 2678 (new BrowserFrame(view))->InitBrowserFrame(); | 2685 (new BrowserFrame(view))->InitBrowserFrame(); |
| 2679 view->GetWidget()->non_client_view()->SetAccessibleName( | 2686 view->GetWidget()->non_client_view()->SetAccessibleName( |
| 2680 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); | 2687 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| 2681 return view; | 2688 return view; |
| 2682 } | 2689 } |
| 2683 #endif | 2690 #endif |
| OLD | NEW |