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 |