| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 |
| (...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 856 } | 856 } |
| 857 | 857 |
| 858 bool BrowserView::IsMaximized() const { | 858 bool BrowserView::IsMaximized() const { |
| 859 return frame_->GetWindow()->IsMaximized(); | 859 return frame_->GetWindow()->IsMaximized(); |
| 860 } | 860 } |
| 861 | 861 |
| 862 void BrowserView::SetFullscreen(bool fullscreen) { | 862 void BrowserView::SetFullscreen(bool fullscreen) { |
| 863 if (IsFullscreen() == fullscreen) | 863 if (IsFullscreen() == fullscreen) |
| 864 return; // Nothing to do. | 864 return; // Nothing to do. |
| 865 | 865 |
| 866 // Reduce jankiness during the following position changes by: | |
| 867 // * Hiding the window until it's in the final position | |
| 868 // * Ignoring all intervening Layout() calls, which resize the webpage and | |
| 869 // thus are slow and look ugly | |
| 870 ignore_layout_ = true; | |
| 871 LocationBarView* location_bar = toolbar_->location_bar(); | |
| 872 #if defined(OS_WIN) | 866 #if defined(OS_WIN) |
| 873 AutocompleteEditViewWin* edit_view = | 867 ProcessFullscreen(fullscreen); |
| 874 static_cast<AutocompleteEditViewWin*>(location_bar->location_entry()); | 868 #else |
| 875 #endif | 869 // On Linux changing fullscreen is async. Ask the window to change it's |
| 876 if (IsFullscreen()) { | 870 // fullscreen state, and when done invoke ProcessFullscreen. |
| 877 // Hide the fullscreen bubble as soon as possible, since the mode toggle can | |
| 878 // take enough time for the user to notice. | |
| 879 fullscreen_bubble_.reset(); | |
| 880 } else { | |
| 881 // Move focus out of the location bar if necessary. | |
| 882 views::FocusManager* focus_manager = GetFocusManager(); | |
| 883 DCHECK(focus_manager); | |
| 884 if (focus_manager->GetFocusedView() == location_bar) | |
| 885 focus_manager->ClearFocus(); | |
| 886 | |
| 887 #if defined(OS_WIN) | |
| 888 // If we don't hide the edit and force it to not show until we come out of | |
| 889 // fullscreen, then if the user was on the New Tab Page, the edit contents | |
| 890 // will appear atop the web contents once we go into fullscreen mode. This | |
| 891 // has something to do with how we move the main window while it's hidden; | |
| 892 // if we don't hide the main window below, we don't get this problem. | |
| 893 edit_view->set_force_hidden(true); | |
| 894 ShowWindow(edit_view->m_hWnd, SW_HIDE); | |
| 895 #endif | |
| 896 } | |
| 897 #if defined(OS_WIN) | |
| 898 frame_->GetWindow()->PushForceHidden(); | |
| 899 #endif | |
| 900 | |
| 901 // Notify bookmark bar, so it can set itself to the appropriate drawing state. | |
| 902 if (bookmark_bar_view_.get()) | |
| 903 bookmark_bar_view_->OnFullscreenToggled(fullscreen); | |
| 904 | |
| 905 // Notify extension shelf, so it can set itself to the appropriate drawing | |
| 906 // state. | |
| 907 if (extension_shelf_) | |
| 908 extension_shelf_->OnFullscreenToggled(fullscreen); | |
| 909 | |
| 910 // Toggle fullscreen mode. | |
| 911 frame_->GetWindow()->SetFullscreen(fullscreen); | 871 frame_->GetWindow()->SetFullscreen(fullscreen); |
| 912 | |
| 913 if (fullscreen) { | |
| 914 #if !defined(OS_MACOSX) | |
| 915 bool is_kiosk = | |
| 916 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); | |
| 917 #else | |
| 918 bool is_kiosk = false; | |
| 919 #endif | |
| 920 if (!is_kiosk) { | |
| 921 fullscreen_bubble_.reset(new FullscreenExitBubble(GetWidget(), | |
| 922 browser_.get())); | |
| 923 } | |
| 924 } else { | |
| 925 #if defined(OS_WIN) | |
| 926 // Show the edit again since we're no longer in fullscreen mode. | |
| 927 edit_view->set_force_hidden(false); | |
| 928 ShowWindow(edit_view->m_hWnd, SW_SHOW); | |
| 929 #endif | |
| 930 } | |
| 931 | |
| 932 // Undo our anti-jankiness hacks and force the window to relayout now that | |
| 933 // it's in its final position. | |
| 934 ignore_layout_ = false; | |
| 935 Layout(); | |
| 936 #if defined(OS_WIN) | |
| 937 frame_->GetWindow()->PopForceHidden(); | |
| 938 #endif | 872 #endif |
| 939 } | 873 } |
| 940 | 874 |
| 941 bool BrowserView::IsFullscreen() const { | 875 bool BrowserView::IsFullscreen() const { |
| 942 return frame_->GetWindow()->IsFullscreen(); | 876 return frame_->GetWindow()->IsFullscreen(); |
| 943 } | 877 } |
| 944 | 878 |
| 945 bool BrowserView::IsFullscreenBubbleVisible() const { | 879 bool BrowserView::IsFullscreenBubbleVisible() const { |
| 946 return fullscreen_bubble_.get() ? true : false; | 880 return fullscreen_bubble_.get() ? true : false; |
| 947 } | 881 } |
| 948 | 882 |
| 883 void BrowserView::FullScreenStateChanged() { |
| 884 ProcessFullscreen(IsFullscreen()); |
| 885 } |
| 886 |
| 949 LocationBar* BrowserView::GetLocationBar() const { | 887 LocationBar* BrowserView::GetLocationBar() const { |
| 950 return toolbar_->location_bar(); | 888 return toolbar_->location_bar(); |
| 951 } | 889 } |
| 952 | 890 |
| 953 void BrowserView::SetFocusToLocationBar() { | 891 void BrowserView::SetFocusToLocationBar() { |
| 954 LocationBarView* location_bar = toolbar_->location_bar(); | 892 LocationBarView* location_bar = toolbar_->location_bar(); |
| 955 if (browser_extender_->SetFocusToCompactNavigationBar()) { | 893 if (browser_extender_->SetFocusToCompactNavigationBar()) { |
| 956 // Compact navigation bar got focus. | 894 // Compact navigation bar got focus. |
| 957 } else if (location_bar->IsFocusable()) { | 895 } else if (location_bar->IsFocusable()) { |
| 958 // Location bar got focus. | 896 // Location bar got focus. |
| (...skipping 1247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2206 } else if (new_view) { | 2144 } else if (new_view) { |
| 2207 DCHECK_EQ(0, new_height); | 2145 DCHECK_EQ(0, new_height); |
| 2208 // The heights are the same, but the old view is null. This only happens | 2146 // The heights are the same, but the old view is null. This only happens |
| 2209 // when the height is zero. Zero out the bounds. | 2147 // when the height is zero. Zero out the bounds. |
| 2210 new_view->SetBounds(0, 0, 0, 0); | 2148 new_view->SetBounds(0, 0, 0, 0); |
| 2211 } | 2149 } |
| 2212 *old_view = new_view; | 2150 *old_view = new_view; |
| 2213 return changed; | 2151 return changed; |
| 2214 } | 2152 } |
| 2215 | 2153 |
| 2154 |
| 2155 void BrowserView::ProcessFullscreen(bool fullscreen) { |
| 2156 // Reduce jankiness during the following position changes by: |
| 2157 // * Hiding the window until it's in the final position |
| 2158 // * Ignoring all intervening Layout() calls, which resize the webpage and |
| 2159 // thus are slow and look ugly |
| 2160 ignore_layout_ = true; |
| 2161 LocationBarView* location_bar = toolbar_->location_bar(); |
| 2162 #if defined(OS_WIN) |
| 2163 AutocompleteEditViewWin* edit_view = |
| 2164 static_cast<AutocompleteEditViewWin*>(location_bar->location_entry()); |
| 2165 #endif |
| 2166 if (!fullscreen) { |
| 2167 // Hide the fullscreen bubble as soon as possible, since the mode toggle can |
| 2168 // take enough time for the user to notice. |
| 2169 fullscreen_bubble_.reset(); |
| 2170 } else { |
| 2171 // Move focus out of the location bar if necessary. |
| 2172 views::FocusManager* focus_manager = GetFocusManager(); |
| 2173 DCHECK(focus_manager); |
| 2174 if (focus_manager->GetFocusedView() == location_bar) |
| 2175 focus_manager->ClearFocus(); |
| 2176 |
| 2177 #if defined(OS_WIN) |
| 2178 // If we don't hide the edit and force it to not show until we come out of |
| 2179 // fullscreen, then if the user was on the New Tab Page, the edit contents |
| 2180 // will appear atop the web contents once we go into fullscreen mode. This |
| 2181 // has something to do with how we move the main window while it's hidden; |
| 2182 // if we don't hide the main window below, we don't get this problem. |
| 2183 edit_view->set_force_hidden(true); |
| 2184 ShowWindow(edit_view->m_hWnd, SW_HIDE); |
| 2185 #endif |
| 2186 } |
| 2187 #if defined(OS_WIN) |
| 2188 frame_->GetWindow()->PushForceHidden(); |
| 2189 #endif |
| 2190 |
| 2191 // Notify bookmark bar, so it can set itself to the appropriate drawing state. |
| 2192 if (bookmark_bar_view_.get()) |
| 2193 bookmark_bar_view_->OnFullscreenToggled(fullscreen); |
| 2194 |
| 2195 // Notify extension shelf, so it can set itself to the appropriate drawing |
| 2196 // state. |
| 2197 if (extension_shelf_) |
| 2198 extension_shelf_->OnFullscreenToggled(fullscreen); |
| 2199 |
| 2200 // Toggle fullscreen mode. |
| 2201 #if defined(OS_WIN) |
| 2202 frame_->GetWindow()->SetFullscreen(fullscreen); |
| 2203 #endif // No need to invoke SetFullscreen for linux as this code is executed |
| 2204 // once we're already fullscreen on linux. |
| 2205 |
| 2206 if (fullscreen) { |
| 2207 bool is_kiosk = |
| 2208 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); |
| 2209 if (!is_kiosk) { |
| 2210 fullscreen_bubble_.reset(new FullscreenExitBubble(GetWidget(), |
| 2211 browser_.get())); |
| 2212 } |
| 2213 } else { |
| 2214 #if defined(OS_WIN) |
| 2215 // Show the edit again since we're no longer in fullscreen mode. |
| 2216 edit_view->set_force_hidden(false); |
| 2217 ShowWindow(edit_view->m_hWnd, SW_SHOW); |
| 2218 #endif |
| 2219 } |
| 2220 |
| 2221 // Undo our anti-jankiness hacks and force the window to relayout now that |
| 2222 // it's in its final position. |
| 2223 ignore_layout_ = false; |
| 2224 Layout(); |
| 2225 #if defined(OS_WIN) |
| 2226 frame_->GetWindow()->PopForceHidden(); |
| 2227 #endif |
| 2228 } |
| 2229 |
| 2230 |
| 2216 void BrowserView::LoadAccelerators() { | 2231 void BrowserView::LoadAccelerators() { |
| 2217 #if defined(OS_WIN) | 2232 #if defined(OS_WIN) |
| 2218 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); | 2233 HACCEL accelerator_table = AtlLoadAccelerators(IDR_MAINFRAME); |
| 2219 DCHECK(accelerator_table); | 2234 DCHECK(accelerator_table); |
| 2220 | 2235 |
| 2221 // We have to copy the table to access its contents. | 2236 // We have to copy the table to access its contents. |
| 2222 int count = CopyAcceleratorTable(accelerator_table, 0, 0); | 2237 int count = CopyAcceleratorTable(accelerator_table, 0, 0); |
| 2223 if (count == 0) { | 2238 if (count == 0) { |
| 2224 // Nothing to do in that case. | 2239 // Nothing to do in that case. |
| 2225 return; | 2240 return; |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2411 | 2426 |
| 2412 // static | 2427 // static |
| 2413 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { | 2428 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { |
| 2414 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); | 2429 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); |
| 2415 } | 2430 } |
| 2416 | 2431 |
| 2417 // static | 2432 // static |
| 2418 void BrowserList::AllBrowsersClosed() { | 2433 void BrowserList::AllBrowsersClosed() { |
| 2419 views::Window::CloseAllSecondaryWindows(); | 2434 views::Window::CloseAllSecondaryWindows(); |
| 2420 } | 2435 } |
| OLD | NEW |