| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_aura.h" | 5 #include "chrome/browser/ui/views/frame/browser_frame_aura.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | |
| 8 #include "ash/shell.h" | |
| 9 #include "base/command_line.h" | |
| 10 #include "chrome/browser/chromeos/status/status_area_view.h" | |
| 11 #include "chrome/browser/ui/views/ash/chrome_shell_delegate.h" | |
| 12 #include "chrome/browser/ui/views/frame/browser_view.h" | 7 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 13 #include "ui/aura/client/aura_constants.h" | 8 #include "ui/aura/client/aura_constants.h" |
| 14 #include "ui/aura/window.h" | 9 #include "ui/aura/window.h" |
| 15 #include "ui/aura/window_observer.h" | 10 #include "ui/aura/window_observer.h" |
| 16 #include "ui/gfx/font.h" | 11 #include "ui/gfx/font.h" |
| 17 #include "ui/views/background.h" | |
| 18 | |
| 19 namespace { | |
| 20 | |
| 21 //////////////////////////////////////////////////////////////////////////////// | |
| 22 // StatusAreaBoundsWatcher | |
| 23 | |
| 24 class StatusAreaBoundsWatcher : public aura::WindowObserver { | |
| 25 public: | |
| 26 explicit StatusAreaBoundsWatcher(BrowserFrame* frame) | |
| 27 : frame_(frame), | |
| 28 status_area_window_(NULL) { | |
| 29 StartWatch(); | |
| 30 } | |
| 31 | |
| 32 virtual ~StatusAreaBoundsWatcher() { | |
| 33 StopWatch(); | |
| 34 } | |
| 35 | |
| 36 private: | |
| 37 void StartWatch() { | |
| 38 DCHECK(ChromeShellDelegate::instance()); | |
| 39 | |
| 40 StatusAreaView* status_area = | |
| 41 ChromeShellDelegate::instance()->GetStatusArea(); | |
| 42 if (!status_area) | |
| 43 return; | |
| 44 | |
| 45 StopWatch(); | |
| 46 status_area_window_ = status_area->GetWidget()->GetNativeWindow(); | |
| 47 status_area_window_->AddObserver(this); | |
| 48 } | |
| 49 | |
| 50 void StopWatch() { | |
| 51 if (status_area_window_) { | |
| 52 status_area_window_->RemoveObserver(this); | |
| 53 status_area_window_ = NULL; | |
| 54 } | |
| 55 } | |
| 56 | |
| 57 // Overridden from aura::WindowObserver: | |
| 58 virtual void OnWindowBoundsChanged(aura::Window* window, | |
| 59 const gfx::Rect& bounds) OVERRIDE { | |
| 60 DCHECK(window == status_area_window_); | |
| 61 | |
| 62 // Triggers frame layout when the bounds of status area changed. | |
| 63 frame_->TabStripDisplayModeChanged(); | |
| 64 } | |
| 65 | |
| 66 virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE { | |
| 67 DCHECK(window == status_area_window_); | |
| 68 status_area_window_ = NULL; | |
| 69 } | |
| 70 | |
| 71 BrowserFrame* frame_; | |
| 72 aura::Window* status_area_window_; | |
| 73 | |
| 74 DISALLOW_COPY_AND_ASSIGN(StatusAreaBoundsWatcher); | |
| 75 }; | |
| 76 | |
| 77 } // namespace | |
| 78 | 12 |
| 79 //////////////////////////////////////////////////////////////////////////////// | 13 //////////////////////////////////////////////////////////////////////////////// |
| 80 // BrowserFrameAura::WindowPropertyWatcher | 14 // BrowserFrameAura::WindowPropertyWatcher |
| 81 | 15 |
| 82 class BrowserFrameAura::WindowPropertyWatcher : public aura::WindowObserver { | 16 class BrowserFrameAura::WindowPropertyWatcher : public aura::WindowObserver { |
| 83 public: | 17 public: |
| 84 explicit WindowPropertyWatcher(BrowserFrameAura* browser_frame_aura, | 18 explicit WindowPropertyWatcher(BrowserFrameAura* browser_frame_aura, |
| 85 BrowserFrame* browser_frame) | 19 BrowserFrame* browser_frame) |
| 86 : browser_frame_aura_(browser_frame_aura), | 20 : browser_frame_aura_(browser_frame_aura), |
| 87 browser_frame_(browser_frame) {} | 21 browser_frame_(browser_frame) {} |
| (...skipping 10 matching lines...) Expand all Loading... |
| 98 browser_frame_->non_client_view()->UpdateFrame(); | 32 browser_frame_->non_client_view()->UpdateFrame(); |
| 99 | 33 |
| 100 // When migrating from regular ChromeOS to Aura, windows can have saved | 34 // When migrating from regular ChromeOS to Aura, windows can have saved |
| 101 // restore bounds that are exactly equal to the maximized bounds. Thus when | 35 // restore bounds that are exactly equal to the maximized bounds. Thus when |
| 102 // you hit maximize, there is no resize and the layout doesn't get | 36 // you hit maximize, there is no resize and the layout doesn't get |
| 103 // refreshed. This can also theoretically happen if a user drags a window to | 37 // refreshed. This can also theoretically happen if a user drags a window to |
| 104 // 0,0 then resizes it to fill the workspace, then hits maximize. We need | 38 // 0,0 then resizes it to fill the workspace, then hits maximize. We need |
| 105 // to force a layout on show state changes. crbug.com/108073 | 39 // to force a layout on show state changes. crbug.com/108073 |
| 106 if (browser_frame_->non_client_view()) | 40 if (browser_frame_->non_client_view()) |
| 107 browser_frame_->non_client_view()->Layout(); | 41 browser_frame_->non_client_view()->Layout(); |
| 108 | |
| 109 // Watch for status area bounds change for maximized browser window in Aura | |
| 110 // compact mode. | |
| 111 if (ash::Shell::GetInstance()->IsWindowModeCompact() && | |
| 112 browser_frame_aura_->IsMaximized()) | |
| 113 status_area_watcher_.reset(new StatusAreaBoundsWatcher(browser_frame_)); | |
| 114 else | |
| 115 status_area_watcher_.reset(); | |
| 116 } | 42 } |
| 117 | 43 |
| 118 private: | 44 private: |
| 119 BrowserFrameAura* browser_frame_aura_; | 45 BrowserFrameAura* browser_frame_aura_; |
| 120 BrowserFrame* browser_frame_; | 46 BrowserFrame* browser_frame_; |
| 121 scoped_ptr<StatusAreaBoundsWatcher> status_area_watcher_; | |
| 122 | 47 |
| 123 DISALLOW_COPY_AND_ASSIGN(WindowPropertyWatcher); | 48 DISALLOW_COPY_AND_ASSIGN(WindowPropertyWatcher); |
| 124 }; | 49 }; |
| 125 | 50 |
| 126 /////////////////////////////////////////////////////////////////////////////// | 51 /////////////////////////////////////////////////////////////////////////////// |
| 127 // BrowserFrameAura, public: | 52 // BrowserFrameAura, public: |
| 128 | 53 |
| 129 BrowserFrameAura::BrowserFrameAura(BrowserFrame* browser_frame, | 54 BrowserFrameAura::BrowserFrameAura(BrowserFrame* browser_frame, |
| 130 BrowserView* browser_view) | 55 BrowserView* browser_view) |
| 131 : views::NativeWidgetAura(browser_frame), | 56 : views::NativeWidgetAura(browser_frame), |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 | 102 |
| 178 //////////////////////////////////////////////////////////////////////////////// | 103 //////////////////////////////////////////////////////////////////////////////// |
| 179 // NativeBrowserFrame, public: | 104 // NativeBrowserFrame, public: |
| 180 | 105 |
| 181 // static | 106 // static |
| 182 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame( | 107 NativeBrowserFrame* NativeBrowserFrame::CreateNativeBrowserFrame( |
| 183 BrowserFrame* browser_frame, | 108 BrowserFrame* browser_frame, |
| 184 BrowserView* browser_view) { | 109 BrowserView* browser_view) { |
| 185 return new BrowserFrameAura(browser_frame, browser_view); | 110 return new BrowserFrameAura(browser_frame, browser_view); |
| 186 } | 111 } |
| OLD | NEW |