1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "precompiled_shell.hxx"
25*b1cdbd2cSJim Jagielski #include "sal/config.h"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <string.h>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/RuntimeException.hpp"
30*b1cdbd2cSJim Jagielski #include "osl/file.hxx"
31*b1cdbd2cSJim Jagielski #include "osl/security.hxx"
32*b1cdbd2cSJim Jagielski #include "osl/thread.h"
33*b1cdbd2cSJim Jagielski #include "rtl/strbuf.hxx"
34*b1cdbd2cSJim Jagielski #include "rtl/ustrbuf.hxx"
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include "gconfaccess.hxx"
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #define GCONF_PROXY_MODE_KEY "/system/proxy/mode"
39*b1cdbd2cSJim Jagielski #define GCONF_AUTO_SAVE_KEY  "/apps/openoffice/auto_save"
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski namespace gconfaccess {
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski namespace {
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski namespace css = com::sun::star ;
46*b1cdbd2cSJim Jagielski namespace uno = css::uno ;
47*b1cdbd2cSJim Jagielski using namespace rtl;
48*b1cdbd2cSJim Jagielski 
getGconfClient()49*b1cdbd2cSJim Jagielski GConfClient* getGconfClient()
50*b1cdbd2cSJim Jagielski {
51*b1cdbd2cSJim Jagielski     static GConfClient* mClient= 0;
52*b1cdbd2cSJim Jagielski     if (mClient == NULL)
53*b1cdbd2cSJim Jagielski     {
54*b1cdbd2cSJim Jagielski         /* initialize glib object type library */
55*b1cdbd2cSJim Jagielski         g_type_init();
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski         GError* aError = NULL;
58*b1cdbd2cSJim Jagielski         if (!gconf_init(0, NULL, &aError))
59*b1cdbd2cSJim Jagielski         {
60*b1cdbd2cSJim Jagielski             rtl::OUStringBuffer msg;
61*b1cdbd2cSJim Jagielski             msg.appendAscii("GconfBackend:GconfLayer: Cannot Initialize Gconf connection - " );
62*b1cdbd2cSJim Jagielski             msg.appendAscii(aError->message);
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski             g_error_free(aError);
65*b1cdbd2cSJim Jagielski             aError = NULL;
66*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(msg.makeStringAndClear(),NULL);
67*b1cdbd2cSJim Jagielski         }
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski         mClient = gconf_client_get_default();
70*b1cdbd2cSJim Jagielski         if (!mClient)
71*b1cdbd2cSJim Jagielski         {
72*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(rtl::OUString::createFromAscii
73*b1cdbd2cSJim Jagielski                 ("GconfBackend:GconfLayer: Cannot Initialize Gconf connection"),NULL);
74*b1cdbd2cSJim Jagielski         }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski         static const char * const PreloadValuesList[] =
77*b1cdbd2cSJim Jagielski         {
78*b1cdbd2cSJim Jagielski             "/desktop/gnome/interface",
79*b1cdbd2cSJim Jagielski             "/system/proxy",
80*b1cdbd2cSJim Jagielski             "/system/http_proxy/host",
81*b1cdbd2cSJim Jagielski             "/desktop/gnome/url-handlers/mailto",
82*b1cdbd2cSJim Jagielski #ifdef ENABLE_LOCKDOWN
83*b1cdbd2cSJim Jagielski             "/apps/openoffice",
84*b1cdbd2cSJim Jagielski             "/desktop/gnome/lockdown",
85*b1cdbd2cSJim Jagielski             "/apps/openoffice/lockdown",
86*b1cdbd2cSJim Jagielski #endif // ENABLE_LOCKDOWN
87*b1cdbd2cSJim Jagielski             NULL
88*b1cdbd2cSJim Jagielski         };
89*b1cdbd2cSJim Jagielski         int i = 0;
90*b1cdbd2cSJim Jagielski         while( PreloadValuesList[i] != NULL )
91*b1cdbd2cSJim Jagielski             gconf_client_preload( mClient, PreloadValuesList[i++], GCONF_CLIENT_PRELOAD_ONELEVEL, NULL );
92*b1cdbd2cSJim Jagielski     }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski     return mClient;
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski 
xdg_user_dir_lookup(const char * type)97*b1cdbd2cSJim Jagielski static OUString xdg_user_dir_lookup (const char *type)
98*b1cdbd2cSJim Jagielski {
99*b1cdbd2cSJim Jagielski     char *config_home;
100*b1cdbd2cSJim Jagielski     char *p;
101*b1cdbd2cSJim Jagielski     int relative;
102*b1cdbd2cSJim Jagielski     bool bError = false;
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski     osl::Security aSecurity;
105*b1cdbd2cSJim Jagielski     oslFileHandle handle;
106*b1cdbd2cSJim Jagielski     OUString aHomeDirURL;
107*b1cdbd2cSJim Jagielski     OUString aDocumentsDirURL;
108*b1cdbd2cSJim Jagielski     OUString aConfigFileURL;
109*b1cdbd2cSJim Jagielski     OUStringBuffer aUserDirBuf;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     if (!aSecurity.getHomeDir( aHomeDirURL ) )
112*b1cdbd2cSJim Jagielski     {
113*b1cdbd2cSJim Jagielski 	osl::FileBase::getFileURLFromSystemPath(rtl::OUString::createFromAscii("/tmp"), aDocumentsDirURL);
114*b1cdbd2cSJim Jagielski 	return aDocumentsDirURL;
115*b1cdbd2cSJim Jagielski     }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski     config_home = getenv ("XDG_CONFIG_HOME");
118*b1cdbd2cSJim Jagielski     if (config_home == NULL || config_home[0] == 0)
119*b1cdbd2cSJim Jagielski     {
120*b1cdbd2cSJim Jagielski 	aConfigFileURL = OUString(aHomeDirURL);
121*b1cdbd2cSJim Jagielski 	aConfigFileURL += OUString::createFromAscii( "/.config/user-dirs.dirs" );
122*b1cdbd2cSJim Jagielski     }
123*b1cdbd2cSJim Jagielski     else
124*b1cdbd2cSJim Jagielski     {
125*b1cdbd2cSJim Jagielski 	aConfigFileURL = OUString::createFromAscii(config_home);
126*b1cdbd2cSJim Jagielski 	aConfigFileURL += OUString::createFromAscii( "/user-dirs.dirs" );
127*b1cdbd2cSJim Jagielski     }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski     if(osl_File_E_None == osl_openFile(aConfigFileURL.pData, &handle, osl_File_OpenFlag_Read))
130*b1cdbd2cSJim Jagielski     {
131*b1cdbd2cSJim Jagielski 	rtl::ByteSequence seq;
132*b1cdbd2cSJim Jagielski 	while (osl_File_E_None == osl_readLine(handle , (sal_Sequence **)&seq))
133*b1cdbd2cSJim Jagielski 	{
134*b1cdbd2cSJim Jagielski 	    /* Remove newline at end */
135*b1cdbd2cSJim Jagielski 	    int len = seq.getLength();
136*b1cdbd2cSJim Jagielski 	    if(len>0 && seq[len-1] == '\n')
137*b1cdbd2cSJim Jagielski 		seq[len-1] = 0;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 	    p = (char *)seq.getArray();
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	    while (*p == ' ' || *p == '\t')
142*b1cdbd2cSJim Jagielski 		p++;
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 	    if (strncmp (p, "XDG_", 4) != 0)
145*b1cdbd2cSJim Jagielski 		continue;
146*b1cdbd2cSJim Jagielski 	    p += 4;
147*b1cdbd2cSJim Jagielski 	    if (strncmp (p, type, strlen (type)) != 0)
148*b1cdbd2cSJim Jagielski 		continue;
149*b1cdbd2cSJim Jagielski 	    p += strlen (type);
150*b1cdbd2cSJim Jagielski 	    if (strncmp (p, "_DIR", 4) != 0)
151*b1cdbd2cSJim Jagielski 		continue;
152*b1cdbd2cSJim Jagielski 	    p += 4;
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 	    while (*p == ' ' || *p == '\t')
155*b1cdbd2cSJim Jagielski 		p++;
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	    if (*p != '=')
158*b1cdbd2cSJim Jagielski 		continue;
159*b1cdbd2cSJim Jagielski 	    p++;
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 	    while (*p == ' ' || *p == '\t')
162*b1cdbd2cSJim Jagielski 		p++;
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	    if (*p != '"')
165*b1cdbd2cSJim Jagielski 		continue;
166*b1cdbd2cSJim Jagielski 	    p++;
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	    relative = 0;
169*b1cdbd2cSJim Jagielski 	    if (strncmp (p, "$HOME/", 6) == 0)
170*b1cdbd2cSJim Jagielski 	    {
171*b1cdbd2cSJim Jagielski 		p += 6;
172*b1cdbd2cSJim Jagielski 		relative = 1;
173*b1cdbd2cSJim Jagielski 	    }
174*b1cdbd2cSJim Jagielski 	    else if (*p != '/')
175*b1cdbd2cSJim Jagielski 		continue;
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	    if (relative)
178*b1cdbd2cSJim Jagielski 	    {
179*b1cdbd2cSJim Jagielski 		aUserDirBuf = OUStringBuffer(aHomeDirURL);
180*b1cdbd2cSJim Jagielski 		aUserDirBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/" ) );
181*b1cdbd2cSJim Jagielski 	    }
182*b1cdbd2cSJim Jagielski 	    else
183*b1cdbd2cSJim Jagielski 	    {
184*b1cdbd2cSJim Jagielski 		aUserDirBuf = OUStringBuffer();
185*b1cdbd2cSJim Jagielski 	    }
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 	    while (*p && *p != '"')
188*b1cdbd2cSJim Jagielski 	    {
189*b1cdbd2cSJim Jagielski 		if ((*p == '\\') && (*(p+1) != 0))
190*b1cdbd2cSJim Jagielski 		    p++;
191*b1cdbd2cSJim Jagielski 		aUserDirBuf.append((sal_Unicode)*p++);
192*b1cdbd2cSJim Jagielski 	    }
193*b1cdbd2cSJim Jagielski 	}
194*b1cdbd2cSJim Jagielski       osl_closeFile(handle);
195*b1cdbd2cSJim Jagielski     }
196*b1cdbd2cSJim Jagielski     else
197*b1cdbd2cSJim Jagielski 	bError = true;
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski     if (aUserDirBuf.getLength()>0 && !bError)
200*b1cdbd2cSJim Jagielski     {
201*b1cdbd2cSJim Jagielski 	aDocumentsDirURL = aUserDirBuf.makeStringAndClear();
202*b1cdbd2cSJim Jagielski 	osl::Directory aDocumentsDir( aDocumentsDirURL );
203*b1cdbd2cSJim Jagielski 	if( osl::FileBase::E_None == aDocumentsDir.open() )
204*b1cdbd2cSJim Jagielski 	    return aDocumentsDirURL;
205*b1cdbd2cSJim Jagielski     }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski     /* Special case desktop for historical compatibility */
208*b1cdbd2cSJim Jagielski     if (strcmp (type, "DESKTOP") == 0)
209*b1cdbd2cSJim Jagielski     {
210*b1cdbd2cSJim Jagielski 	aUserDirBuf = OUStringBuffer(aHomeDirURL);
211*b1cdbd2cSJim Jagielski 	aUserDirBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/Desktop" ) );
212*b1cdbd2cSJim Jagielski 	return aUserDirBuf.makeStringAndClear();
213*b1cdbd2cSJim Jagielski     }
214*b1cdbd2cSJim Jagielski     else
215*b1cdbd2cSJim Jagielski     {
216*b1cdbd2cSJim Jagielski 	aUserDirBuf = OUStringBuffer(aHomeDirURL);
217*b1cdbd2cSJim Jagielski 	aUserDirBuf.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/Documents" ) );
218*b1cdbd2cSJim Jagielski 	return aUserDirBuf.makeStringAndClear();
219*b1cdbd2cSJim Jagielski     }
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
223*b1cdbd2cSJim Jagielski 
makeAnyOfGconfValue(GConfValue * aGconfValue)224*b1cdbd2cSJim Jagielski uno::Any makeAnyOfGconfValue( GConfValue *aGconfValue )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     switch( aGconfValue->type )
227*b1cdbd2cSJim Jagielski     {
228*b1cdbd2cSJim Jagielski         case GCONF_VALUE_BOOL:
229*b1cdbd2cSJim Jagielski             return uno::makeAny( (sal_Bool) gconf_value_get_bool( aGconfValue ) );
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski         case GCONF_VALUE_INT:
232*b1cdbd2cSJim Jagielski             return uno::makeAny( (sal_Int32) gconf_value_get_int( aGconfValue ) );
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski         case GCONF_VALUE_STRING:
235*b1cdbd2cSJim Jagielski             return uno::makeAny( OStringToOUString( rtl::OString(
236*b1cdbd2cSJim Jagielski                 gconf_value_get_string(aGconfValue) ), RTL_TEXTENCODING_UTF8 ) );
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski         default:
239*b1cdbd2cSJim Jagielski             fprintf( stderr, "makeAnyOfGconfValue: Type not handled.\n" );
240*b1cdbd2cSJim Jagielski             break;
241*b1cdbd2cSJim Jagielski     }
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski     return uno::Any();
244*b1cdbd2cSJim Jagielski }
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
247*b1cdbd2cSJim Jagielski 
splitFontName(GConfValue * aGconfValue,rtl::OUString & rName,sal_Int16 & rHeight)248*b1cdbd2cSJim Jagielski static void splitFontName( GConfValue *aGconfValue, rtl::OUString &rName, sal_Int16 &rHeight)
249*b1cdbd2cSJim Jagielski {
250*b1cdbd2cSJim Jagielski    rtl::OString aFont( gconf_value_get_string( aGconfValue ) );
251*b1cdbd2cSJim Jagielski    aFont.trim();
252*b1cdbd2cSJim Jagielski    sal_Int32 nIdx = aFont.lastIndexOf( ' ' );
253*b1cdbd2cSJim Jagielski    if (nIdx < 1) { // urk
254*b1cdbd2cSJim Jagielski        rHeight = 12;
255*b1cdbd2cSJim Jagielski        nIdx = aFont.getLength();
256*b1cdbd2cSJim Jagielski    } else {
257*b1cdbd2cSJim Jagielski        rtl::OString aSize = aFont.copy( nIdx + 1 );
258*b1cdbd2cSJim Jagielski        rHeight = static_cast<sal_Int16>( aSize.toInt32() );
259*b1cdbd2cSJim Jagielski    }
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski    rName = rtl::OStringToOUString( aFont.copy( 0, nIdx ), RTL_TEXTENCODING_UTF8 );
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
265*b1cdbd2cSJim Jagielski 
translateToOOo(const ConfigurationValue aValue,GConfValue * aGconfValue)266*b1cdbd2cSJim Jagielski uno::Any translateToOOo( const ConfigurationValue aValue, GConfValue *aGconfValue )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski     switch( aValue.nSettingId )
270*b1cdbd2cSJim Jagielski     {
271*b1cdbd2cSJim Jagielski         case SETTING_PROXY_MODE:
272*b1cdbd2cSJim Jagielski         {
273*b1cdbd2cSJim Jagielski             rtl::OUString aProxyMode;
274*b1cdbd2cSJim Jagielski             uno::Any aOriginalValue = makeAnyOfGconfValue( aGconfValue );
275*b1cdbd2cSJim Jagielski             aOriginalValue >>= aProxyMode;
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski             if( aProxyMode.equals( rtl::OUString::createFromAscii( "manual" ) ) )
278*b1cdbd2cSJim Jagielski                 return uno::makeAny( (sal_Int32) 1 );
279*b1cdbd2cSJim Jagielski             else if( aProxyMode.equals( rtl::OUString::createFromAscii( "none" ) ) )
280*b1cdbd2cSJim Jagielski                 return uno::makeAny( (sal_Int32) 0 );
281*b1cdbd2cSJim Jagielski         }
282*b1cdbd2cSJim Jagielski             break;
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski         case SETTING_NO_PROXY_FOR:
285*b1cdbd2cSJim Jagielski         {
286*b1cdbd2cSJim Jagielski             rtl::OStringBuffer aBuffer;
287*b1cdbd2cSJim Jagielski             if( (GCONF_VALUE_LIST == aGconfValue->type) && (GCONF_VALUE_STRING == gconf_value_get_list_type(aGconfValue)) )
288*b1cdbd2cSJim Jagielski             {
289*b1cdbd2cSJim Jagielski                 GSList * list = gconf_value_get_list(aGconfValue);
290*b1cdbd2cSJim Jagielski                 for(; list; list = g_slist_next(list))
291*b1cdbd2cSJim Jagielski                 {
292*b1cdbd2cSJim Jagielski                     aBuffer.append(gconf_value_get_string((GConfValue *) list->data));
293*b1cdbd2cSJim Jagielski                     aBuffer.append(";");
294*b1cdbd2cSJim Jagielski                 }
295*b1cdbd2cSJim Jagielski                 // Remove trailing ";"
296*b1cdbd2cSJim Jagielski                 aBuffer.setLength(aBuffer.getLength()-1);
297*b1cdbd2cSJim Jagielski                 return uno::makeAny(rtl::OStringToOUString(aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8));
298*b1cdbd2cSJim Jagielski             }
299*b1cdbd2cSJim Jagielski             else
300*b1cdbd2cSJim Jagielski                 g_warning( "unexpected type for ignore_hosts" );
301*b1cdbd2cSJim Jagielski         }
302*b1cdbd2cSJim Jagielski             break;
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski         case SETTING_MAILER_PROGRAM:
305*b1cdbd2cSJim Jagielski         {
306*b1cdbd2cSJim Jagielski             rtl::OUString aMailer;
307*b1cdbd2cSJim Jagielski             uno::Any aOriginalValue = makeAnyOfGconfValue( aGconfValue );
308*b1cdbd2cSJim Jagielski             aOriginalValue >>= aMailer;
309*b1cdbd2cSJim Jagielski             sal_Int32 nIndex = 0;
310*b1cdbd2cSJim Jagielski             return uno::makeAny( aMailer.getToken( 0, ' ', nIndex ) );
311*b1cdbd2cSJim Jagielski         }
312*b1cdbd2cSJim Jagielski 
313*b1cdbd2cSJim Jagielski #ifdef ENABLE_LOCKDOWN
314*b1cdbd2cSJim Jagielski         // "short" values need to be returned a sal_Int16
315*b1cdbd2cSJim Jagielski         case SETTING_FONT_ANTI_ALIASING_MIN_PIXEL:
316*b1cdbd2cSJim Jagielski         case SETTING_SYMBOL_SET:
317*b1cdbd2cSJim Jagielski         {
318*b1cdbd2cSJim Jagielski             sal_Int32 nShortValue;
319*b1cdbd2cSJim Jagielski             uno::Any aOriginalValue = makeAnyOfGconfValue( aGconfValue );
320*b1cdbd2cSJim Jagielski             aOriginalValue >>= nShortValue;
321*b1cdbd2cSJim Jagielski             return uno::makeAny( (sal_Int16) nShortValue );
322*b1cdbd2cSJim Jagielski         }
323*b1cdbd2cSJim Jagielski             break;
324*b1cdbd2cSJim Jagielski #endif // ENABLE_LOCKDOWN
325*b1cdbd2cSJim Jagielski 
326*b1cdbd2cSJim Jagielski         // "boolean" values that need a string to be returned
327*b1cdbd2cSJim Jagielski         case SETTING_ENABLE_ACCESSIBILITY:
328*b1cdbd2cSJim Jagielski #ifdef ENABLE_LOCKDOWN
329*b1cdbd2cSJim Jagielski         case SETTING_DISABLE_PRINTING:
330*b1cdbd2cSJim Jagielski #endif // ENABLE_LOCKDOWN
331*b1cdbd2cSJim Jagielski         {
332*b1cdbd2cSJim Jagielski             sal_Bool bBooleanValue = false;
333*b1cdbd2cSJim Jagielski             uno::Any aOriginalValue = makeAnyOfGconfValue( aGconfValue );
334*b1cdbd2cSJim Jagielski             aOriginalValue >>= bBooleanValue;
335*b1cdbd2cSJim Jagielski             return uno::makeAny( rtl::OUString::valueOf( (sal_Bool) bBooleanValue ) );
336*b1cdbd2cSJim Jagielski         }
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski         case SETTING_WORK_DIRECTORY:
339*b1cdbd2cSJim Jagielski         {
340*b1cdbd2cSJim Jagielski             rtl::OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS");
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski             return uno::makeAny( aDocumentsDirURL );
343*b1cdbd2cSJim Jagielski         }
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski         case SETTING_USER_GIVENNAME:
346*b1cdbd2cSJim Jagielski         {
347*b1cdbd2cSJim Jagielski             rtl::OUString aCompleteName( rtl::OStringToOUString(
348*b1cdbd2cSJim Jagielski                 g_get_real_name(), osl_getThreadTextEncoding() ) );
349*b1cdbd2cSJim Jagielski             sal_Int32 nIndex = 0;
350*b1cdbd2cSJim Jagielski             rtl::OUString aGivenName;
351*b1cdbd2cSJim Jagielski             do
352*b1cdbd2cSJim Jagielski                 aGivenName = aCompleteName.getToken( 0, ' ', nIndex );
353*b1cdbd2cSJim Jagielski             while ( nIndex == 0 );
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski             return uno::makeAny( aGivenName );
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski         }
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski         case SETTING_USER_SURNAME:
360*b1cdbd2cSJim Jagielski         {
361*b1cdbd2cSJim Jagielski             rtl::OUString aCompleteName( rtl::OStringToOUString(
362*b1cdbd2cSJim Jagielski                 g_get_real_name(), osl_getThreadTextEncoding() ) );
363*b1cdbd2cSJim Jagielski             sal_Int32 nIndex = 0;
364*b1cdbd2cSJim Jagielski             rtl::OUString aSurname;
365*b1cdbd2cSJim Jagielski             do
366*b1cdbd2cSJim Jagielski                 aSurname = aCompleteName.getToken( 0, ' ', nIndex );
367*b1cdbd2cSJim Jagielski             while ( nIndex >= 0 );
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski             return uno::makeAny( aSurname );
370*b1cdbd2cSJim Jagielski         }
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski         case SETTING_SOURCEVIEWFONT_NAME:
373*b1cdbd2cSJim Jagielski         case SETTING_SOURCEVIEWFONT_HEIGHT:
374*b1cdbd2cSJim Jagielski         {
375*b1cdbd2cSJim Jagielski             rtl::OUString aName;
376*b1cdbd2cSJim Jagielski             sal_Int16 nHeight;
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski             splitFontName (aGconfValue, aName, nHeight);
379*b1cdbd2cSJim Jagielski             if (aValue.nSettingId == SETTING_SOURCEVIEWFONT_NAME)
380*b1cdbd2cSJim Jagielski                 return uno::makeAny( aName );
381*b1cdbd2cSJim Jagielski             else
382*b1cdbd2cSJim Jagielski                 return uno::makeAny( nHeight );
383*b1cdbd2cSJim Jagielski         }
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski         default:
387*b1cdbd2cSJim Jagielski             fprintf( stderr, "Unhandled setting to translate.\n" );
388*b1cdbd2cSJim Jagielski             break;
389*b1cdbd2cSJim Jagielski     }
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski     return uno::Any();
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
395*b1cdbd2cSJim Jagielski 
isDependencySatisfied(GConfClient * aClient,const ConfigurationValue aValue)396*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL isDependencySatisfied( GConfClient* aClient, const ConfigurationValue aValue )
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski     switch( aValue.nDependsOn )
399*b1cdbd2cSJim Jagielski     {
400*b1cdbd2cSJim Jagielski         case SETTING_PROXY_MODE:
401*b1cdbd2cSJim Jagielski         {
402*b1cdbd2cSJim Jagielski             GConfValue* aGconfValue = gconf_client_get( aClient, GCONF_PROXY_MODE_KEY, NULL );
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski             if ( aGconfValue != NULL )
405*b1cdbd2cSJim Jagielski             {
406*b1cdbd2cSJim Jagielski                 bool bOk = g_strcasecmp( "manual", gconf_value_get_string( aGconfValue ) ) == 0;
407*b1cdbd2cSJim Jagielski                 gconf_value_free( aGconfValue );
408*b1cdbd2cSJim Jagielski                 if (bOk) return sal_True;
409*b1cdbd2cSJim Jagielski             }
410*b1cdbd2cSJim Jagielski         }
411*b1cdbd2cSJim Jagielski             break;
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski         case SETTING_WORK_DIRECTORY:
414*b1cdbd2cSJim Jagielski         {
415*b1cdbd2cSJim Jagielski             rtl::OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS");
416*b1cdbd2cSJim Jagielski             osl::Directory aDocumentsDir( aDocumentsDirURL );
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski             if( osl::FileBase::E_None == aDocumentsDir.open() )
419*b1cdbd2cSJim Jagielski                 return sal_True;
420*b1cdbd2cSJim Jagielski         }
421*b1cdbd2cSJim Jagielski             break;
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski         case SETTING_USER_GIVENNAME:
424*b1cdbd2cSJim Jagielski         {
425*b1cdbd2cSJim Jagielski             rtl::OUString aCompleteName( rtl::OStringToOUString(
426*b1cdbd2cSJim Jagielski                 g_get_real_name(), osl_getThreadTextEncoding() ) );
427*b1cdbd2cSJim Jagielski             if( !aCompleteName.equalsAscii( "Unknown" ) )
428*b1cdbd2cSJim Jagielski                 return sal_True;
429*b1cdbd2cSJim Jagielski         }
430*b1cdbd2cSJim Jagielski             break;
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski         case SETTING_USER_SURNAME:
433*b1cdbd2cSJim Jagielski         {
434*b1cdbd2cSJim Jagielski             rtl::OUString aCompleteName( rtl::OStringToOUString(
435*b1cdbd2cSJim Jagielski                 g_get_real_name(), osl_getThreadTextEncoding() ) );
436*b1cdbd2cSJim Jagielski             if( !aCompleteName.equalsAscii( "Unknown" ) )
437*b1cdbd2cSJim Jagielski             {
438*b1cdbd2cSJim Jagielski                 if( aCompleteName.trim().indexOf(rtl::OUString::createFromAscii(" "), 0) != -1 )
439*b1cdbd2cSJim Jagielski                     return sal_True;
440*b1cdbd2cSJim Jagielski             }
441*b1cdbd2cSJim Jagielski         }
442*b1cdbd2cSJim Jagielski             break;
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski #ifdef ENABLE_LOCKDOWN
445*b1cdbd2cSJim Jagielski         case SETTING_AUTO_SAVE:
446*b1cdbd2cSJim Jagielski         {
447*b1cdbd2cSJim Jagielski             GConfValue* aGconfValue = gconf_client_get( aClient, GCONF_AUTO_SAVE_KEY, NULL );
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski             if( ( aGconfValue != NULL ) )
450*b1cdbd2cSJim Jagielski             {
451*b1cdbd2cSJim Jagielski                 bool bOk = gconf_value_get_bool( aGconfValue );
452*b1cdbd2cSJim Jagielski                 gconf_value_free( aGconfValue );
453*b1cdbd2cSJim Jagielski                 if (bOk) return sal_True;
454*b1cdbd2cSJim Jagielski             }
455*b1cdbd2cSJim Jagielski         }
456*b1cdbd2cSJim Jagielski             break;
457*b1cdbd2cSJim Jagielski #endif // ENABLE_LOCKDOWN
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski         default:
460*b1cdbd2cSJim Jagielski             fprintf( stderr, "Unhandled setting to check dependency.\n" );
461*b1cdbd2cSJim Jagielski             break;
462*b1cdbd2cSJim Jagielski     }
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski     return sal_False;
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski }
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski ConfigurationValue const ConfigurationValues[] =
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski     {
472*b1cdbd2cSJim Jagielski         SETTING_ENABLE_ACCESSIBILITY,
473*b1cdbd2cSJim Jagielski         "/desktop/gnome/interface/accessibility",
474*b1cdbd2cSJim Jagielski         "EnableATToolSupport",
475*b1cdbd2cSJim Jagielski         sal_True,
476*b1cdbd2cSJim Jagielski         SETTINGS_LAST
477*b1cdbd2cSJim Jagielski     },
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski     {
480*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE,
481*b1cdbd2cSJim Jagielski         GCONF_PROXY_MODE_KEY,
482*b1cdbd2cSJim Jagielski         "ooInetProxyType",
483*b1cdbd2cSJim Jagielski         sal_True,
484*b1cdbd2cSJim Jagielski         SETTINGS_LAST
485*b1cdbd2cSJim Jagielski     },
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski     {
488*b1cdbd2cSJim Jagielski         SETTING_PROXY_HTTP_HOST,
489*b1cdbd2cSJim Jagielski         "/system/http_proxy/host",
490*b1cdbd2cSJim Jagielski         "ooInetHTTPProxyName",
491*b1cdbd2cSJim Jagielski         sal_False,
492*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
493*b1cdbd2cSJim Jagielski     },
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski     {
496*b1cdbd2cSJim Jagielski         SETTING_PROXY_HTTP_PORT,
497*b1cdbd2cSJim Jagielski         "/system/http_proxy/port",
498*b1cdbd2cSJim Jagielski         "ooInetHTTPProxyPort",
499*b1cdbd2cSJim Jagielski         sal_False,
500*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
501*b1cdbd2cSJim Jagielski     },
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski 	 {
504*b1cdbd2cSJim Jagielski         SETTING_PROXY_HTTPS_HOST,
505*b1cdbd2cSJim Jagielski         "/system/proxy/secure_host",
506*b1cdbd2cSJim Jagielski         "ooInetHTTPSProxyName",
507*b1cdbd2cSJim Jagielski         sal_False,
508*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
509*b1cdbd2cSJim Jagielski     },
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski     {
512*b1cdbd2cSJim Jagielski         SETTING_PROXY_HTTPS_PORT,
513*b1cdbd2cSJim Jagielski         "/system/proxy/secure_port",
514*b1cdbd2cSJim Jagielski         "ooInetHTTPSProxyPort",
515*b1cdbd2cSJim Jagielski         sal_False,
516*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
517*b1cdbd2cSJim Jagielski     },
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski     {
520*b1cdbd2cSJim Jagielski         SETTING_PROXY_FTP_HOST,
521*b1cdbd2cSJim Jagielski         "/system/proxy/ftp_host",
522*b1cdbd2cSJim Jagielski         "ooInetFTPProxyName",
523*b1cdbd2cSJim Jagielski         sal_False,
524*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
525*b1cdbd2cSJim Jagielski     },
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski     {
528*b1cdbd2cSJim Jagielski         SETTING_PROXY_FTP_PORT,
529*b1cdbd2cSJim Jagielski         "/system/proxy/ftp_port",
530*b1cdbd2cSJim Jagielski         "ooInetFTPProxyPort",
531*b1cdbd2cSJim Jagielski         sal_False,
532*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
533*b1cdbd2cSJim Jagielski     },
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski     {
536*b1cdbd2cSJim Jagielski         SETTING_NO_PROXY_FOR,
537*b1cdbd2cSJim Jagielski         "/system/http_proxy/ignore_hosts",
538*b1cdbd2cSJim Jagielski         "ooInetNoProxy",
539*b1cdbd2cSJim Jagielski         sal_True,
540*b1cdbd2cSJim Jagielski         SETTING_PROXY_MODE
541*b1cdbd2cSJim Jagielski     },
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski     {
544*b1cdbd2cSJim Jagielski         SETTING_MAILER_PROGRAM,
545*b1cdbd2cSJim Jagielski         "/desktop/gnome/url-handlers/mailto/command",
546*b1cdbd2cSJim Jagielski         "ExternalMailer",
547*b1cdbd2cSJim Jagielski         sal_True,
548*b1cdbd2cSJim Jagielski         SETTINGS_LAST
549*b1cdbd2cSJim Jagielski     },
550*b1cdbd2cSJim Jagielski     {
551*b1cdbd2cSJim Jagielski         SETTING_SOURCEVIEWFONT_NAME,
552*b1cdbd2cSJim Jagielski         "/desktop/gnome/interface/monospace_font_name",
553*b1cdbd2cSJim Jagielski         "SourceViewFontName",
554*b1cdbd2cSJim Jagielski         sal_True,
555*b1cdbd2cSJim Jagielski         SETTINGS_LAST
556*b1cdbd2cSJim Jagielski     },
557*b1cdbd2cSJim Jagielski     {
558*b1cdbd2cSJim Jagielski         SETTING_SOURCEVIEWFONT_HEIGHT,
559*b1cdbd2cSJim Jagielski         "/desktop/gnome/interface/monospace_font_name",
560*b1cdbd2cSJim Jagielski         "SourceViewFontHeight",
561*b1cdbd2cSJim Jagielski         sal_True,
562*b1cdbd2cSJim Jagielski         SETTINGS_LAST
563*b1cdbd2cSJim Jagielski     },
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski     {
566*b1cdbd2cSJim Jagielski         SETTING_WORK_DIRECTORY,
567*b1cdbd2cSJim Jagielski         "/desktop/gnome/url-handlers/mailto/command", // dummy
568*b1cdbd2cSJim Jagielski         "WorkPathVariable",
569*b1cdbd2cSJim Jagielski         sal_True,
570*b1cdbd2cSJim Jagielski         SETTING_WORK_DIRECTORY, // so that the existence of the dir can be checked
571*b1cdbd2cSJim Jagielski 	},
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski #ifdef ENABLE_LOCKDOWN
574*b1cdbd2cSJim Jagielski     {
575*b1cdbd2cSJim Jagielski         SETTING_WRITER_DEFAULT_DOC_FORMAT,
576*b1cdbd2cSJim Jagielski         "/apps/openoffice/writer_default_document_format",
577*b1cdbd2cSJim Jagielski         "TextDocumentSetupFactoryDefaultFilter",
578*b1cdbd2cSJim Jagielski         sal_False,
579*b1cdbd2cSJim Jagielski         SETTINGS_LAST
580*b1cdbd2cSJim Jagielski     },
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski     {
583*b1cdbd2cSJim Jagielski         SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
584*b1cdbd2cSJim Jagielski         "/apps/openoffice/impress_default_document_format",
585*b1cdbd2cSJim Jagielski         "PresentationDocumentSetupFactoryDefaultFilter",
586*b1cdbd2cSJim Jagielski         sal_False,
587*b1cdbd2cSJim Jagielski         SETTINGS_LAST
588*b1cdbd2cSJim Jagielski     },
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski     {
591*b1cdbd2cSJim Jagielski         SETTING_CALC_DEFAULT_DOC_FORMAT,
592*b1cdbd2cSJim Jagielski         "/apps/openoffice/calc_default_document_format",
593*b1cdbd2cSJim Jagielski         "SpreadsheetDocumentSetupFactoryDefaultFilter",
594*b1cdbd2cSJim Jagielski         sal_False,
595*b1cdbd2cSJim Jagielski         SETTINGS_LAST
596*b1cdbd2cSJim Jagielski     },
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski     {
599*b1cdbd2cSJim Jagielski         SETTING_AUTO_SAVE,
600*b1cdbd2cSJim Jagielski         GCONF_AUTO_SAVE_KEY,
601*b1cdbd2cSJim Jagielski         "AutoSaveEnabled",
602*b1cdbd2cSJim Jagielski         sal_False,
603*b1cdbd2cSJim Jagielski         SETTINGS_LAST
604*b1cdbd2cSJim Jagielski     },
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski     {
607*b1cdbd2cSJim Jagielski         SETTING_AUTO_SAVE_INTERVAL,
608*b1cdbd2cSJim Jagielski         "/apps/openoffice/auto_save_interval",
609*b1cdbd2cSJim Jagielski         "AutoSaveTimeIntervall",
610*b1cdbd2cSJim Jagielski         sal_False,
611*b1cdbd2cSJim Jagielski         SETTING_AUTO_SAVE
612*b1cdbd2cSJim Jagielski     },
613*b1cdbd2cSJim Jagielski 
614*b1cdbd2cSJim Jagielski     {
615*b1cdbd2cSJim Jagielski         SETTING_USER_GIVENNAME,
616*b1cdbd2cSJim Jagielski         "/desktop/gnome/url-handlers/mailto/command", // dummy
617*b1cdbd2cSJim Jagielski         "givenname",
618*b1cdbd2cSJim Jagielski         sal_True,
619*b1cdbd2cSJim Jagielski         SETTING_USER_GIVENNAME
620*b1cdbd2cSJim Jagielski     },
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski     {
623*b1cdbd2cSJim Jagielski         SETTING_USER_SURNAME,
624*b1cdbd2cSJim Jagielski         "/desktop/gnome/url-handlers/mailto/command", // dummy
625*b1cdbd2cSJim Jagielski         "sn",
626*b1cdbd2cSJim Jagielski         sal_True,
627*b1cdbd2cSJim Jagielski         SETTING_USER_SURNAME
628*b1cdbd2cSJim Jagielski     },
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski     {
631*b1cdbd2cSJim Jagielski         SETTING_DISABLE_PRINTING,
632*b1cdbd2cSJim Jagielski         "/desktop/gnome/lockdown/disable_printing",
633*b1cdbd2cSJim Jagielski         "DisablePrinting",
634*b1cdbd2cSJim Jagielski         sal_True,
635*b1cdbd2cSJim Jagielski         SETTINGS_LAST
636*b1cdbd2cSJim Jagielski     },
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski     {
639*b1cdbd2cSJim Jagielski         SETTING_USE_SYSTEM_FILE_DIALOG,
640*b1cdbd2cSJim Jagielski         "/apps/openoffice/use_system_file_dialog",
641*b1cdbd2cSJim Jagielski         "UseSystemFileDialog",
642*b1cdbd2cSJim Jagielski         sal_False,
643*b1cdbd2cSJim Jagielski         SETTINGS_LAST
644*b1cdbd2cSJim Jagielski     },
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski     {
647*b1cdbd2cSJim Jagielski         SETTING_PRINTING_MODIFIES_DOCUMENT,
648*b1cdbd2cSJim Jagielski         "/apps/openoffice/printing_modifies_doc",
649*b1cdbd2cSJim Jagielski         "PrintingModifiesDocument",
650*b1cdbd2cSJim Jagielski         sal_False,
651*b1cdbd2cSJim Jagielski         SETTINGS_LAST
652*b1cdbd2cSJim Jagielski     },
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski     {
655*b1cdbd2cSJim Jagielski         SETTING_SHOW_ICONS_IN_MENUS,
656*b1cdbd2cSJim Jagielski         "/apps/openoffice/show_menu_icons",
657*b1cdbd2cSJim Jagielski         "ShowIconsInMenues",
658*b1cdbd2cSJim Jagielski         sal_False,
659*b1cdbd2cSJim Jagielski         SETTINGS_LAST
660*b1cdbd2cSJim Jagielski     },
661*b1cdbd2cSJim Jagielski 
662*b1cdbd2cSJim Jagielski     {
663*b1cdbd2cSJim Jagielski         SETTING_SHOW_INACTIVE_MENUITEMS,
664*b1cdbd2cSJim Jagielski         "/apps/openoffice/show_menu_inactive_items",
665*b1cdbd2cSJim Jagielski         "DontHideDisabledEntry",
666*b1cdbd2cSJim Jagielski         sal_False,
667*b1cdbd2cSJim Jagielski         SETTINGS_LAST
668*b1cdbd2cSJim Jagielski     },
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski     {
671*b1cdbd2cSJim Jagielski         SETTING_SHOW_FONT_PREVIEW,
672*b1cdbd2cSJim Jagielski         "/apps/openoffice/show_font_preview",
673*b1cdbd2cSJim Jagielski         "ShowFontBoxWYSIWYG",
674*b1cdbd2cSJim Jagielski         sal_False,
675*b1cdbd2cSJim Jagielski         SETTINGS_LAST
676*b1cdbd2cSJim Jagielski     },
677*b1cdbd2cSJim Jagielski 
678*b1cdbd2cSJim Jagielski     {
679*b1cdbd2cSJim Jagielski         SETTING_SHOW_FONT_HISTORY,
680*b1cdbd2cSJim Jagielski         "/apps/openoffice/show_font_history",
681*b1cdbd2cSJim Jagielski         "FontViewHistory",
682*b1cdbd2cSJim Jagielski         sal_False,
683*b1cdbd2cSJim Jagielski         SETTINGS_LAST
684*b1cdbd2cSJim Jagielski     },
685*b1cdbd2cSJim Jagielski 
686*b1cdbd2cSJim Jagielski     {
687*b1cdbd2cSJim Jagielski         SETTING_ENABLE_OPENGL,
688*b1cdbd2cSJim Jagielski         "/apps/openoffice/use_opengl",
689*b1cdbd2cSJim Jagielski         "OpenGL",
690*b1cdbd2cSJim Jagielski         sal_False,
691*b1cdbd2cSJim Jagielski         SETTINGS_LAST
692*b1cdbd2cSJim Jagielski     },
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski     {
695*b1cdbd2cSJim Jagielski         SETTING_OPTIMIZE_OPENGL,
696*b1cdbd2cSJim Jagielski         "/apps/openoffice/optimize_opengl",
697*b1cdbd2cSJim Jagielski         "OpenGL_Faster",
698*b1cdbd2cSJim Jagielski         sal_False,
699*b1cdbd2cSJim Jagielski         SETTINGS_LAST
700*b1cdbd2cSJim Jagielski     },
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski     {
703*b1cdbd2cSJim Jagielski         SETTING_USE_SYSTEM_FONT,
704*b1cdbd2cSJim Jagielski         "/apps/openoffice/use_system_font",
705*b1cdbd2cSJim Jagielski         "AccessibilityIsSystemFont",
706*b1cdbd2cSJim Jagielski         sal_False,
707*b1cdbd2cSJim Jagielski         SETTINGS_LAST
708*b1cdbd2cSJim Jagielski     },
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski     {
711*b1cdbd2cSJim Jagielski         SETTING_USE_FONT_ANTI_ALIASING,
712*b1cdbd2cSJim Jagielski         "/apps/openoffice/use_font_anti_aliasing",
713*b1cdbd2cSJim Jagielski         "FontAntiAliasingEnabled",
714*b1cdbd2cSJim Jagielski         sal_False,
715*b1cdbd2cSJim Jagielski         SETTINGS_LAST
716*b1cdbd2cSJim Jagielski     },
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski     {
719*b1cdbd2cSJim Jagielski         SETTING_FONT_ANTI_ALIASING_MIN_PIXEL,
720*b1cdbd2cSJim Jagielski         "/apps/openoffice/font_anti_aliasing_min_pixel",
721*b1cdbd2cSJim Jagielski         "FontAntiAliasingMinPixelHeight",
722*b1cdbd2cSJim Jagielski         sal_True,
723*b1cdbd2cSJim Jagielski         SETTINGS_LAST
724*b1cdbd2cSJim Jagielski     },
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski     {
727*b1cdbd2cSJim Jagielski         SETTING_WARN_CREATE_PDF,
728*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/warn_info_create_pdf",
729*b1cdbd2cSJim Jagielski         "WarnCreatePDF",
730*b1cdbd2cSJim Jagielski         sal_False,
731*b1cdbd2cSJim Jagielski         SETTINGS_LAST
732*b1cdbd2cSJim Jagielski     },
733*b1cdbd2cSJim Jagielski 
734*b1cdbd2cSJim Jagielski     {
735*b1cdbd2cSJim Jagielski         SETTING_WARN_PRINT_DOC,
736*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/warn_info_printing",
737*b1cdbd2cSJim Jagielski         "WarnPrintDoc",
738*b1cdbd2cSJim Jagielski         sal_False,
739*b1cdbd2cSJim Jagielski         SETTINGS_LAST
740*b1cdbd2cSJim Jagielski     },
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski     {
743*b1cdbd2cSJim Jagielski         SETTING_WARN_SAVEORSEND_DOC,
744*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/warn_info_saving",
745*b1cdbd2cSJim Jagielski         "WarnSaveOrSendDoc",
746*b1cdbd2cSJim Jagielski         sal_False,
747*b1cdbd2cSJim Jagielski         SETTINGS_LAST
748*b1cdbd2cSJim Jagielski     },
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski     {
751*b1cdbd2cSJim Jagielski         SETTING_WARN_SIGN_DOC,
752*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/warn_info_signing",
753*b1cdbd2cSJim Jagielski         "WarnSignDoc",
754*b1cdbd2cSJim Jagielski         sal_False,
755*b1cdbd2cSJim Jagielski         SETTINGS_LAST
756*b1cdbd2cSJim Jagielski     },
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski     {
759*b1cdbd2cSJim Jagielski         SETTING_REMOVE_PERSONAL_INFO,
760*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/remove_personal_info_on_save",
761*b1cdbd2cSJim Jagielski         "Scripting/RemovePersonalInfoOnSaving",
762*b1cdbd2cSJim Jagielski         sal_False,
763*b1cdbd2cSJim Jagielski         SETTINGS_LAST
764*b1cdbd2cSJim Jagielski     },
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski     {
767*b1cdbd2cSJim Jagielski         SETTING_RECOMMEND_PASSWORD,
768*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/recommend_password_on_save",
769*b1cdbd2cSJim Jagielski         "RecommendPasswordProtection",
770*b1cdbd2cSJim Jagielski         sal_False,
771*b1cdbd2cSJim Jagielski         SETTINGS_LAST
772*b1cdbd2cSJim Jagielski     },
773*b1cdbd2cSJim Jagielski 
774*b1cdbd2cSJim Jagielski     {
775*b1cdbd2cSJim Jagielski         SETTING_UNDO_STEPS,
776*b1cdbd2cSJim Jagielski         "/apps/openoffice/undo_steps",
777*b1cdbd2cSJim Jagielski         "UndoSteps",
778*b1cdbd2cSJim Jagielski         sal_False,
779*b1cdbd2cSJim Jagielski         SETTINGS_LAST
780*b1cdbd2cSJim Jagielski     },
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski     {
783*b1cdbd2cSJim Jagielski         SETTING_SYMBOL_SET,
784*b1cdbd2cSJim Jagielski         "/apps/openoffice/icon_size",
785*b1cdbd2cSJim Jagielski         "SymbolSet",
786*b1cdbd2cSJim Jagielski         sal_True,
787*b1cdbd2cSJim Jagielski         SETTINGS_LAST
788*b1cdbd2cSJim Jagielski     },
789*b1cdbd2cSJim Jagielski 
790*b1cdbd2cSJim Jagielski     {
791*b1cdbd2cSJim Jagielski         SETTING_MACRO_SECURITY_LEVEL,
792*b1cdbd2cSJim Jagielski         "/apps/openoffice/lockdown/macro_security_level",
793*b1cdbd2cSJim Jagielski         "MacroSecurityLevel",
794*b1cdbd2cSJim Jagielski         sal_False,
795*b1cdbd2cSJim Jagielski         SETTINGS_LAST
796*b1cdbd2cSJim Jagielski     },
797*b1cdbd2cSJim Jagielski 
798*b1cdbd2cSJim Jagielski     {
799*b1cdbd2cSJim Jagielski         SETTING_CREATE_BACKUP,
800*b1cdbd2cSJim Jagielski         "/apps/openoffice/create_backup",
801*b1cdbd2cSJim Jagielski         "CreateBackup",
802*b1cdbd2cSJim Jagielski         sal_False,
803*b1cdbd2cSJim Jagielski         SETTINGS_LAST
804*b1cdbd2cSJim Jagielski     },
805*b1cdbd2cSJim Jagielski 
806*b1cdbd2cSJim Jagielski     {
807*b1cdbd2cSJim Jagielski         SETTING_WARN_ALIEN_FORMAT,
808*b1cdbd2cSJim Jagielski         "/apps/openoffice/warn_alien_format",
809*b1cdbd2cSJim Jagielski         "WarnAlienFormat",
810*b1cdbd2cSJim Jagielski         sal_False,
811*b1cdbd2cSJim Jagielski         SETTINGS_LAST
812*b1cdbd2cSJim Jagielski     },
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski #endif // ENABLE_LOCKDOWN
815*b1cdbd2cSJim Jagielski };
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski std::size_t const nConfigurationValues =
818*b1cdbd2cSJim Jagielski     sizeof ConfigurationValues / sizeof ConfigurationValues[0];
819*b1cdbd2cSJim Jagielski 
getValue(ConfigurationValue const & data)820*b1cdbd2cSJim Jagielski css::beans::Optional< css::uno::Any > getValue(ConfigurationValue const & data)
821*b1cdbd2cSJim Jagielski {
822*b1cdbd2cSJim Jagielski     GConfClient* aClient = getGconfClient();
823*b1cdbd2cSJim Jagielski     GConfValue* aGconfValue;
824*b1cdbd2cSJim Jagielski     if( ( data.nDependsOn == SETTINGS_LAST ) || isDependencySatisfied( aClient, data ) )
825*b1cdbd2cSJim Jagielski     {
826*b1cdbd2cSJim Jagielski         aGconfValue = gconf_client_get( aClient, data.GconfItem, NULL );
827*b1cdbd2cSJim Jagielski 
828*b1cdbd2cSJim Jagielski         if( aGconfValue != NULL )
829*b1cdbd2cSJim Jagielski         {
830*b1cdbd2cSJim Jagielski             css::uno::Any value;
831*b1cdbd2cSJim Jagielski             if( data.bNeedsTranslation )
832*b1cdbd2cSJim Jagielski                 value = translateToOOo( data, aGconfValue );
833*b1cdbd2cSJim Jagielski             else
834*b1cdbd2cSJim Jagielski                 value = makeAnyOfGconfValue( aGconfValue );
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski             gconf_value_free( aGconfValue );
837*b1cdbd2cSJim Jagielski 
838*b1cdbd2cSJim Jagielski             return css::beans::Optional< css::uno::Any >(true, value);
839*b1cdbd2cSJim Jagielski         }
840*b1cdbd2cSJim Jagielski     }
841*b1cdbd2cSJim Jagielski     return css::beans::Optional< css::uno::Any >();
842*b1cdbd2cSJim Jagielski }
843*b1cdbd2cSJim Jagielski 
844*b1cdbd2cSJim Jagielski }
845