1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file. 4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef CHROME_BROWSER_UI_LIBGTK2UI_GCONF_LISTENER_H_ 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define CHROME_BROWSER_UI_LIBGTK2UI_GCONF_LISTENER_H_ 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <gconf/gconf-client.h> 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <gtk/gtk.h> 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <set> 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <string> 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/basictypes.h" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/callback_forward.h" 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h" 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace libgtk2ui { 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class Gtk2UI; 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// On GNOME desktops, subscribes to the gconf key which controlls button order. 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Everywhere else, SetTiltebarButtons() just calls back into BrowserTitlebar 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// with the default ordering. 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass GConfListener { 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public: 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Sends data to the Gtk2UI when available. 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch explicit GConfListener(Gtk2UI* delegate); 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ~GConfListener(); 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private: 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Called whenever the metacity key changes. 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CHROMEG_CALLBACK_2(GConfListener, void, OnChangeNotification, 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GConfClient*, guint, GConfEntry*); 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void GetAndRegister(const char* key_to_subscribe, 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::Callback<void(GConfValue*)>& initial_setter); 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Checks |error|. On error, prints out a message and closes the connection 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // to GConf and reverts to default mode. 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool HandleGError(GError* error, const char* key); 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Parses the return data structure from GConf, falling back to the default 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // value on any error. 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void ParseAndStoreButtonValue(GConfValue* gconf_value); 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void ParseAndStoreMiddleClickValue(GConfValue* gconf_value); 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Gtk2UI* delegate_; 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Pointer to our gconf context. NULL if we aren't on a desktop that uses 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // gconf. 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GConfClient* client_; 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DISALLOW_COPY_AND_ASSIGN(GConfListener); 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}; 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace libgtk2ui 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // CHROME_BROWSER_UI_LIBGTK2UI_GCONF_LISTENER_H_ 59