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