opaque_browser_frame_view_linux.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.h" 6 7#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" 8#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" 9#include "ui/views/linux_ui/linux_ui.h" 10 11/////////////////////////////////////////////////////////////////////////////// 12// OpaqueBrowserFrameViewLinux, public: 13 14OpaqueBrowserFrameViewLinux::OpaqueBrowserFrameViewLinux( 15 OpaqueBrowserFrameView* view, 16 OpaqueBrowserFrameViewLayout* layout) 17 : view_(view), 18 layout_(layout) { 19 views::LinuxUI* ui = views::LinuxUI::instance(); 20 if (ui) 21 ui->AddWindowButtonOrderObserver(this); 22} 23 24OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() { 25 views::LinuxUI* ui = views::LinuxUI::instance(); 26 if (ui) 27 ui->RemoveWindowButtonOrderObserver(this); 28} 29 30/////////////////////////////////////////////////////////////////////////////// 31// OpaqueBrowserFrameViewLinux, 32// OpaqueBrowserFrameViewPlatformSpecific implementation: 33 34bool OpaqueBrowserFrameViewLinux::ShouldShowCaptionButtons() const { 35 // On Ubuntu Unity, if the window is maximized, the system will provide 36 // caption buttons, so Chrome should not add its own. 37 views::LinuxUI* ui = views::LinuxUI::instance(); 38 return !(view_->IsMaximized() && ui && ui->UnityIsRunning()); 39} 40 41/////////////////////////////////////////////////////////////////////////////// 42// OpaqueBrowserFrameViewLinux, 43// views::WindowButtonOrderObserver implementation: 44 45void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange( 46 const std::vector<views::FrameButton>& leading_buttons, 47 const std::vector<views::FrameButton>& trailing_buttons) { 48 layout_->SetButtonOrdering(leading_buttons, trailing_buttons); 49 50 // We can receive OnWindowButtonOrderingChange events before we've been added 51 // to a Widget. We need a Widget because layout crashes due to dependencies 52 // on a ui::ThemeProvider(). 53 if (view_->GetWidget()) { 54 view_->Layout(); 55 view_->SchedulePaint(); 56 } 57} 58 59/////////////////////////////////////////////////////////////////////////////// 60// OpaqueBrowserFrameViewObserver: 61 62// static 63OpaqueBrowserFrameViewPlatformSpecific* 64OpaqueBrowserFrameViewPlatformSpecific::Create( 65 OpaqueBrowserFrameView* view, 66 OpaqueBrowserFrameViewLayout* layout) { 67 return new OpaqueBrowserFrameViewLinux(view, layout); 68} 69