Chromium Code Reviews| Index: ui/views/window/window_button_order_provider.cc |
| diff --git a/ui/views/window/window_button_order_provider.cc b/ui/views/window/window_button_order_provider.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..227348a0771d19faed8d21190fd836e790ab7c95 |
| --- /dev/null |
| +++ b/ui/views/window/window_button_order_provider.cc |
| @@ -0,0 +1,104 @@ |
| +// Copyright 2014 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 "ui/views/window/window_button_order_provider.h" |
| + |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| +#include "ui/views/linux_ui/linux_ui.h" |
| +#include "ui/views/linux_ui/window_button_order_observer.h" |
| +#endif |
| + |
| +namespace views { |
| + |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| +namespace { |
| + |
| +class WindowButtonOrderObserverDelegate : public WindowButtonOrderProvider, |
|
flackr
2014/05/01 15:43:36
I think this implementation of WindowButtonOrderPr
jonross
2014/05/02 17:53:54
Done.
|
| + public WindowButtonOrderObserver { |
| + public: |
| + WindowButtonOrderObserverDelegate(); |
| + virtual ~WindowButtonOrderObserverDelegate(); |
| + |
| + // WindowButtonOrderObserver: |
| + virtual void OnWindowButtonOrderingChange( |
| + const std::vector<views::FrameButton>& leading_buttons, |
| + const std::vector<views::FrameButton>& trailing_buttons) OVERRIDE; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(WindowButtonOrderObserverDelegate); |
| +}; |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// WindowButtonOrderObserverDelegate, public: |
| + |
| +WindowButtonOrderObserverDelegate::WindowButtonOrderObserverDelegate() { |
| + views::LinuxUI* ui = views::LinuxUI::instance(); |
| + if (ui) |
| + ui->AddWindowButtonOrderObserver(this); |
| +} |
| + |
| +WindowButtonOrderObserverDelegate::~WindowButtonOrderObserverDelegate() { |
| + views::LinuxUI* ui = views::LinuxUI::instance(); |
| + if (ui) |
| + ui->RemoveWindowButtonOrderObserver(this); |
| +} |
| + |
| +void WindowButtonOrderObserverDelegate::OnWindowButtonOrderingChange( |
| + const std::vector<views::FrameButton>& leading_buttons, |
| + const std::vector<views::FrameButton>& trailing_buttons) { |
| + SetWindowButtonOrder(leading_buttons, trailing_buttons); |
| +} |
| + |
| +} // namespace |
| +#endif |
| + |
| +// static |
| +WindowButtonOrderProvider* WindowButtonOrderProvider::instance_ = NULL; |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// WindowButtonOrderProvider, public: |
| + |
| +// static |
| +WindowButtonOrderProvider* WindowButtonOrderProvider::GetInstance() { |
| + if (!instance_) { |
| +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
| + instance_ = new WindowButtonOrderObserverDelegate; |
| +#else |
| + instance_ = new WindowButtonOrderProvider; |
| +#endif |
| + } |
| + return instance_; |
| +} |
| + |
| +std::vector<views::FrameButton> const |
| + WindowButtonOrderProvider::GetLeadingButtons() const { |
| + return leading_buttons_; |
| +} |
| + |
| +std::vector<views::FrameButton> const |
| + WindowButtonOrderProvider::GetTrailingButtons() const { |
| + return trailing_buttons_; |
| +} |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// WindowButtonOrderProvider, protected: |
| + |
| +WindowButtonOrderProvider::WindowButtonOrderProvider() { |
| + trailing_buttons_.push_back(views::FRAME_BUTTON_MINIMIZE); |
| + trailing_buttons_.push_back(views::FRAME_BUTTON_MAXIMIZE); |
| + trailing_buttons_.push_back(views::FRAME_BUTTON_CLOSE); |
| +} |
| + |
| +WindowButtonOrderProvider::~WindowButtonOrderProvider() { |
| +} |
| + |
| +void WindowButtonOrderProvider::SetWindowButtonOrder( |
| + const std::vector<views::FrameButton>& leading_buttons, |
| + const std::vector<views::FrameButton>& trailing_buttons) { |
| + leading_buttons_ = leading_buttons; |
| + trailing_buttons_ = trailing_buttons; |
| +} |
| + |
| +} // namespace views |
| + |
|
flackr
2014/05/01 15:43:36
nit: no extra newline at end of file.
|