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