| Index: chrome/browser/ui/gtk/titlebar_listener.cc
|
| ===================================================================
|
| --- chrome/browser/ui/gtk/titlebar_listener.cc (revision 0)
|
| +++ chrome/browser/ui/gtk/titlebar_listener.cc (revision 0)
|
| @@ -0,0 +1,87 @@
|
| +// Copyright (c) 2012 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/gtk/titlebar_listener.h"
|
| +
|
| +#include "base/environment.h"
|
| +#include "base/memory/singleton.h"
|
| +#include "base/nix/xdg_util.h"
|
| +#include "chrome/browser/ui/gtk/browser_titlebar.h"
|
| +#include "chrome/browser/ui/gtk/xfwm_titlebar_listener.h"
|
| +#include "ui/base/x/x11_util.h"
|
| +
|
| +#if defined(USE_GCONF)
|
| +#include "chrome/browser/ui/gtk/gconf_titlebar_listener.h"
|
| +#endif
|
| +
|
| +namespace {
|
| +
|
| +class DefaultTitlebarListener : public TitlebarListener::Delegate {
|
| + public:
|
| + DefaultTitlebarListener() {}
|
| +
|
| + private:
|
| + // Refcounted.
|
| + ~DefaultTitlebarListener() {}
|
| +
|
| + // TitlebarListener::Delegate implementation.
|
| + virtual bool Init() OVERRIDE {
|
| + return true;
|
| + }
|
| +
|
| + virtual std::string GetCurrentValue() OVERRIDE {
|
| + return BrowserTitlebar::kDefaultButtonString;
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DefaultTitlebarListener);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +TitlebarListener::TitlebarListener() {
|
| + scoped_ptr<base::Environment> env(base::Environment::Create());
|
| + base::nix::DesktopEnvironment desktop =
|
| + base::nix::GetDesktopEnvironment(env.get());
|
| +#if defined(USE_GCONF)
|
| + if (desktop == base::nix::DESKTOP_ENVIRONMENT_GNOME ||
|
| + desktop == base::nix::DESKTOP_ENVIRONMENT_UNITY ||
|
| + ui::GuessWindowManager() == ui::WM_METACITY) {
|
| + delegate_ = new GConfTitlebarListener;
|
| + }
|
| +#endif
|
| + if (desktop == base::nix::DESKTOP_ENVIRONMENT_XFCE)
|
| + delegate_ = new XfwmTitlebarListener;
|
| +
|
| + // See if the existing |delegate_| initializes correctly.
|
| + if (delegate_.get() && delegate_->Init())
|
| + return;
|
| +
|
| + // No existing |delegate_| or it did not initialize correctly.
|
| + // Fallback to DefaultTitlebarListener.
|
| + delegate_ = new DefaultTitlebarListener;
|
| +}
|
| +
|
| +TitlebarListener::~TitlebarListener() {}
|
| +
|
| +// static
|
| +TitlebarListener* TitlebarListener::GetInstance() {
|
| + return Singleton<TitlebarListener>::get();
|
| +}
|
| +
|
| +void TitlebarListener::SetTitlebarButtons(BrowserTitlebar* titlebar) {
|
| + titlebars_.insert(titlebar);
|
| + titlebar->BuildButtons(delegate_->GetCurrentValue());
|
| +}
|
| +
|
| +void TitlebarListener::RemoveObserver(BrowserTitlebar* titlebar) {
|
| + titlebars_.erase(titlebar);
|
| +}
|
| +
|
| +void TitlebarListener::SetTitleBars(const std::string& title_value) {
|
| + for (std::set<BrowserTitlebar*>::const_iterator it = titlebars_.begin();
|
| + it != titlebars_.end();
|
| + ++it) {
|
| + (*it)->BuildButtons(title_value);
|
| + }
|
| +}
|
|
|
| Property changes on: chrome/browser/ui/gtk/titlebar_listener.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|