Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1513)

Unified Diff: chrome/browser/ui/gtk/titlebar_listener.cc

Issue 11338028: Add support for XFWM titlebar buttons. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698