blob: b911e6f5a058f8beb6029b09a155b93f1931feaa [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_linux.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
#include "ui/views/linux_ui/linux_ui.h"
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameViewLinux, public:
OpaqueBrowserFrameViewLinux::OpaqueBrowserFrameViewLinux(
OpaqueBrowserFrameView* view,
OpaqueBrowserFrameViewLayout* layout)
: view_(view),
layout_(layout) {
views::LinuxUI* ui = views::LinuxUI::instance();
if (ui)
ui->AddWindowButtonOrderObserver(this);
}
OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() {
views::LinuxUI* ui = views::LinuxUI::instance();
if (ui)
ui->RemoveWindowButtonOrderObserver(this);
}
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameViewLinux,
// views::WindowButtonOrderObserver implementation:
void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange(
const std::vector<views::FrameButton>& leading_buttons,
const std::vector<views::FrameButton>& trailing_buttons) {
layout_->SetButtonOrdering(leading_buttons, trailing_buttons);
// We can receive OnWindowButtonOrderingChange events before we've been added
// to a Widget. We need a Widget because layout crashes due to dependencies
// on a ui::ThemeProvider().
if (view_->GetWidget()) {
view_->Layout();
view_->SchedulePaint();
}
}
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameViewObserver:
// static
OpaqueBrowserFrameViewPlatformSpecific*
OpaqueBrowserFrameViewPlatformSpecific::Create(
OpaqueBrowserFrameView* view,
OpaqueBrowserFrameViewLayout* layout) {
return new OpaqueBrowserFrameViewLinux(view, layout);
}