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