| 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_frame_gtk.h" | 5 #include "chrome/browser/ui/views/frame/browser_frame_gtk.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 9 #include "chrome/browser/themes/theme_service.h" | 9 #include "chrome/browser/themes/theme_service.h" |
| 10 #include "chrome/browser/themes/theme_service_factory.h" | 10 #include "chrome/browser/themes/theme_service_factory.h" |
| 11 #include "chrome/browser/ui/status_bubble.h" | 11 #include "chrome/browser/ui/status_bubble.h" |
| 12 #include "chrome/browser/ui/views/frame/app_panel_browser_frame_view.h" | 12 #include "chrome/browser/ui/views/frame/app_panel_browser_frame_view.h" |
| 13 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" | 13 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h" |
| 14 #include "chrome/browser/ui/views/frame/browser_root_view.h" | 14 #include "chrome/browser/ui/views/frame/browser_root_view.h" |
| 15 #include "chrome/browser/ui/views/frame/browser_view.h" | 15 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 16 #include "ui/gfx/font.h" | 16 #include "ui/gfx/font.h" |
| 17 #include "views/widget/root_view.h" | 17 #include "views/widget/root_view.h" |
| 18 #include "views/window/hit_test.h" | 18 #include "views/window/hit_test.h" |
| 19 | 19 |
| 20 #if !defined(OS_CHROMEOS) | |
| 21 // static (Factory method.) | |
| 22 BrowserFrame* BrowserFrame::Create(BrowserView* browser_view, | |
| 23 Profile* profile) { | |
| 24 BrowserFrameGtk* frame = new BrowserFrameGtk(browser_view, profile); | |
| 25 frame->InitBrowserFrame(); | |
| 26 return frame; | |
| 27 } | |
| 28 #endif | |
| 29 | |
| 30 // static | 20 // static |
| 31 const gfx::Font& BrowserFrame::GetTitleFont() { | 21 const gfx::Font& BrowserFrame::GetTitleFont() { |
| 32 static gfx::Font *title_font = new gfx::Font(); | 22 static gfx::Font *title_font = new gfx::Font(); |
| 33 return *title_font; | 23 return *title_font; |
| 34 } | 24 } |
| 35 | 25 |
| 36 BrowserFrameGtk::BrowserFrameGtk(BrowserView* browser_view, Profile* profile) | 26 BrowserFrameGtk::BrowserFrameGtk(BrowserFrame* browser_frame, |
| 37 : BrowserFrame(browser_view), | 27 BrowserView* browser_view) |
| 38 ALLOW_THIS_IN_INITIALIZER_LIST(delegate_(this)), | 28 : views::WindowGtk(browser_frame), |
| 39 browser_view_(browser_view) { | 29 browser_view_(browser_view) { |
| 40 set_native_browser_frame(this); | 30 // Don't focus anything on creation, selecting a tab will set the focus. |
| 41 browser_view_->set_frame(this); | 31 set_focus_on_creation(false); |
| 42 } | 32 } |
| 43 | 33 |
| 44 BrowserFrameGtk::~BrowserFrameGtk() { | 34 BrowserFrameGtk::~BrowserFrameGtk() { |
| 45 } | 35 } |
| 46 | 36 |
| 47 void BrowserFrameGtk::InitBrowserFrame() { | |
| 48 WindowGtk::GetWindow()->InitWindow(views::Window::InitParams(browser_view_)); | |
| 49 // Don't focus anything on creation, selecting a tab will set the focus. | |
| 50 } | |
| 51 | |
| 52 //////////////////////////////////////////////////////////////////////////////// | 37 //////////////////////////////////////////////////////////////////////////////// |
| 53 // BrowserFrameGtk, NativeBrowserFrame implementation: | 38 // BrowserFrameGtk, NativeBrowserFrame implementation: |
| 54 | 39 |
| 55 views::NativeWindow* BrowserFrameGtk::AsNativeWindow() { | 40 views::NativeWindow* BrowserFrameGtk::AsNativeWindow() { |
| 56 return this; | 41 return this; |
| 57 } | 42 } |
| 58 | 43 |
| 59 const views::NativeWindow* BrowserFrameGtk::AsNativeWindow() const { | 44 const views::NativeWindow* BrowserFrameGtk::AsNativeWindow() const { |
| 60 return this; | 45 return this; |
| 61 } | 46 } |
| 62 | 47 |
| 63 BrowserNonClientFrameView* BrowserFrameGtk::CreateBrowserNonClientFrameView() { | |
| 64 return browser::CreateBrowserNonClientFrameView(this, browser_view_); | |
| 65 } | |
| 66 | |
| 67 int BrowserFrameGtk::GetMinimizeButtonOffset() const { | 48 int BrowserFrameGtk::GetMinimizeButtonOffset() const { |
| 68 NOTIMPLEMENTED(); | 49 NOTIMPLEMENTED(); |
| 69 return 0; | 50 return 0; |
| 70 } | 51 } |
| 71 | 52 |
| 72 ThemeProvider* BrowserFrameGtk::GetThemeProviderForFrame() const { | |
| 73 // This is implemented for a different interface than GetThemeProvider is, | |
| 74 // but they mean the same things. | |
| 75 return GetThemeProvider(); | |
| 76 } | |
| 77 | |
| 78 bool BrowserFrameGtk::AlwaysUseNativeFrame() const { | |
| 79 return false; | |
| 80 } | |
| 81 | |
| 82 void BrowserFrameGtk::TabStripDisplayModeChanged() { | 53 void BrowserFrameGtk::TabStripDisplayModeChanged() { |
| 83 if (GetRootView()->has_children()) { | 54 if (GetWidget()->GetRootView()->has_children()) { |
| 84 // Make sure the child of the root view gets Layout again. | 55 // Make sure the child of the root view gets Layout again. |
| 85 GetRootView()->GetChildViewAt(0)->InvalidateLayout(); | 56 GetWidget()->GetRootView()->GetChildViewAt(0)->InvalidateLayout(); |
| 86 } | 57 } |
| 87 GetRootView()->Layout(); | 58 GetWidget()->GetRootView()->Layout(); |
| 88 } | 59 } |
| 89 | 60 |
| 90 //////////////////////////////////////////////////////////////////////////////// | 61 //////////////////////////////////////////////////////////////////////////////// |
| 91 // BrowserFrameGtk, WindowGtk overrides : | 62 // BrowserFrameGtk, WindowGtk overrides : |
| 92 | 63 |
| 93 ThemeProvider* BrowserFrameGtk::GetThemeProvider() const { | |
| 94 return ThemeServiceFactory::GetForProfile( | |
| 95 browser_view_->browser()->profile()); | |
| 96 } | |
| 97 | |
| 98 void BrowserFrameGtk::SetInitialFocus() { | |
| 99 browser_view_->RestoreFocus(); | |
| 100 } | |
| 101 | |
| 102 views::RootView* BrowserFrameGtk::CreateRootView() { | |
| 103 return delegate_->DelegateCreateRootView(); | |
| 104 } | |
| 105 | |
| 106 bool BrowserFrameGtk::GetAccelerator(int cmd_id, | |
| 107 ui::Accelerator* accelerator) { | |
| 108 return browser_view_->GetAccelerator(cmd_id, accelerator); | |
| 109 } | |
| 110 | |
| 111 views::NonClientFrameView* BrowserFrameGtk::CreateFrameViewForWindow() { | |
| 112 return delegate_->DelegateCreateFrameViewForWindow(); | |
| 113 } | |
| 114 | |
| 115 gboolean BrowserFrameGtk::OnWindowStateEvent(GtkWidget* widget, | 64 gboolean BrowserFrameGtk::OnWindowStateEvent(GtkWidget* widget, |
| 116 GdkEventWindowState* event) { | 65 GdkEventWindowState* event) { |
| 117 bool was_full_screen = IsFullscreen(); | 66 bool was_full_screen = IsFullscreen(); |
| 118 gboolean result = views::WindowGtk::OnWindowStateEvent(widget, event); | 67 gboolean result = views::WindowGtk::OnWindowStateEvent(widget, event); |
| 119 if ((!IsVisible() || IsMinimized()) && browser_view_->GetStatusBubble()) { | 68 if ((!IsVisible() || IsMinimized()) && browser_view_->GetStatusBubble()) { |
| 120 // The window is effectively hidden. We have to hide the status bubble as | 69 // The window is effectively hidden. We have to hide the status bubble as |
| 121 // unlike windows gtk has no notion of child windows that are hidden along | 70 // unlike windows gtk has no notion of child windows that are hidden along |
| 122 // with the parent. | 71 // with the parent. |
| 123 browser_view_->GetStatusBubble()->Hide(); | 72 browser_view_->GetStatusBubble()->Hide(); |
| 124 } | 73 } |
| 125 if (was_full_screen != IsFullscreen()) | 74 if (was_full_screen != IsFullscreen()) |
| 126 browser_view_->FullScreenStateChanged(); | 75 browser_view_->FullScreenStateChanged(); |
| 127 return result; | 76 return result; |
| 128 } | 77 } |
| 129 | 78 |
| 130 gboolean BrowserFrameGtk::OnConfigureEvent(GtkWidget* widget, | 79 gboolean BrowserFrameGtk::OnConfigureEvent(GtkWidget* widget, |
| 131 GdkEventConfigure* event) { | 80 GdkEventConfigure* event) { |
| 132 browser_view_->WindowMoved(); | 81 browser_view_->WindowMoved(); |
| 133 return views::WindowGtk::OnConfigureEvent(widget, event); | 82 return views::WindowGtk::OnConfigureEvent(widget, event); |
| 134 } | 83 } |
| 84 |
| 85 |
| 86 //////////////////////////////////////////////////////////////////////////////// |
| 87 // NativeBrowserFrame, public: |
| 88 |
| 89 // static |
| 90 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame( |
| 91 BrowserFrame* browser_frame, |
| 92 BrowserView* browser_view) { |
| 93 return new BrowserFrameGtk(browser_frame, browser_view); |
| 94 } |
| 95 |
| OLD | NEW |