LibreOffice Module cui (master)  1
optinet2.cxx
Go to the documentation of this file.
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/config.h>
21 
22 #include <string_view>
23 
24 #include <officecfg/Inet.hxx>
25 #include <officecfg/Office/Common.hxx>
26 #include <officecfg/Office/Security.hxx>
27 #include <vcl/weld.hxx>
28 #include <sfx2/filedlghelper.hxx>
29 #include <vcl/svapp.hxx>
31 #include <com/sun/star/uno/Sequence.hxx>
32 #include <tools/diagnose_ex.h>
33 
34 #include <dialmgr.hxx>
35 #include "optinet2.hxx"
36 #include <strings.hrc>
37 
38 #include <com/sun/star/security/DocumentDigitalSignatures.hpp>
39 #include <com/sun/star/task/InteractionHandler.hpp>
40 
41 #include <sal/types.h>
42 #include <sal/log.hxx>
43 #include <rtl/ustring.hxx>
44 #include <osl/file.hxx>
45 #include <com/sun/star/configuration/theDefaultProvider.hpp>
46 #include <com/sun/star/container/XNameAccess.hpp>
47 #include <com/sun/star/beans/NamedValue.hpp>
48 #include <com/sun/star/beans/XPropertySet.hpp>
49 #include <com/sun/star/beans/XPropertyState.hpp>
50 #include <com/sun/star/util/XChangesBatch.hpp>
52 #include <comphelper/string.hxx>
53 
54 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
55 #include <com/sun/star/task/PasswordContainer.hpp>
56 #include <com/sun/star/task/XPasswordContainer2.hpp>
57 #include "securityoptions.hxx"
58 #include "webconninfo.hxx"
59 #include "certpath.hxx"
60 #include "tsaurls.hxx"
61 
63 
64 using namespace ::com::sun::star;
65 using namespace ::com::sun::star::uno;
66 using namespace ::sfx2;
67 
68 namespace {
69 
70 bool isValidPort(OUString const & value) {
72  return false;
73  }
74  auto const n = value.toUInt64();
75  if (n > 65535) {
76  return false;
77  }
78  if (n != 0) {
79  return true;
80  }
81  // Overflow in OUString::toUInt64 returns 0, so need to check value contains only zeroes:
82  return std::u16string_view(value).find_first_not_of(u'0') == std::u16string_view::npos;
83 }
84 
85 }
86 
87 IMPL_LINK(SvxProxyTabPage, PortChangedHdl, weld::Entry&, rEdit, void)
88 {
89  if (!isValidPort(rEdit.get_text()))
90  {
91  std::unique_ptr<weld::MessageDialog> xErrorBox(Application::CreateMessageDialog(GetFrameWeld(),
92  VclMessageType::Warning, VclButtonsType::Ok,
93  CuiResId( RID_SVXSTR_OPT_PROXYPORTS)));
94  xErrorBox->run();
95  }
96 }
97 
98 static const char g_aProxyModePN[] = "ooInetProxyType";
99 static const char g_aHttpProxyPN[] = "ooInetHTTPProxyName";
100 static const char g_aHttpPortPN[] = "ooInetHTTPProxyPort";
101 static const char g_aHttpsProxyPN[] = "ooInetHTTPSProxyName";
102 static const char g_aHttpsPortPN[] = "ooInetHTTPSProxyPort";
103 static const char g_aFtpProxyPN[] = "ooInetFTPProxyName";
104 static const char g_aFtpPortPN[] = "ooInetFTPProxyPort";
105 static const char g_aNoProxyDescPN[] = "ooInetNoProxy";
106 
107 IMPL_STATIC_LINK(SvxProxyTabPage, NumberOnlyTextFilterHdl, OUString&, rTest, bool)
108 {
109  OUStringBuffer sAllowed;
110  for (sal_Int32 i = 0, nLen = rTest.getLength(); i < nLen; ++i)
111  {
112  if (rTest[i] >= '0' && rTest[i] <= '9')
113  sAllowed.append(rTest[i]);
114  }
115  rTest = sAllowed.makeStringAndClear();
116  return true;
117 }
118 
119 IMPL_STATIC_LINK(SvxProxyTabPage, NoSpaceTextFilterHdl, OUString&, rTest, bool)
120 {
121  rTest = rTest.replaceAll(" ", "");
122  return true;
123 }
124 
125 /********************************************************************/
126 /* */
127 /* SvxProxyTabPage */
128 /* */
129 /********************************************************************/
131  : SfxTabPage(pPage, pController, "cui/ui/optproxypage.ui", "OptProxyPage", &rSet)
132  , m_xProxyModeLB(m_xBuilder->weld_combo_box("proxymode"))
133  , m_xHttpProxyFT(m_xBuilder->weld_label("httpft"))
134  , m_xHttpProxyED(m_xBuilder->weld_entry("http"))
135  , m_xHttpPortFT(m_xBuilder->weld_label("httpportft"))
136  , m_xHttpPortED(m_xBuilder->weld_entry("httpport"))
137  , m_xHttpsProxyFT(m_xBuilder->weld_label("httpsft"))
138  , m_xHttpsProxyED(m_xBuilder->weld_entry("https"))
139  , m_xHttpsPortFT(m_xBuilder->weld_label("httpsportft"))
140  , m_xHttpsPortED(m_xBuilder->weld_entry("httpsport"))
141  , m_xFtpProxyFT(m_xBuilder->weld_label("ftpft"))
142  , m_xFtpProxyED(m_xBuilder->weld_entry("ftp"))
143  , m_xFtpPortFT(m_xBuilder->weld_label("ftpportft"))
144  , m_xFtpPortED(m_xBuilder->weld_entry("ftpport"))
145  , m_xNoProxyForFT(m_xBuilder->weld_label("noproxyft"))
146  , m_xNoProxyForED(m_xBuilder->weld_entry("noproxy"))
147  , m_xNoProxyDescFT(m_xBuilder->weld_label("noproxydesc"))
148 {
149  m_xHttpProxyED->connect_insert_text(LINK(this, SvxProxyTabPage, NoSpaceTextFilterHdl));
150  m_xHttpPortED->connect_insert_text(LINK(this, SvxProxyTabPage, NumberOnlyTextFilterHdl));
151  m_xHttpPortED->connect_changed(LINK(this, SvxProxyTabPage, PortChangedHdl));
152  m_xHttpsProxyED->connect_insert_text(LINK(this, SvxProxyTabPage, NoSpaceTextFilterHdl));
153  m_xHttpsPortED->connect_insert_text(LINK(this, SvxProxyTabPage, NumberOnlyTextFilterHdl));
154  m_xHttpsPortED->connect_changed(LINK(this, SvxProxyTabPage, PortChangedHdl));
155  m_xFtpProxyED->connect_insert_text(LINK(this, SvxProxyTabPage, NoSpaceTextFilterHdl));
156  m_xFtpPortED->connect_insert_text(LINK(this, SvxProxyTabPage, NumberOnlyTextFilterHdl));
157  m_xFtpPortED->connect_changed(LINK(this, SvxProxyTabPage, PortChangedHdl));
158 
159  Link<weld::Widget&,void> aLink = LINK( this, SvxProxyTabPage, LoseFocusHdl_Impl );
160  m_xHttpPortED->connect_focus_out( aLink );
161  m_xHttpsPortED->connect_focus_out( aLink );
162  m_xFtpPortED->connect_focus_out( aLink );
163 
164  m_xProxyModeLB->connect_changed(LINK( this, SvxProxyTabPage, ProxyHdl_Impl ));
165 
166  Reference< css::lang::XMultiServiceFactory >
167  xConfigurationProvider(
168  configuration::theDefaultProvider::get(
170 
171  beans::NamedValue aProperty;
172  aProperty.Name = "nodepath";
173  aProperty.Value <<= OUString( "org.openoffice.Inet/Settings" );
174 
175  Sequence< Any > aArgumentList( 1 );
176  aArgumentList[0] <<= aProperty;
177 
178  m_xConfigurationUpdateAccess = xConfigurationProvider->createInstanceWithArguments(
179  "com.sun.star.configuration.ConfigurationUpdateAccess",
180  aArgumentList );
181 }
182 
184 {
185 }
186 
187 std::unique_ptr<SfxTabPage> SvxProxyTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet )
188 {
189  return std::make_unique<SvxProxyTabPage>(pPage, pController, *rAttrSet);
190 }
191 
193 {
194  try {
196 
197  sal_Int32 nIntValue = 0;
198  OUString aStringValue;
199 
200  if( xNameAccess->getByName(g_aProxyModePN) >>= nIntValue )
201  {
202  m_xProxyModeLB->set_active(nIntValue);
203  }
204 
205  if( xNameAccess->getByName(g_aHttpProxyPN) >>= aStringValue )
206  {
207  m_xHttpProxyED->set_text( aStringValue );
208  }
209 
210  if( xNameAccess->getByName(g_aHttpPortPN) >>= nIntValue )
211  {
212  m_xHttpPortED->set_text( OUString::number( nIntValue ));
213  }
214 
215  if( xNameAccess->getByName(g_aHttpsProxyPN) >>= aStringValue )
216  {
217  m_xHttpsProxyED->set_text( aStringValue );
218  }
219 
220  if( xNameAccess->getByName(g_aHttpsPortPN) >>= nIntValue )
221  {
222  m_xHttpsPortED->set_text( OUString::number( nIntValue ));
223  }
224 
225  if( xNameAccess->getByName(g_aFtpProxyPN) >>= aStringValue )
226  {
227  m_xFtpProxyED->set_text( aStringValue );
228  }
229 
230  if( xNameAccess->getByName(g_aFtpPortPN) >>= nIntValue )
231  {
232  m_xFtpPortED->set_text( OUString::number( nIntValue ));
233  }
234 
235  if( xNameAccess->getByName(g_aNoProxyDescPN) >>= aStringValue )
236  {
237  m_xNoProxyForED->set_text( aStringValue );
238  }
239  }
240  catch (const container::NoSuchElementException&) {
241  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigData_Impl: NoSuchElementException caught" );
242  }
243  catch (const css::lang::WrappedTargetException &) {
244  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigData_Impl: WrappedTargetException caught" );
245  }
246  catch (const RuntimeException &) {
247  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigData_Impl: RuntimeException caught" );
248  }
249 }
250 
252 {
253  try
254  {
255  Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
256 
257  sal_Int32 nIntValue = 0;
258  OUString aStringValue;
259 
260  if( xPropertyState->getPropertyDefault(g_aHttpProxyPN) >>= aStringValue )
261  {
262  m_xHttpProxyED->set_text( aStringValue );
263  }
264 
265  if( xPropertyState->getPropertyDefault(g_aHttpPortPN) >>= nIntValue )
266  {
267  m_xHttpPortED->set_text( OUString::number( nIntValue ));
268  }
269 
270  if( xPropertyState->getPropertyDefault(g_aHttpsProxyPN) >>= aStringValue )
271  {
272  m_xHttpsProxyED->set_text( aStringValue );
273  }
274 
275  if( xPropertyState->getPropertyDefault(g_aHttpsPortPN) >>= nIntValue )
276  {
277  m_xHttpsPortED->set_text( OUString::number( nIntValue ));
278  }
279 
280  if( xPropertyState->getPropertyDefault(g_aFtpProxyPN) >>= aStringValue )
281  {
282  m_xFtpProxyED->set_text( aStringValue );
283  }
284 
285  if( xPropertyState->getPropertyDefault(g_aFtpPortPN) >>= nIntValue )
286  {
287  m_xFtpPortED->set_text( OUString::number( nIntValue ));
288  }
289 
290  if( xPropertyState->getPropertyDefault(g_aNoProxyDescPN) >>= aStringValue )
291  {
292  m_xNoProxyForED->set_text( aStringValue );
293  }
294  }
295  catch (const beans::UnknownPropertyException &)
296  {
297  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigDefaults_Impl: UnknownPropertyException caught" );
298  }
299  catch (const css::lang::WrappedTargetException &) {
300  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigDefaults_Impl: WrappedTargetException caught" );
301  }
302  catch (const RuntimeException &)
303  {
304  SAL_WARN("cui.options", "SvxProxyTabPage::ReadConfigDefaults_Impl: RuntimeException caught" );
305  }
306 }
307 
309 {
310  try
311  {
312  Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
313 
314  xPropertyState->setPropertyToDefault(g_aProxyModePN);
315  xPropertyState->setPropertyToDefault(g_aHttpProxyPN);
316  xPropertyState->setPropertyToDefault(g_aHttpPortPN);
317  xPropertyState->setPropertyToDefault(g_aHttpsProxyPN);
318  xPropertyState->setPropertyToDefault(g_aHttpsPortPN);
319  xPropertyState->setPropertyToDefault(g_aFtpProxyPN);
320  xPropertyState->setPropertyToDefault(g_aFtpPortPN);
321  xPropertyState->setPropertyToDefault(g_aNoProxyDescPN);
322 
323  Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
324  xChangesBatch->commitChanges();
325  }
326  catch (const beans::UnknownPropertyException &)
327  {
328  SAL_WARN("cui.options", "SvxProxyTabPage::RestoreConfigDefaults_Impl: UnknownPropertyException caught" );
329  }
330  catch (const css::lang::WrappedTargetException &) {
331  SAL_WARN("cui.options", "SvxProxyTabPage::RestoreConfigDefaults_Impl: WrappedTargetException caught" );
332  }
333  catch (const RuntimeException &)
334  {
335  SAL_WARN("cui.options", "SvxProxyTabPage::RestoreConfigDefaults_Impl: RuntimeException caught" );
336  }
337 }
338 
340 {
342 
343  m_xProxyModeLB->save_value();
344  m_xHttpProxyED->save_value();
345  m_xHttpPortED->save_value();
346  m_xHttpsProxyED->save_value();
347  m_xHttpsPortED->save_value();
348  m_xFtpProxyED->save_value();
349  m_xFtpPortED->save_value();
350  m_xNoProxyForED->save_value();
351 
353 }
354 
356 {
357  bool bModified = false;
358 
359  try {
360  Reference< beans::XPropertySet > xPropertySet(m_xConfigurationUpdateAccess, UNO_QUERY_THROW );
361 
362  sal_Int32 nSelPos = m_xProxyModeLB->get_active();
363  if(m_xProxyModeLB->get_value_changed_from_saved())
364  {
365  if( nSelPos == 1 )
366  {
368  return true;
369  }
370 
371  xPropertySet->setPropertyValue(g_aProxyModePN, Any(nSelPos));
372  bModified = true;
373  }
374 
375  if(m_xHttpProxyED->get_value_changed_from_saved())
376  {
377  xPropertySet->setPropertyValue( g_aHttpProxyPN, Any(m_xHttpProxyED->get_text()));
378  bModified = true;
379  }
380 
381  if ( m_xHttpPortED->get_value_changed_from_saved())
382  {
383  xPropertySet->setPropertyValue( g_aHttpPortPN, Any(m_xHttpPortED->get_text().toInt32()));
384  bModified = true;
385  }
386 
387  if( m_xHttpsProxyED->get_value_changed_from_saved() )
388  {
389  xPropertySet->setPropertyValue( g_aHttpsProxyPN, Any(m_xHttpsProxyED->get_text()) );
390  bModified = true;
391  }
392 
393  if ( m_xHttpsPortED->get_value_changed_from_saved() )
394  {
395  xPropertySet->setPropertyValue( g_aHttpsPortPN, Any(m_xHttpsPortED->get_text().toInt32()) );
396  bModified = true;
397  }
398 
399  if( m_xFtpProxyED->get_value_changed_from_saved())
400  {
401  xPropertySet->setPropertyValue( g_aFtpProxyPN, Any(m_xFtpProxyED->get_text()) );
402  bModified = true;
403  }
404 
405  if ( m_xFtpPortED->get_value_changed_from_saved() )
406  {
407  xPropertySet->setPropertyValue( g_aFtpPortPN, Any(m_xFtpPortED->get_text().toInt32()));
408  bModified = true;
409  }
410 
411  if ( m_xNoProxyForED->get_value_changed_from_saved() )
412  {
413  xPropertySet->setPropertyValue( g_aNoProxyDescPN, Any( m_xNoProxyForED->get_text()));
414  bModified = true;
415  }
416 
417  Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
418  xChangesBatch->commitChanges();
419  }
420  catch (const css::lang::IllegalArgumentException &) {
421  SAL_WARN("cui.options", "SvxProxyTabPage::FillItemSet: IllegalArgumentException caught" );
422  }
423  catch (const beans::UnknownPropertyException &) {
424  SAL_WARN("cui.options", "SvxProxyTabPage::FillItemSet: UnknownPropertyException caught" );
425  }
426  catch (const beans::PropertyVetoException &) {
427  SAL_WARN("cui.options", "SvxProxyTabPage::FillItemSet: PropertyVetoException caught" );
428  }
429  catch (const css::lang::WrappedTargetException &) {
430  SAL_WARN("cui.options", "SvxProxyTabPage::FillItemSet: WrappedTargetException caught" );
431  }
432  catch (const RuntimeException &) {
433  SAL_WARN("cui.options", "SvxProxyTabPage::FillItemSet: RuntimeException caught" );
434  }
435 
436  return bModified;
437 }
438 
440 {
441  m_xProxyModeLB->set_sensitive(!officecfg::Inet::Settings::ooInetNoProxy::isReadOnly());
442 
443  const bool bManualConfig = m_xProxyModeLB->get_active() == 2;
444 
445  const bool bHTTPProxyNameEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetHTTPProxyName::isReadOnly();
446  const bool bHTTPProxyPortEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetHTTPProxyPort::isReadOnly();
447  m_xHttpProxyFT->set_sensitive(bHTTPProxyNameEnabled);
448  m_xHttpProxyED->set_sensitive(bHTTPProxyNameEnabled);
449  m_xHttpPortFT->set_sensitive(bHTTPProxyPortEnabled);
450  m_xHttpPortED->set_sensitive(bHTTPProxyPortEnabled);
451 
452  const bool bHTTPSProxyNameEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetHTTPSProxyName::isReadOnly();
453  const bool bHTTPSProxyPortEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetHTTPSProxyPort::isReadOnly();
454  m_xHttpsProxyFT->set_sensitive(bHTTPSProxyNameEnabled);
455  m_xHttpsProxyED->set_sensitive(bHTTPSProxyNameEnabled);
456  m_xHttpsPortFT->set_sensitive(bHTTPSProxyPortEnabled);
457  m_xHttpsPortED->set_sensitive(bHTTPSProxyPortEnabled);
458 
459  const bool bFTPProxyNameEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetFTPProxyName::isReadOnly();
460  const bool bFTPProxyPortEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetFTPProxyPort::isReadOnly();
461  m_xFtpProxyFT->set_sensitive(bFTPProxyNameEnabled);
462  m_xFtpProxyED->set_sensitive(bFTPProxyNameEnabled);
463  m_xFtpPortFT->set_sensitive(bFTPProxyPortEnabled);
464  m_xFtpPortED->set_sensitive(bFTPProxyPortEnabled);
465 
466  const bool bInetNoProxyEnabled = bManualConfig && !officecfg::Inet::Settings::ooInetNoProxy::isReadOnly();
467  m_xNoProxyForFT->set_sensitive(bInetNoProxyEnabled);
468  m_xNoProxyForED->set_sensitive(bInetNoProxyEnabled);
469  m_xNoProxyDescFT->set_sensitive(bInetNoProxyEnabled);
470 }
471 
472 IMPL_LINK(SvxProxyTabPage, ProxyHdl_Impl, weld::ComboBox&, rBox, void)
473 {
474  sal_Int32 nPos = rBox.get_active();
475 
476  // Restore original system values
477  if( nPos == 1 )
478  {
479  ReadConfigDefaults_Impl();
480  }
481 
482  EnableControls_Impl();
483 }
484 
485 IMPL_STATIC_LINK(SvxProxyTabPage, LoseFocusHdl_Impl, weld::Widget&, rControl, void)
486 {
487  weld::Entry* pEdit = dynamic_cast<weld::Entry*>(&rControl);
488  if (pEdit && !isValidPort(pEdit->get_text()))
489  pEdit->set_text(OUString('0'));
490 }
491 
492 /********************************************************************/
493 /* */
494 /* SvxSecurityTabPage */
495 /* */
496 /********************************************************************/
498  : SfxTabPage(pPage, pController, "cui/ui/optsecuritypage.ui", "OptSecurityPage", &rSet)
499  , mpSecOptions(new SvtSecurityOptions)
500  , m_xSecurityOptionsPB(m_xBuilder->weld_button("options"))
501  , m_xSavePasswordsCB(m_xBuilder->weld_check_button("savepassword"))
502  , m_xShowConnectionsPB(m_xBuilder->weld_button("connections"))
503  , m_xMasterPasswordCB(m_xBuilder->weld_check_button("usemasterpassword"))
504  , m_xMasterPasswordFT(m_xBuilder->weld_label("masterpasswordtext"))
505  , m_xMasterPasswordPB(m_xBuilder->weld_button("masterpassword"))
506  , m_xMacroSecFrame(m_xBuilder->weld_container("macrosecurity"))
507  , m_xMacroSecPB(m_xBuilder->weld_button("macro"))
508  , m_xCertFrame(m_xBuilder->weld_container("certificatepath"))
509  , m_xCertPathPB(m_xBuilder->weld_button("cert"))
510  , m_xTSAURLsFrame(m_xBuilder->weld_container("tsaurls"))
511  , m_xTSAURLsPB(m_xBuilder->weld_button("tsas"))
512  , m_xNoPasswordSaveFT(m_xBuilder->weld_label("nopasswordsave"))
513 {
514  //fdo#65595, we need height-for-width support here, but for now we can
515  //bodge it
516  Size aPrefSize(m_xSavePasswordsCB->get_preferred_size());
517  int nMaxWidth = m_xSavePasswordsCB->get_approximate_digit_width() * 40;
518  if (aPrefSize.Width() > nMaxWidth)
519  {
520  m_xSavePasswordsCB->set_label_line_wrap(true);
521  m_xSavePasswordsCB->set_size_request(nMaxWidth, -1);
522  }
523 
525 
526  InitControls();
527 
528  m_xSecurityOptionsPB->connect_clicked( LINK( this, SvxSecurityTabPage, SecurityOptionsHdl ) );
529  m_xSavePasswordsCB->connect_clicked( LINK( this, SvxSecurityTabPage, SavePasswordHdl ) );
530  m_xMasterPasswordPB->connect_clicked( LINK( this, SvxSecurityTabPage, MasterPasswordHdl ) );
531  m_xMasterPasswordCB->connect_clicked( LINK( this, SvxSecurityTabPage, MasterPasswordCBHdl ) );
532  m_xShowConnectionsPB->connect_clicked( LINK( this, SvxSecurityTabPage, ShowPasswordsHdl ) );
533  m_xMacroSecPB->connect_clicked( LINK( this, SvxSecurityTabPage, MacroSecPBHdl ) );
534  m_xCertPathPB->connect_clicked( LINK( this, SvxSecurityTabPage, CertPathPBHdl ) );
535  m_xTSAURLsPB->connect_clicked( LINK( this, SvxSecurityTabPage, TSAURLsPBHdl ) );
536 
537  ActivatePage( rSet );
538 }
539 
541 {
542 }
543 
544 IMPL_LINK_NOARG(SvxSecurityTabPage, SecurityOptionsHdl, weld::Button&, void)
545 {
546  if (!m_xSecOptDlg)
547  m_xSecOptDlg.reset(new svx::SecurityOptionsDialog(GetFrameWeld(), mpSecOptions.get()));
548  m_xSecOptDlg->run();
549 }
550 
552 {
553  try
554  {
555  Reference< task::XPasswordContainer2 > xMasterPasswd(
556  task::PasswordContainer::create(comphelper::getProcessComponentContext()));
557 
558  if ( m_xSavePasswordsCB->get_active() )
559  {
560  bool bOldValue = xMasterPasswd->allowPersistentStoring( true );
561  xMasterPasswd->removeMasterPassword();
562 
563  uno::Reference<task::XInteractionHandler> xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
564  GetDialogController()->getDialog()->GetXWindow()));
565 
566  if ( xMasterPasswd->changeMasterPassword(xTmpHandler) )
567  {
568  m_xMasterPasswordPB->set_sensitive(true);
569  m_xMasterPasswordCB->set_active(true);
570  m_xMasterPasswordCB->set_sensitive(true);
571  m_xMasterPasswordFT->set_sensitive(true);
572  m_xShowConnectionsPB->set_sensitive(true);
573  }
574  else
575  {
576  xMasterPasswd->allowPersistentStoring( bOldValue );
577  m_xSavePasswordsCB->set_active( false );
578  }
579  }
580  else
581  {
582  std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(GetFrameWeld(),
583  VclMessageType::Question, VclButtonsType::YesNo,
584  m_sPasswordStoringDeactivateStr));
585  xQueryBox->set_default_response(RET_NO);
586 
587  sal_uInt16 nRet = xQueryBox->run();
588 
589  if( RET_YES == nRet )
590  {
591  xMasterPasswd->allowPersistentStoring( false );
592  m_xMasterPasswordCB->set_active(true);
593  m_xMasterPasswordPB->set_sensitive( false );
594  m_xMasterPasswordCB->set_sensitive( false );
595  m_xMasterPasswordFT->set_sensitive( false );
596  m_xShowConnectionsPB->set_sensitive( false );
597  }
598  else
599  {
600  m_xSavePasswordsCB->set_active(true);
601  m_xMasterPasswordPB->set_sensitive(true);
602  m_xShowConnectionsPB->set_sensitive(true);
603  }
604  }
605  }
606  catch (const Exception&)
607  {
608  m_xSavePasswordsCB->set_active( !m_xSavePasswordsCB->get_active() );
609  }
610 }
611 
613 {
614  try
615  {
616  Reference< task::XPasswordContainer2 > xMasterPasswd(
617  task::PasswordContainer::create(comphelper::getProcessComponentContext()));
618 
619  if ( xMasterPasswd->isPersistentStoringAllowed() )
620  {
621  uno::Reference<task::XInteractionHandler> xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
622  GetDialogController()->getDialog()->GetXWindow()));
623  xMasterPasswd->changeMasterPassword(xTmpHandler);
624  }
625  }
626  catch (const Exception&)
627  {}
628 }
629 
630 IMPL_LINK_NOARG(SvxSecurityTabPage, MasterPasswordCBHdl, weld::Button&, void)
631 {
632  try
633  {
634  Reference< task::XPasswordContainer2 > xMasterPasswd(
635  task::PasswordContainer::create(comphelper::getProcessComponentContext()));
636 
637  uno::Reference<task::XInteractionHandler> xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
638  GetDialogController()->getDialog()->GetXWindow()));
639 
640  if ( m_xMasterPasswordCB->get_active() )
641  {
642  if (xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->changeMasterPassword(xTmpHandler))
643  {
644  m_xMasterPasswordPB->set_sensitive(true);
645  m_xMasterPasswordFT->set_sensitive(true);
646  }
647  else
648  {
649  m_xMasterPasswordCB->set_active( false );
650  m_xMasterPasswordPB->set_sensitive(true);
651  m_xMasterPasswordFT->set_sensitive(true);
652  }
653  }
654  else
655  {
656  if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->useDefaultMasterPassword(xTmpHandler) )
657  {
658  m_xMasterPasswordPB->set_sensitive( false );
659  m_xMasterPasswordFT->set_sensitive( false );
660  }
661  else
662  {
663  m_xMasterPasswordCB->set_active(true);
664  m_xMasterPasswordPB->set_sensitive(true);
665  m_xShowConnectionsPB->set_sensitive(true);
666  }
667  }
668  }
669  catch (const Exception&)
670  {
671  m_xSavePasswordsCB->set_active( !m_xSavePasswordsCB->get_active() );
672  }
673 }
674 
676 {
677  try
678  {
679  Reference< task::XPasswordContainer2 > xMasterPasswd(
680  task::PasswordContainer::create(comphelper::getProcessComponentContext()));
681 
682  uno::Reference<task::XInteractionHandler> xTmpHandler(task::InteractionHandler::createWithParent(comphelper::getProcessComponentContext(),
683  GetDialogController()->getDialog()->GetXWindow()));
684 
685  if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->authorizateWithMasterPassword(xTmpHandler) )
686  {
688  aDlg.run();
689  }
690  }
691  catch (const Exception&)
692  {}
693 }
694 
696 {
697  if (!mpCertPathDlg)
698  mpCertPathDlg.reset(new CertPathDialog(GetFrameWeld()));
699 
700  OUString sOrig = mpCertPathDlg->getDirectory();
701  short nRet = mpCertPathDlg->run();
702 
703  if (nRet == RET_OK && sOrig != mpCertPathDlg->getDirectory())
704  {
705  SolarMutexGuard aGuard;
707  GetDialogController()->response(RET_OK);
708  }
709 }
710 
712 {
713  // Unlike the mpCertPathDlg, we *don't* keep the same dialog object around between
714  // invocations. Seems clearer to my little brain that way.
715  TSAURLsDialog aTSAURLsDlg(GetFrameWeld());
716  aTSAURLsDlg.run();
717 }
718 
720 {
721  try
722  {
723  Reference< security::XDocumentDigitalSignatures > xD(
724  security::DocumentDigitalSignatures::createDefault(comphelper::getProcessComponentContext() ) );
725  xD->setParentWindow(GetDialogController()->getDialog()->GetXWindow());
726  xD->manageTrustedSources();
727  }
728  catch (const Exception&)
729  {
730  TOOLS_WARN_EXCEPTION( "cui.options", "");
731  }
732 }
733 
735 {
736 #ifndef UNX
737  m_xCertFrame->hide();
738 #endif
739 
740  m_xMasterPasswordPB->set_sensitive( false );
741  m_xMasterPasswordCB->set_sensitive( false );
742  m_xMasterPasswordCB->set_active(true);
743  m_xMasterPasswordFT->set_sensitive( false );
744  m_xShowConnectionsPB->set_sensitive( false );
745 
746  // initialize the password saving checkbox
747  try
748  {
749  Reference< task::XPasswordContainer2 > xMasterPasswd(
750  task::PasswordContainer::create(comphelper::getProcessComponentContext()));
751 
752  if ( xMasterPasswd->isPersistentStoringAllowed() )
753  {
754  m_xMasterPasswordCB->set_sensitive(true);
755  m_xShowConnectionsPB->set_sensitive(true);
756  m_xSavePasswordsCB->set_active(true);
757 
758  if ( xMasterPasswd->isDefaultMasterPasswordUsed() )
759  m_xMasterPasswordCB->set_active( false );
760  else
761  {
762  m_xMasterPasswordPB->set_sensitive(true);
763  m_xMasterPasswordCB->set_active(true);
764  m_xMasterPasswordFT->set_sensitive(true);
765  }
766  }
767  }
768  catch (const Exception&)
769  {
770  m_xSavePasswordsCB->set_sensitive( false );
771  }
772 }
773 
774 std::unique_ptr<SfxTabPage> SvxSecurityTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet )
775 {
776  return std::make_unique<SvxSecurityTabPage>(pPage, pController, *rAttrSet);
777 }
778 
780 {
781 }
782 
784 {
785  if( _pSet )
786  FillItemSet( _pSet );
787  return DeactivateRC::LeavePage;
788 }
789 
790 namespace
791 {
792  bool CheckAndSave( SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt, const bool _bIsChecked, bool& _rModfied )
793  {
794  bool bModified = false;
795  if ( _rOpt.IsOptionEnabled( _eOpt ) )
796  {
797  bModified = _rOpt.IsOptionSet( _eOpt ) != _bIsChecked;
798  if ( bModified )
799  {
800  _rOpt.SetOption( _eOpt, _bIsChecked );
801  _rModfied = true;
802  }
803  }
804 
805  return bModified;
806  }
807 }
808 
810 {
811  bool bModified = false;
812 
813  if (m_xSecOptDlg)
814  {
815  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnSaveOrSend, m_xSecOptDlg->IsSaveOrSendDocsChecked(), bModified );
816  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnSigning, m_xSecOptDlg->IsSignDocsChecked(), bModified );
817  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnPrint, m_xSecOptDlg->IsPrintDocsChecked(), bModified );
818  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnCreatePdf, m_xSecOptDlg->IsCreatePdfChecked(), bModified );
819  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo, m_xSecOptDlg->IsRemovePersInfoChecked(), bModified );
820  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::DocWarnRecommendPassword, m_xSecOptDlg->IsRecommPasswdChecked(), bModified );
821  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::CtrlClickHyperlink, m_xSecOptDlg->IsCtrlHyperlinkChecked(), bModified );
822  CheckAndSave( *mpSecOptions, SvtSecurityOptions::EOption::BlockUntrustedRefererLinks, m_xSecOptDlg->IsBlockUntrustedRefererLinksChecked(), bModified );
823  }
824 
825  return bModified;
826 }
827 
828 /*--------------------------------------------------------------------*/
829 
831 {
832 }
833 
835 {
837  sProgram(officecfg::Office::Common::ExternalMailer::Program::get()),
838  bROProgram(
839  officecfg::Office::Common::ExternalMailer::Program::isReadOnly()),
840  bHideContent(
841  officecfg::Office::Security::HiddenContent::RemoveHiddenContent::get()),
843  officecfg::Office::Security::HiddenContent::RemoveHiddenContent::isReadOnly())
844  {}
845 
846  OUString sProgram;
850 };
851 
853  : SfxTabPage( pPage, pController, "cui/ui/optemailpage.ui", "OptEmailPage", &rSet)
854  , pImpl(new SvxEMailTabPage_Impl)
855  , m_xMailContainer(m_xBuilder->weld_container("program"))
856  , m_xMailerURLFI(m_xBuilder->weld_image("lockemail"))
857  , m_xMailerURLED(m_xBuilder->weld_entry("url"))
858  , m_xMailerURLPB(m_xBuilder->weld_button("browse"))
859  , m_xSuppressHiddenContainer(m_xBuilder->weld_container("suppressHiddenCont"))
860  , m_xSuppressHiddenFI(m_xBuilder->weld_image("lockSuppressHidden"))
861  , m_xSuppressHidden(m_xBuilder->weld_check_button("suppressHidden"))
862  , m_xDefaultFilterFT(m_xBuilder->weld_label("browsetitle"))
863 {
865  m_xMailerURLPB->connect_clicked( LINK( this, SvxEMailTabPage, FileDialogHdl_Impl ) );
866 }
867 
868 /* -------------------------------------------------------------------------*/
869 
871 {
872 }
873 
874 /* -------------------------------------------------------------------------*/
875 
876 std::unique_ptr<SfxTabPage> SvxEMailTabPage::Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet )
877 {
878  return std::make_unique<SvxEMailTabPage>(pPage, pController, *rAttrSet);
879 }
880 
881 /* -------------------------------------------------------------------------*/
882 
884 {
885  std::shared_ptr<comphelper::ConfigurationChanges> batch(
887  if (!pImpl->bROProgram && m_xMailerURLED->get_value_changed_from_saved())
888  {
889  pImpl->sProgram = m_xMailerURLED->get_text();
890  officecfg::Office::Common::ExternalMailer::Program::set(
891  pImpl->sProgram, batch);
892  }
893  if (!pImpl->bROHideContent
894  && pImpl->bHideContent != m_xSuppressHidden->get_active())
895  {
896  pImpl->bHideContent = m_xSuppressHidden->get_active();
897  officecfg::Office::Security::HiddenContent::RemoveHiddenContent::set(
898  pImpl->bHideContent, batch);
899  }
900  batch->commit();
901  return false;
902 }
903 
904 /* -------------------------------------------------------------------------*/
905 
907 {
908  m_xMailerURLED->set_sensitive(true);
909  m_xMailerURLPB->set_sensitive(true);
910 
911  if (pImpl->bROProgram)
912  m_xMailerURLFI->show();
913 
914  m_xMailerURLED->set_text(pImpl->sProgram);
915  m_xMailerURLED->save_value();
916 
917  m_xMailContainer->set_sensitive(!pImpl->bROProgram);
918 
919  if (pImpl->bROHideContent)
920  m_xSuppressHiddenFI->show();
921 
922  m_xSuppressHidden->set_active(pImpl->bHideContent);
923 
924  m_xSuppressHiddenContainer->set_sensitive(!pImpl->bROHideContent);
925 }
926 
927 /* -------------------------------------------------------------------------*/
928 
929 IMPL_LINK_NOARG(SvxEMailTabPage, FileDialogHdl_Impl, weld::Button&, void)
930 {
931  if (!pImpl->bROProgram)
932  {
933  FileDialogHelper aHelper(css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, GetFrameWeld());
934  OUString sPath = m_xMailerURLED->get_text();
935  if ( sPath.isEmpty() )
936  sPath = "/usr/bin";
937 
938  OUString sUrl;
939  osl::FileBase::getFileURLFromSystemPath(sPath, sUrl);
940  aHelper.SetDisplayDirectory(sUrl);
941  aHelper.AddFilter( m_sDefaultFilterName, "*");
942 
943  if ( ERRCODE_NONE == aHelper.Execute() )
944  {
945  sUrl = aHelper.GetPath();
946  if (osl::FileBase::getSystemPathFromFileURL(sUrl, sPath)
947  != osl::FileBase::E_None)
948  {
949  sPath.clear();
950  }
951  m_xMailerURLED->set_text(sPath);
952  }
953  }
954 }
955 
956 
957 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::unique_ptr< weld::Entry > m_xMailerURLED
Definition: optinet2.hxx:142
bool IsOptionSet(EOption eOption) const
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
std::unique_ptr< weld::Label > m_xNoPasswordSaveFT
Definition: optinet2.hxx:108
std::unique_ptr< weld::Button > m_xSecurityOptionsPB
Definition: optinet2.hxx:90
std::unique_ptr< weld::Label > m_xHttpProxyFT
Definition: optinet2.hxx:36
virtual ~SvxEMailTabPage() override
Definition: optinet2.cxx:870
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
Definition: optinet2.cxx:783
void ReadConfigData_Impl()
Definition: optinet2.cxx:192
std::unique_ptr< weld::Label > m_xNoProxyForFT
Definition: optinet2.hxx:51
std::unique_ptr< weld::Label > m_xMasterPasswordFT
Definition: optinet2.hxx:96
std::unique_ptr< weld::Entry > m_xFtpPortED
Definition: optinet2.hxx:49
std::unique_ptr< weld::CheckButton > m_xSuppressHidden
Definition: optinet2.hxx:146
std::unique_ptr< SvtSecurityOptions > mpSecOptions
Definition: optinet2.hxx:83
std::unique_ptr< weld::Button > m_xMacroSecPB
Definition: optinet2.hxx:100
SvxEMailTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rSet)
Definition: optinet2.cxx:852
std::unique_ptr< weld::Entry > m_xHttpProxyED
Definition: optinet2.hxx:37
static const char g_aProxyModePN[]
Definition: optinet2.cxx:98
static const char g_aFtpPortPN[]
Definition: optinet2.cxx:104
sal_Int64 n
std::unique_ptr< weld::Button > m_xMasterPasswordPB
Definition: optinet2.hxx:97
std::unique_ptr< weld::Entry > m_xFtpProxyED
Definition: optinet2.hxx:47
virtual void ActivatePage(const SfxItemSet &rSet) override
Definition: optinet2.cxx:779
std::unique_ptr< weld::Image > m_xMailerURLFI
Definition: optinet2.hxx:141
std::unique_ptr< weld::Button > m_xCertPathPB
Definition: optinet2.hxx:103
virtual void Reset(const SfxItemSet *rSet) override
Definition: optinet2.cxx:906
std::unique_ptr< weld::Image > m_xSuppressHiddenFI
Definition: optinet2.hxx:145
std::unique_ptr< weld::Label > m_xDefaultFilterFT
Definition: optinet2.hxx:147
virtual void set_text(const OUString &rText)=0
std::unique_ptr< SvxEMailTabPage_Impl > pImpl
Definition: optinet2.hxx:138
std::unique_ptr< weld::Label > m_xNoProxyDescFT
Definition: optinet2.hxx:53
std::unique_ptr< weld::ComboBox > m_xProxyModeLB
Definition: optinet2.hxx:34
RET_NO
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: optinet2.cxx:774
RET_YES
void EnableControls_Impl()
Definition: optinet2.cxx:439
std::unique_ptr< weld::Label > m_xFtpProxyFT
Definition: optinet2.hxx:46
std::unique_ptr< weld::Button > m_xShowConnectionsPB
Definition: optinet2.hxx:93
std::unique_ptr< weld::CheckButton > m_xMasterPasswordCB
Definition: optinet2.hxx:95
void SetOption(EOption eOption, bool bValue)
std::unique_ptr< weld::Entry > m_xNoProxyForED
Definition: optinet2.hxx:52
static std::shared_ptr< ConfigurationChanges > create(css::uno::Reference< css::uno::XComponentContext > const &context=comphelper::getProcessComponentContext())
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: optinet2.cxx:187
bool isdigitAsciiString(const OString &rString)
std::unique_ptr< weld::Button > m_xTSAURLsPB
Definition: optinet2.hxx:106
static const char g_aHttpPortPN[]
Definition: optinet2.cxx:100
std::unique_ptr< weld::Label > m_xHttpsProxyFT
Definition: optinet2.hxx:41
SVT_DLLPUBLIC bool executeRestartDialog(css::uno::Reference< css::uno::XComponentContext > const &context, weld::Window *parent, RestartReason reason)
static const char g_aFtpProxyPN[]
Definition: optinet2.cxx:103
#define TOOLS_WARN_EXCEPTION(area, stream)
static const char g_aNoProxyDescPN[]
Definition: optinet2.cxx:105
css::uno::Reference< css::uno::XInterface > m_xConfigurationUpdateAccess
Definition: optinet2.hxx:55
SvxProxyTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rSet)
Definition: optinet2.cxx:130
void ReadConfigDefaults_Impl()
Definition: optinet2.cxx:251
std::unique_ptr< weld::CheckButton > m_xSavePasswordsCB
Definition: optinet2.hxx:92
virtual ~SvxProxyTabPage() override
Definition: optinet2.cxx:183
static const char g_aHttpsProxyPN[]
Definition: optinet2.cxx:101
std::unique_ptr< weld::Entry > m_xHttpsPortED
Definition: optinet2.hxx:44
int i
Any aHelper
virtual bool FillItemSet(SfxItemSet *rSet) override
Definition: optinet2.cxx:809
static const char g_aHttpsPortPN[]
Definition: optinet2.cxx:102
OUString CuiResId(const char *pKey)
Definition: cuiresmgr.cxx:23
virtual OUString get_text() const =0
std::unique_ptr< weld::Container > m_xCertFrame
Definition: optinet2.hxx:102
IMPL_LINK_NOARG(SvxSecurityTabPage, SecurityOptionsHdl, weld::Button &, void)
Definition: optinet2.cxx:544
virtual bool FillItemSet(SfxItemSet *rSet) override
Definition: optinet2.cxx:883
std::unique_ptr< weld::Entry > m_xHttpsProxyED
Definition: optinet2.hxx:42
OUString m_sDefaultFilterName
Definition: optinet2.hxx:136
std::unique_ptr< weld::Container > m_xSuppressHiddenContainer
Definition: optinet2.hxx:144
bool IsOptionEnabled(EOption eOption) const
weld::Entry & rEdit
#define ERRCODE_NONE
SvxSecurityTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rSet)
Definition: optinet2.cxx:497
std::unique_ptr< weld::Label > m_xHttpsPortFT
Definition: optinet2.hxx:43
OUString m_sPasswordStoringDeactivateStr
Definition: optinet2.hxx:88
RET_OK
std::unique_ptr< weld::Label > m_xHttpPortFT
Definition: optinet2.hxx:38
IMPL_STATIC_LINK(SvxProxyTabPage, NumberOnlyTextFilterHdl, OUString &, rTest, bool)
Definition: optinet2.cxx:107
std::unique_ptr< weld::Button > m_xMailerURLPB
Definition: optinet2.hxx:143
virtual short run()
Reference< XComponentContext > getProcessComponentContext()
std::unique_ptr< weld::Entry > m_xHttpPortED
Definition: optinet2.hxx:39
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage)
virtual void Reset(const SfxItemSet *rSet) override
Definition: optinet2.cxx:339
DeactivateRC
std::unique_ptr< svx::SecurityOptionsDialog > m_xSecOptDlg
Definition: optinet2.hxx:84
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
Definition: optinet2.cxx:876
virtual bool FillItemSet(SfxItemSet *rSet) override
Definition: optinet2.cxx:355
#define SAL_WARN(area, stream)
virtual void Reset(const SfxItemSet *rSet) override
Definition: optinet2.cxx:830
virtual ~SvxSecurityTabPage() override
Definition: optinet2.cxx:540
std::unique_ptr< weld::Label > m_xFtpPortFT
Definition: optinet2.hxx:48
std::unique_ptr< weld::Container > m_xMailContainer
Definition: optinet2.hxx:140
void RestoreConfigDefaults_Impl()
Definition: optinet2.cxx:308
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
sal_uInt16 nPos
static const char g_aHttpProxyPN[]
Definition: optinet2.cxx:99
IMPL_LINK(SvxProxyTabPage, PortChangedHdl, weld::Entry &, rEdit, void)
Definition: optinet2.cxx:87
RESTART_REASON_ADDING_PATH