opaque_browser_frame_view_linux.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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/themes/theme_service.h" 8#include "chrome/browser/themes/theme_service_factory.h" 9#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" 10#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h" 11#include "ui/views/linux_ui/linux_ui.h" 12 13/////////////////////////////////////////////////////////////////////////////// 14// OpaqueBrowserFrameViewLinux, public: 15 16OpaqueBrowserFrameViewLinux::OpaqueBrowserFrameViewLinux( 17 OpaqueBrowserFrameView* view, 18 OpaqueBrowserFrameViewLayout* layout, 19 Profile* profile) 20 : view_(view), 21 layout_(layout), 22 theme_service_(ThemeServiceFactory::GetForProfile(profile)) { 23 views::LinuxUI* ui = views::LinuxUI::instance(); 24 if (ui) 25 ui->AddWindowButtonOrderObserver(this); 26} 27 28OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() { 29 views::LinuxUI* ui = views::LinuxUI::instance(); 30 if (ui) 31 ui->RemoveWindowButtonOrderObserver(this); 32} 33 34bool OpaqueBrowserFrameViewLinux::IsUsingNativeTheme() { 35 // On X11, this does the correct thing. On Windows, UsingNativeTheme() will 36 // return true when using the default blue theme too. 37 return theme_service_->UsingNativeTheme(); 38} 39 40/////////////////////////////////////////////////////////////////////////////// 41// OpaqueBrowserFrameViewLinux, 42// views::WindowButtonOrderObserver implementation: 43 44void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange( 45 const std::vector<views::FrameButton>& leading_buttons, 46 const std::vector<views::FrameButton>& trailing_buttons) { 47 layout_->SetButtonOrdering(leading_buttons, trailing_buttons); 48 49 // We can receive OnWindowButtonOrderingChange events before we've been added 50 // to a Widget. We need a Widget because layout crashes due to dependencies 51 // on a ui::ThemeProvider(). 52 if (view_->GetWidget()) { 53 view_->Layout(); 54 view_->SchedulePaint(); 55 } 56} 57 58/////////////////////////////////////////////////////////////////////////////// 59// OpaqueBrowserFrameViewObserver: 60 61// static 62OpaqueBrowserFrameViewPlatformSpecific* 63OpaqueBrowserFrameViewPlatformSpecific::Create( 64 OpaqueBrowserFrameView* view, 65 OpaqueBrowserFrameViewLayout* layout, 66 Profile* profile) { 67 return new OpaqueBrowserFrameViewLinux(view, layout, profile); 68} 69