| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/opaque_browser_frame_view_linux.h" | 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | |
| 8 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" | 7 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" |
| 9 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" | 8 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" |
| 10 #include "chrome/common/chrome_switches.h" | |
| 11 #include "ui/views/linux_ui/linux_ui.h" | 9 #include "ui/views/linux_ui/linux_ui.h" |
| 12 | 10 |
| 13 /////////////////////////////////////////////////////////////////////////////// | 11 /////////////////////////////////////////////////////////////////////////////// |
| 14 // OpaqueBrowserFrameViewLinux, public: | 12 // OpaqueBrowserFrameViewLinux, public: |
| 15 | 13 |
| 16 OpaqueBrowserFrameViewLinux::OpaqueBrowserFrameViewLinux( | 14 OpaqueBrowserFrameViewLinux::OpaqueBrowserFrameViewLinux( |
| 17 OpaqueBrowserFrameView* view, | 15 OpaqueBrowserFrameView* view, |
| 18 OpaqueBrowserFrameViewLayout* layout) | 16 OpaqueBrowserFrameViewLayout* layout) |
| 19 : view_(view), | 17 : view_(view), |
| 20 layout_(layout) { | 18 layout_(layout) { |
| 21 views::LinuxUI* ui = views::LinuxUI::instance(); | 19 views::LinuxUI* ui = views::LinuxUI::instance(); |
| 22 if (ui) | 20 if (ui) |
| 23 ui->AddWindowButtonOrderObserver(this); | 21 ui->AddWindowButtonOrderObserver(this); |
| 24 } | 22 } |
| 25 | 23 |
| 26 OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() { | 24 OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() { |
| 27 views::LinuxUI* ui = views::LinuxUI::instance(); | 25 views::LinuxUI* ui = views::LinuxUI::instance(); |
| 28 if (ui) | 26 if (ui) |
| 29 ui->RemoveWindowButtonOrderObserver(this); | 27 ui->RemoveWindowButtonOrderObserver(this); |
| 30 } | 28 } |
| 31 | 29 |
| 32 /////////////////////////////////////////////////////////////////////////////// | 30 /////////////////////////////////////////////////////////////////////////////// |
| 33 // OpaqueBrowserFrameViewLinux, | 31 // OpaqueBrowserFrameViewLinux, |
| 34 // OpaqueBrowserFrameViewPlatformSpecific implementation: | |
| 35 | |
| 36 bool OpaqueBrowserFrameViewLinux::ShouldShowCaptionButtons() const { | |
| 37 // Do not show caption buttons if the system title bar is being used. | |
| 38 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUseSystemTitleBar)) | |
| 39 return false; | |
| 40 | |
| 41 // On Ubuntu Unity, if the window is maximized, the system will provide | |
| 42 // caption buttons, so Chrome should not add its own. | |
| 43 views::LinuxUI* ui = views::LinuxUI::instance(); | |
| 44 return !(view_->IsMaximized() && ui && ui->UnityIsRunning()); | |
| 45 } | |
| 46 | |
| 47 bool OpaqueBrowserFrameViewLinux::ShouldShowTitleBar() const { | |
| 48 // On Ubuntu Unity, if the window is maximized, the system will provide | |
| 49 // a title bar, so Chrome should not add its own. | |
| 50 views::LinuxUI* ui = views::LinuxUI::instance(); | |
| 51 return !(view_->IsMaximized() && ui && ui->UnityIsRunning()); | |
| 52 } | |
| 53 | |
| 54 /////////////////////////////////////////////////////////////////////////////// | |
| 55 // OpaqueBrowserFrameViewLinux, | |
| 56 // views::WindowButtonOrderObserver implementation: | 32 // views::WindowButtonOrderObserver implementation: |
| 57 | 33 |
| 58 void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange( | 34 void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange( |
| 59 const std::vector<views::FrameButton>& leading_buttons, | 35 const std::vector<views::FrameButton>& leading_buttons, |
| 60 const std::vector<views::FrameButton>& trailing_buttons) { | 36 const std::vector<views::FrameButton>& trailing_buttons) { |
| 61 layout_->SetButtonOrdering(leading_buttons, trailing_buttons); | 37 layout_->SetButtonOrdering(leading_buttons, trailing_buttons); |
| 62 | 38 |
| 63 // We can receive OnWindowButtonOrderingChange events before we've been added | 39 // We can receive OnWindowButtonOrderingChange events before we've been added |
| 64 // to a Widget. We need a Widget because layout crashes due to dependencies | 40 // to a Widget. We need a Widget because layout crashes due to dependencies |
| 65 // on a ui::ThemeProvider(). | 41 // on a ui::ThemeProvider(). |
| 66 if (view_->GetWidget()) { | 42 if (view_->GetWidget()) { |
| 67 view_->Layout(); | 43 view_->Layout(); |
| 68 view_->SchedulePaint(); | 44 view_->SchedulePaint(); |
| 69 } | 45 } |
| 70 } | 46 } |
| 71 | 47 |
| 72 /////////////////////////////////////////////////////////////////////////////// | 48 /////////////////////////////////////////////////////////////////////////////// |
| 73 // OpaqueBrowserFrameViewObserver: | 49 // OpaqueBrowserFrameViewObserver: |
| 74 | 50 |
| 75 // static | 51 // static |
| 76 OpaqueBrowserFrameViewPlatformSpecific* | 52 OpaqueBrowserFrameViewPlatformSpecific* |
| 77 OpaqueBrowserFrameViewPlatformSpecific::Create( | 53 OpaqueBrowserFrameViewPlatformSpecific::Create( |
| 78 OpaqueBrowserFrameView* view, | 54 OpaqueBrowserFrameView* view, |
| 79 OpaqueBrowserFrameViewLayout* layout) { | 55 OpaqueBrowserFrameViewLayout* layout) { |
| 80 return new OpaqueBrowserFrameViewLinux(view, layout); | 56 return new OpaqueBrowserFrameViewLinux(view, layout); |
| 81 } | 57 } |
| OLD | NEW |