Back to index

lightning-sunbird  0.9+nobinonly
nsSystemPref.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* vim:expandtab:shiftwidth=4:tabstop=4:
00003  */
00004 /* ***** BEGIN LICENSE BLOCK *****
00005  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
00006  *
00007  *
00008  * The contents of this file are subject to the Mozilla Public
00009  * License Version 1.1 (the "License"); you may not use this file
00010  * except in compliance with the License. You may obtain a copy of
00011  * the License at http://www.mozilla.org/MPL/
00012  *
00013  * Software distributed under the License is distributed on an "AS
00014  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
00015  * implied. See the License for the specific language governing
00016  * rights and limitations under the License.
00017  *
00018  * The Original Code is mozilla.org code.
00019  *
00020  * The Initial Developer of the Original Code is Sun Microsystems, Inc.
00021  * Portions created by Sun Microsystems are Copyright (C) 2003 Sun
00022  * Microsystems, Inc. All Rights Reserved.
00023  *
00024  * Original Author: Bolian Yin (bolian.yin@sun.com)
00025  *
00026  * Contributor(s):
00027  *
00028  * Alternatively, the contents of this file may be used under the terms of
00029  * either the GNU General Public License Version 2 or later (the "GPL"), or
00030  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00031  * in which case the provisions of the GPL or the LGPL are applicable instead
00032  * of those above. If you wish to allow use of your version of this file only
00033  * under the terms of either the GPL or the LGPL, and not to allow others to
00034  * use your version of this file under the terms of the NPL, indicate your
00035  * decision by deleting the provisions above and replace them with the notice
00036  * and other provisions required by the GPL or the LGPL. If you do not delete
00037  * the provisions above, a recipient may use your version of this file under
00038  * the terms of any one of the NPL, the GPL or the LGPL.
00039  *
00040  * ***** END LICENSE BLOCK ***** */
00041 
00042 #ifndef __SYSTEM_PREF_H__
00043 #define __SYSTEM_PREF_H__
00044 
00045 #include "nsCOMPtr.h"
00046 #include "nsXPCOM.h"
00047 #include "nsCRT.h"
00048 #include "nsIAppStartupNotifier.h"
00049 #include "nsICategoryManager.h"
00050 #include "nsIServiceManager.h"
00051 #include "nsWeakReference.h"
00052 #include "nsIPrefService.h"
00053 #include "nsIPrefBranch2.h"
00054 
00055 #include <nsIObserver.h>
00056 
00057 union MozPrefValue;
00058 struct SysPrefItem;
00059 
00061 //
00062 // nsSystemPref, as an extension of mozilla pref service, reads some mozilla
00063 // prefs from host system when the feature is enabled ("config.system-pref").
00064 //
00065 // nsSystemPref listens on NS_PREFSERVICE_READ_TOPIC_ID. When notified,
00066 // nsSystemPref will start the nsSystemPrefService (platform specific) to
00067 // read all the interested prefs (listed in sSysPrefList table) from system
00068 // and lock these prefs from user's modification. 
00069 //
00070 // This feature will make mozilla integrated better into host platforms. If
00071 // users want to change the prefs read from system, the system provided pref
00072 // editor (i.e. gconf-editor in gnome) should be used.
00074 
00075 class nsSystemPref : public nsIObserver,
00076                      public nsSupportsWeakReference
00077 {
00078 public:
00079     NS_DECL_ISUPPORTS
00080     NS_DECL_NSIOBSERVER
00081 
00082     nsSystemPref();
00083     virtual ~nsSystemPref();
00084     nsresult Init(void);
00085 
00086 private:
00087     // funcs used to load system prefs and save mozilla default prefs
00088     nsresult UseSystemPrefs();
00089     nsresult ReadSystemPref(const char *aPrefName);
00090     nsresult SaveMozDefaultPref(const char *aPrefName,
00091                                 MozPrefValue *aPrefVal,
00092                                 PRBool *aLocked);
00093 
00094     // funcs used to load mozilla default prefs
00095     nsresult UseMozillaPrefs();
00096     nsresult RestoreMozDefaultPref(const char *aPrefName,
00097                                    MozPrefValue *aPrefVal,
00098                                    PRBool aLocked);
00099 
00100     nsCOMPtr<nsIPrefBranch2>  mSysPrefService;
00101     PRBool mEnabled;  // system pref is enabled or not
00102     SysPrefItem *mSysPrefs;
00103 };
00104 
00105 #define NS_SYSTEMPREF_CID                  \
00106   { /* {549abb24-7c9d-4aba-915e-7ce0b716b32f} */       \
00107     0x549abb24,                                        \
00108     0x7c9d,                                            \
00109     0x4aba,                                            \
00110     { 0x91, 0x5e, 0x7c, 0xe0, 0xb7, 0x16, 0xb3, 0x2f } \
00111   }
00112 
00113 #define NS_SYSTEMPREF_CONTRACTID "@mozilla.org/system-preferences;1"
00114 #define NS_SYSTEMPREF_CLASSNAME "System Preferences"
00115 
00116 #endif  /* __SYSTEM_PREF_H__ */