b911e6f5a058f8beb6029b09a155b93f1931feaa
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / frame / opaque_browser_frame_view_linux.cc
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
14 OpaqueBrowserFrameViewLinux::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
24 OpaqueBrowserFrameViewLinux::~OpaqueBrowserFrameViewLinux() {
25   views::LinuxUI* ui = views::LinuxUI::instance();
26   if (ui)
27     ui->RemoveWindowButtonOrderObserver(this);
28 }
29
30 ///////////////////////////////////////////////////////////////////////////////
31 // OpaqueBrowserFrameViewLinux,
32 //     views::WindowButtonOrderObserver implementation:
33
34 void OpaqueBrowserFrameViewLinux::OnWindowButtonOrderingChange(
35     const std::vector<views::FrameButton>& leading_buttons,
36     const std::vector<views::FrameButton>& trailing_buttons) {
37   layout_->SetButtonOrdering(leading_buttons, trailing_buttons);
38
39   // We can receive OnWindowButtonOrderingChange events before we've been added
40   // to a Widget. We need a Widget because layout crashes due to dependencies
41   // on a ui::ThemeProvider().
42   if (view_->GetWidget()) {
43     view_->Layout();
44     view_->SchedulePaint();
45   }
46 }
47
48 ///////////////////////////////////////////////////////////////////////////////
49 // OpaqueBrowserFrameViewObserver:
50
51 // static
52 OpaqueBrowserFrameViewPlatformSpecific*
53 OpaqueBrowserFrameViewPlatformSpecific::Create(
54       OpaqueBrowserFrameView* view,
55       OpaqueBrowserFrameViewLayout* layout) {
56   return new OpaqueBrowserFrameViewLinux(view, layout);
57 }