/* static */ void gconf_key_listener (void* client, guint cnxn_id, void *entry, gpointer user_data) { SYSPREF_LOG(("...SYSPREF_LOG...key listener get called \n")); if (!user_data) return; GConfCallbackData *pData = reinterpret_cast<GConfCallbackData *> (user_data); pData->proxy->OnNotify(client, entry, cnxn_id, pData); }
nsresult nsSystemPrefService::Init() { if (!gSysPrefLog) { gSysPrefLog = PR_NewLogModule("Syspref"); if (!gSysPrefLog) return NS_ERROR_OUT_OF_MEMORY; } SYSPREF_LOG(("Init SystemPref Service\n")); if (mInitialized) return NS_ERROR_FAILURE; if (!mGConf) { mGConf = new GConfProxy(this); if (!mGConf->Init()) { delete mGConf; mGConf = nsnull; return NS_ERROR_FAILURE; } } mInitialized = PR_TRUE; return NS_OK; }
PRBool GConfProxy::Init() { SYSPREF_LOG(("GConfProxy:: Init GConfProxy\n")); if (!mSysPrefService) return PR_FALSE; if (mInitialized) return PR_TRUE; nsCOMPtr<nsIPref> pref = do_GetService(NS_PREF_CONTRACTID); if (!pref) return PR_FALSE; nsXPIDLCString gconfLibName; nsresult rv; //check if gconf-2 library is given in prefs rv = pref->GetCharPref(sPrefGConfKey, getter_Copies(gconfLibName)); if (NS_SUCCEEDED(rv)) { //use the library name in the preference SYSPREF_LOG(("GConf library in prefs is %s\n", gconfLibName.get())); mGConfLib = PR_LoadLibrary(gconfLibName.get()); } else { SYSPREF_LOG(("GConf library not specified in prefs, try the default: " "%s and %s\n", sDefaultLibName1, sDefaultLibName2)); mGConfLib = PR_LoadLibrary(sDefaultLibName1); if (!mGConfLib) mGConfLib = PR_LoadLibrary(sDefaultLibName2); } if (!mGConfLib) { SYSPREF_LOG(("Fail to load GConf library\n")); return PR_FALSE; } //check every func we need in the gconf library GConfFuncListType *funcList; PRFuncPtr func; for (funcList = sGConfFuncList; funcList->FuncName; ++funcList) { func = PR_FindFunctionSymbol(mGConfLib, funcList->FuncName); if (!func) { SYSPREF_LOG(("Check GConf Func Error: %s", funcList->FuncName)); goto init_failed_unload; } funcList->FuncPtr = func; } InitFuncPtrs(); mGConfClient = GConfClientGetDefault(); // Don't unload past this point, since GConf's initialization of ORBit // causes atexit handlers to be registered. if (!mGConfClient) { SYSPREF_LOG(("Fail to Get default gconf client\n")); goto init_failed; } mInitialized = PR_TRUE; return PR_TRUE; init_failed_unload: PR_UnloadLibrary(mGConfLib); init_failed: mGConfLib = nsnull; return PR_FALSE; }