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 "osl/file.hxx"
27 : #include "osl/security.hxx"
28 : #include "osl/thread.h"
29 : #include "rtl/strbuf.hxx"
30 : #include "rtl/ustrbuf.hxx"
31 : #include "sal/macros.h"
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, NULL);
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",NULL);
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 , (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 = (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 : /* Special case desktop for historical compatibility */
193 0 : if (strcmp (type, "DESKTOP") == 0)
194 : {
195 0 : return aHomeDirURL + "/Desktop";
196 : }
197 : else
198 : {
199 0 : return aHomeDirURL + "/Documents";
200 0 : }
201 : }
202 :
203 : //------------------------------------------------------------------------------
204 :
205 0 : uno::Any makeAnyOfGconfValue( GConfValue *pGconfValue )
206 : {
207 0 : switch( pGconfValue->type )
208 : {
209 : case GCONF_VALUE_BOOL:
210 0 : return uno::makeAny( (sal_Bool) gconf_value_get_bool( pGconfValue ) );
211 :
212 : case GCONF_VALUE_INT:
213 0 : return uno::makeAny( (sal_Int32) gconf_value_get_int( pGconfValue ) );
214 :
215 : case GCONF_VALUE_STRING:
216 : return uno::makeAny( OStringToOUString( OString(
217 0 : gconf_value_get_string(pGconfValue) ), RTL_TEXTENCODING_UTF8 ) );
218 :
219 : default:
220 0 : fprintf( stderr, "makeAnyOfGconfValue: Type not handled.\n" );
221 0 : break;
222 : }
223 :
224 0 : return uno::Any();
225 : }
226 :
227 : //------------------------------------------------------------------------------
228 :
229 0 : static void splitFontName( GConfValue *pGconfValue, OUString &rName, sal_Int16 &rHeight)
230 : {
231 0 : OString aFont( gconf_value_get_string( pGconfValue ) );
232 0 : aFont = aFont.trim();
233 0 : sal_Int32 nIdx = aFont.lastIndexOf( ' ' );
234 0 : if (nIdx < 1) { // urk
235 0 : rHeight = 12;
236 0 : nIdx = aFont.getLength();
237 : } else {
238 0 : OString aSize = aFont.copy( nIdx + 1 );
239 0 : rHeight = static_cast<sal_Int16>( aSize.toInt32() );
240 : }
241 :
242 0 : rName = OStringToOUString( aFont.copy( 0, nIdx ), RTL_TEXTENCODING_UTF8 );
243 0 : }
244 :
245 : //------------------------------------------------------------------------------
246 :
247 0 : uno::Any translateToOOo( const ConfigurationValue &rValue, GConfValue *pGconfValue )
248 : {
249 :
250 0 : switch( rValue.nSettingId )
251 : {
252 : case SETTING_PROXY_MODE:
253 : {
254 0 : OUString aProxyMode;
255 0 : uno::Any aOriginalValue = makeAnyOfGconfValue( pGconfValue );
256 0 : aOriginalValue >>= aProxyMode;
257 :
258 0 : if( aProxyMode == "manual" )
259 0 : return uno::makeAny( (sal_Int32) 1 );
260 0 : else if( aProxyMode == "none" )
261 0 : return uno::makeAny( (sal_Int32) 0 );
262 : }
263 0 : break;
264 :
265 : case SETTING_NO_PROXY_FOR:
266 : {
267 0 : OStringBuffer aBuffer;
268 0 : if( (GCONF_VALUE_LIST == pGconfValue->type) && (GCONF_VALUE_STRING == gconf_value_get_list_type(pGconfValue)) )
269 : {
270 0 : GSList * list = gconf_value_get_list(pGconfValue);
271 0 : for(; list; list = g_slist_next(list))
272 : {
273 0 : aBuffer.append(gconf_value_get_string((GConfValue *) list->data) + OString(";"));
274 : }
275 : // Remove trailing ";"
276 0 : aBuffer.setLength(aBuffer.getLength()-1);
277 0 : return uno::makeAny(OStringToOUString(aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8));
278 : }
279 : else
280 0 : g_warning( "unexpected type for ignore_hosts" );
281 : }
282 0 : break;
283 :
284 : case SETTING_MAILER_PROGRAM:
285 : {
286 0 : OUString aMailer;
287 0 : uno::Any aOriginalValue = makeAnyOfGconfValue( pGconfValue );
288 0 : aOriginalValue >>= aMailer;
289 0 : sal_Int32 nIndex = 0;
290 0 : return uno::makeAny( aMailer.getToken( 0, ' ', nIndex ) );
291 : }
292 :
293 : #ifdef ENABLE_LOCKDOWN
294 : // "short" values need to be returned a sal_Int16
295 : case SETTING_FONT_ANTI_ALIASING_MIN_PIXEL:
296 : case SETTING_SYMBOL_SET:
297 : {
298 : sal_Int32 nShortValue(0);
299 : uno::Any aOriginalValue = makeAnyOfGconfValue( pGconfValue );
300 : aOriginalValue >>= nShortValue;
301 : return uno::makeAny( (sal_Int16) nShortValue );
302 : }
303 : break;
304 : #endif // ENABLE_LOCKDOWN
305 :
306 : // "boolean" values that need a string to be returned
307 : case SETTING_ENABLE_ACCESSIBILITY:
308 : #ifdef ENABLE_LOCKDOWN
309 : case SETTING_DISABLE_PRINTING:
310 : #endif // ENABLE_LOCKDOWN
311 : {
312 0 : sal_Bool bBooleanValue = false;
313 0 : uno::Any aOriginalValue = makeAnyOfGconfValue( pGconfValue );
314 0 : aOriginalValue >>= bBooleanValue;
315 0 : return uno::makeAny( OUString::valueOf( (sal_Bool) bBooleanValue ) );
316 : }
317 :
318 : case SETTING_WORK_DIRECTORY:
319 : {
320 0 : OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS");
321 :
322 0 : return uno::makeAny( aDocumentsDirURL );
323 : }
324 :
325 : case SETTING_USER_GIVENNAME:
326 : {
327 : OUString aCompleteName( OStringToOUString(
328 0 : g_get_real_name(), osl_getThreadTextEncoding() ) );
329 0 : sal_Int32 nIndex = 0;
330 0 : OUString aGivenName;
331 0 : do
332 0 : aGivenName = aCompleteName.getToken( 0, ' ', nIndex );
333 0 : while ( nIndex == 0 );
334 :
335 0 : return uno::makeAny( aGivenName );
336 :
337 : }
338 :
339 : case SETTING_USER_SURNAME:
340 : {
341 : OUString aCompleteName( OStringToOUString(
342 0 : g_get_real_name(), osl_getThreadTextEncoding() ) );
343 0 : sal_Int32 nIndex = 0;
344 0 : OUString aSurname;
345 0 : do
346 0 : aSurname = aCompleteName.getToken( 0, ' ', nIndex );
347 0 : while ( nIndex >= 0 );
348 :
349 0 : return uno::makeAny( aSurname );
350 : }
351 :
352 : case SETTING_SOURCEVIEWFONT_NAME:
353 : case SETTING_SOURCEVIEWFONT_HEIGHT:
354 : {
355 0 : OUString aName;
356 : sal_Int16 nHeight;
357 :
358 0 : splitFontName (pGconfValue, aName, nHeight);
359 0 : if (rValue.nSettingId == SETTING_SOURCEVIEWFONT_NAME)
360 0 : return uno::makeAny( aName );
361 : else
362 0 : return uno::makeAny( nHeight );
363 : }
364 :
365 :
366 : default:
367 0 : fprintf( stderr, "Unhandled setting to translate.\n" );
368 0 : break;
369 : }
370 :
371 0 : return uno::Any();
372 : }
373 :
374 : //------------------------------------------------------------------------------
375 :
376 0 : sal_Bool SAL_CALL isDependencySatisfied( GConfClient* pClient, const ConfigurationValue &rValue )
377 : {
378 0 : switch( rValue.nDependsOn )
379 : {
380 : case SETTING_PROXY_MODE:
381 : {
382 0 : GConfValue* pGconfValue = gconf_client_get( pClient, GCONF_PROXY_MODE_KEY, NULL );
383 :
384 0 : if ( pGconfValue != NULL )
385 : {
386 0 : bool bOk = g_ascii_strcasecmp( "manual", gconf_value_get_string( pGconfValue ) ) == 0;
387 0 : gconf_value_free( pGconfValue );
388 0 : if (bOk) return sal_True;
389 : }
390 : }
391 0 : break;
392 :
393 : case SETTING_WORK_DIRECTORY:
394 : {
395 0 : OUString aDocumentsDirURL = xdg_user_dir_lookup("DOCUMENTS");
396 0 : osl::Directory aDocumentsDir( aDocumentsDirURL );
397 :
398 0 : if( osl::FileBase::E_None == aDocumentsDir.open() )
399 0 : return sal_True;
400 : }
401 0 : break;
402 :
403 : case SETTING_USER_GIVENNAME:
404 : {
405 : OUString aCompleteName( OStringToOUString(
406 0 : g_get_real_name(), osl_getThreadTextEncoding() ) );
407 0 : if( aCompleteName != "Unknown" )
408 0 : return sal_True;
409 : }
410 0 : break;
411 :
412 : case SETTING_USER_SURNAME:
413 : {
414 : OUString aCompleteName( OStringToOUString(
415 0 : g_get_real_name(), osl_getThreadTextEncoding() ) );
416 0 : if( aCompleteName != "Unknown" )
417 : {
418 0 : if( aCompleteName.trim().indexOf( ' ' ) != -1 )
419 0 : return sal_True;
420 0 : }
421 : }
422 0 : break;
423 :
424 : #ifdef ENABLE_LOCKDOWN
425 : case SETTING_AUTO_SAVE:
426 : {
427 : GConfValue* pGconfValue = gconf_client_get( pClient, GCONF_AUTO_SAVE_KEY, NULL );
428 :
429 : if( ( pGconfValue != NULL ) )
430 : {
431 : bool bOk = gconf_value_get_bool( pGconfValue );
432 : gconf_value_free( pGconfValue );
433 : if (bOk) return sal_True;
434 : }
435 : }
436 : break;
437 : case SETTING_USER_AUTO_SAVE:
438 : {
439 : GConfValue* pGconfValue = gconf_client_get( pClient, GCONF_USER_AUTO_SAVE_KEY, NULL );
440 :
441 : if( ( pGconfValue != NULL ) )
442 : {
443 : bool bOk = gconf_value_get_bool( pGconfValue );
444 : gconf_value_free( pGconfValue );
445 : if (bOk) return sal_True;
446 : }
447 : }
448 : break;
449 : #endif // ENABLE_LOCKDOWN
450 :
451 : default:
452 0 : fprintf( stderr, "Unhandled setting to check dependency.\n" );
453 0 : break;
454 : }
455 :
456 0 : return sal_False;
457 : }
458 :
459 : }
460 :
461 : ConfigurationValue const ConfigurationValues[] =
462 : {
463 : {
464 : SETTING_ENABLE_ACCESSIBILITY,
465 : "/desktop/gnome/interface/accessibility",
466 : RTL_CONSTASCII_STRINGPARAM("EnableATToolSupport"),
467 : sal_True,
468 : SETTINGS_LAST
469 : },
470 :
471 : {
472 : SETTING_PROXY_MODE,
473 : GCONF_PROXY_MODE_KEY,
474 : RTL_CONSTASCII_STRINGPARAM("ooInetProxyType"),
475 : sal_True,
476 : SETTINGS_LAST
477 : },
478 :
479 : {
480 : SETTING_PROXY_HTTP_HOST,
481 : "/system/http_proxy/host",
482 : RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName"),
483 : sal_False,
484 : SETTING_PROXY_MODE
485 : },
486 :
487 : {
488 : SETTING_PROXY_HTTP_PORT,
489 : "/system/http_proxy/port",
490 : RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort"),
491 : sal_False,
492 : SETTING_PROXY_MODE
493 : },
494 :
495 : {
496 : SETTING_PROXY_HTTPS_HOST,
497 : "/system/proxy/secure_host",
498 : RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName"),
499 : sal_False,
500 : SETTING_PROXY_MODE
501 : },
502 :
503 : {
504 : SETTING_PROXY_HTTPS_PORT,
505 : "/system/proxy/secure_port",
506 : RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort"),
507 : sal_False,
508 : SETTING_PROXY_MODE
509 : },
510 :
511 : {
512 : SETTING_PROXY_FTP_HOST,
513 : "/system/proxy/ftp_host",
514 : RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName"),
515 : sal_False,
516 : SETTING_PROXY_MODE
517 : },
518 :
519 : {
520 : SETTING_PROXY_FTP_PORT,
521 : "/system/proxy/ftp_port",
522 : RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort"),
523 : sal_False,
524 : SETTING_PROXY_MODE
525 : },
526 :
527 : {
528 : SETTING_NO_PROXY_FOR,
529 : "/system/http_proxy/ignore_hosts",
530 : RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy"),
531 : sal_True,
532 : SETTING_PROXY_MODE
533 : },
534 :
535 : {
536 : SETTING_MAILER_PROGRAM,
537 : "/desktop/gnome/url-handlers/mailto/command",
538 : RTL_CONSTASCII_STRINGPARAM("ExternalMailer"),
539 : sal_True,
540 : SETTINGS_LAST
541 : },
542 : {
543 : SETTING_SOURCEVIEWFONT_NAME,
544 : "/desktop/gnome/interface/monospace_font_name",
545 : RTL_CONSTASCII_STRINGPARAM("SourceViewFontName"),
546 : sal_True,
547 : SETTINGS_LAST
548 : },
549 : {
550 : SETTING_SOURCEVIEWFONT_HEIGHT,
551 : "/desktop/gnome/interface/monospace_font_name",
552 : RTL_CONSTASCII_STRINGPARAM("SourceViewFontHeight"),
553 : sal_True,
554 : SETTINGS_LAST
555 : },
556 :
557 : {
558 : SETTING_WORK_DIRECTORY,
559 : "/desktop/gnome/url-handlers/mailto/command", // dummy
560 : RTL_CONSTASCII_STRINGPARAM("WorkPathVariable"),
561 : sal_True,
562 : SETTING_WORK_DIRECTORY, // so that the existence of the dir can be checked
563 : },
564 :
565 : {
566 : SETTING_USER_GIVENNAME,
567 : "/desktop/gnome/url-handlers/mailto/command", // dummy
568 : RTL_CONSTASCII_STRINGPARAM("givenname"),
569 : sal_True,
570 : SETTING_USER_GIVENNAME
571 : },
572 :
573 : {
574 : SETTING_USER_SURNAME,
575 : "/desktop/gnome/url-handlers/mailto/command", // dummy
576 : RTL_CONSTASCII_STRINGPARAM("sn"),
577 : sal_True,
578 : SETTING_USER_SURNAME
579 : },
580 :
581 : #ifdef ENABLE_LOCKDOWN
582 : {
583 : SETTING_WRITER_DEFAULT_DOC_FORMAT,
584 : "/apps/openoffice/writer_default_document_format",
585 : RTL_CONSTASCII_STRINGPARAM("TextDocumentSetupFactoryDefaultFilter"),
586 : sal_False,
587 : SETTINGS_LAST
588 : },
589 :
590 : {
591 : SETTING_IMPRESS_DEFAULT_DOC_FORMAT,
592 : "/apps/openoffice/impress_default_document_format",
593 : RTL_CONSTASCII_STRINGPARAM("PresentationDocumentSetupFactoryDefaultFilter"),
594 : sal_False,
595 : SETTINGS_LAST
596 : },
597 :
598 : {
599 : SETTING_CALC_DEFAULT_DOC_FORMAT,
600 : "/apps/openoffice/calc_default_document_format",
601 : RTL_CONSTASCII_STRINGPARAM("SpreadsheetDocumentSetupFactoryDefaultFilter"),
602 : sal_False,
603 : SETTINGS_LAST
604 : },
605 :
606 : {
607 : SETTING_AUTO_SAVE,
608 : GCONF_AUTO_SAVE_KEY,
609 : RTL_CONSTASCII_STRINGPARAM("AutoSaveEnabled"),
610 : sal_False,
611 : SETTINGS_LAST
612 : },
613 :
614 : {
615 : SETTING_USER_AUTO_SAVE,
616 : GCONF_USER_AUTO_SAVE_KEY,
617 : RTL_CONSTASCII_STRINGPARAM("UserAutoSaveEnabled"),
618 : sal_False,
619 : SETTINGS_LAST
620 : },
621 :
622 : {
623 : SETTING_AUTO_SAVE_INTERVAL,
624 : "/apps/openoffice/auto_save_interval",
625 : RTL_CONSTASCII_STRINGPARAM("AutoSaveTimeIntervall"),
626 : sal_False,
627 : SETTING_AUTO_SAVE
628 : },
629 :
630 : {
631 : SETTING_DISABLE_PRINTING,
632 : "/desktop/gnome/lockdown/disable_printing",
633 : RTL_CONSTASCII_STRINGPARAM("DisablePrinting"),
634 : sal_True,
635 : SETTINGS_LAST
636 : },
637 :
638 : {
639 : SETTING_USE_SYSTEM_FILE_DIALOG,
640 : "/apps/openoffice/use_system_file_dialog",
641 : RTL_CONSTASCII_STRINGPARAM("UseSystemFileDialog"),
642 : sal_False,
643 : SETTINGS_LAST
644 : },
645 :
646 : {
647 : SETTING_PRINTING_MODIFIES_DOCUMENT,
648 : "/apps/openoffice/printing_modifies_doc",
649 : RTL_CONSTASCII_STRINGPARAM("PrintingModifiesDocument"),
650 : sal_False,
651 : SETTINGS_LAST
652 : },
653 :
654 : {
655 : SETTING_SHOW_ICONS_IN_MENUS,
656 : "/apps/openoffice/show_menu_icons",
657 : RTL_CONSTASCII_STRINGPARAM("ShowIconsInMenues"),
658 : sal_False,
659 : SETTINGS_LAST
660 : },
661 :
662 : {
663 : SETTING_SHOW_INACTIVE_MENUITEMS,
664 : "/apps/openoffice/show_menu_inactive_items",
665 : RTL_CONSTASCII_STRINGPARAM("DontHideDisabledEntry"),
666 : sal_False,
667 : SETTINGS_LAST
668 : },
669 :
670 : {
671 : SETTING_SHOW_FONT_PREVIEW,
672 : "/apps/openoffice/show_font_preview",
673 : RTL_CONSTASCII_STRINGPARAM("ShowFontBoxWYSIWYG"),
674 : sal_False,
675 : SETTINGS_LAST
676 : },
677 :
678 : {
679 : SETTING_SHOW_FONT_HISTORY,
680 : "/apps/openoffice/show_font_history",
681 : RTL_CONSTASCII_STRINGPARAM("FontViewHistory"),
682 : sal_False,
683 : SETTINGS_LAST
684 : },
685 :
686 : {
687 : SETTING_ENABLE_OPENGL,
688 : "/apps/openoffice/use_opengl",
689 : RTL_CONSTASCII_STRINGPARAM("OpenGL"),
690 : sal_False,
691 : SETTINGS_LAST
692 : },
693 :
694 : {
695 : SETTING_OPTIMIZE_OPENGL,
696 : "/apps/openoffice/optimize_opengl",
697 : RTL_CONSTASCII_STRINGPARAM("OpenGL_Faster"),
698 : sal_False,
699 : SETTINGS_LAST
700 : },
701 :
702 : {
703 : SETTING_USE_SYSTEM_FONT,
704 : "/apps/openoffice/use_system_font",
705 : RTL_CONSTASCII_STRINGPARAM("AccessibilityIsSystemFont"),
706 : sal_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 : sal_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 : sal_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 : sal_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 : sal_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 : sal_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 : sal_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 : sal_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 : sal_False,
771 : SETTINGS_LAST
772 : },
773 :
774 : {
775 : SETTING_UNDO_STEPS,
776 : "/apps/openoffice/undo_steps",
777 : RTL_CONSTASCII_STRINGPARAM("UndoSteps"),
778 : sal_False,
779 : SETTINGS_LAST
780 : },
781 :
782 : {
783 : SETTING_SYMBOL_SET,
784 : "/apps/openoffice/icon_size",
785 : RTL_CONSTASCII_STRINGPARAM("SymbolSet"),
786 : sal_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 : sal_False,
795 : SETTINGS_LAST
796 : },
797 :
798 : {
799 : SETTING_CREATE_BACKUP,
800 : "/apps/openoffice/create_backup",
801 : RTL_CONSTASCII_STRINGPARAM("CreateBackup"),
802 : sal_False,
803 : SETTINGS_LAST
804 : },
805 :
806 : {
807 : SETTING_WARN_ALIEN_FORMAT,
808 : "/apps/openoffice/warn_alien_format",
809 : RTL_CONSTASCII_STRINGPARAM("WarnAlienFormat"),
810 : sal_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 : GConfValue* pGconfValue;
824 0 : if( ( data.nDependsOn == SETTINGS_LAST ) || isDependencySatisfied( pClient, data ) )
825 : {
826 0 : pGconfValue = gconf_client_get( pClient, data.GconfItem, NULL );
827 :
828 0 : if( pGconfValue != NULL )
829 : {
830 0 : css::uno::Any value;
831 0 : if( data.bNeedsTranslation )
832 0 : value = translateToOOo( data, pGconfValue );
833 : else
834 0 : value = makeAnyOfGconfValue( pGconfValue );
835 :
836 0 : gconf_value_free( pGconfValue );
837 :
838 0 : return css::beans::Optional< css::uno::Any >(true, value);
839 : }
840 : }
841 0 : return css::beans::Optional< css::uno::Any >();
842 : }
843 :
844 : }
845 :
846 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|