comphelper/source/misc/backupfilehelper.cxx | 81 ++++++++++++++++ include/comphelper/backupfilehelper.hxx | 3 include/sal/log-areas.dox | 1 svx/source/dialog/SafeModeDialog.cxx | 12 ++ svx/source/dialog/SafeModeDialog.hxx | 1 svx/uiconfig/ui/safemodedialog.ui | 137 +++++++++++++++------------- 6 files changed, 172 insertions(+), 63 deletions(-)
New commits: commit 1161de521e2a828d292f673a05c1344a295e4cae Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Thu Oct 20 18:15:05 2016 +0200 safemode: Add option to disable H/W acceleration Change-Id: Ic6751717c14d317b5a4bc64c4fd1cf2b2f5efabf Reviewed-on: https://gerrit.libreoffice.org/30112 Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> diff --git a/comphelper/source/misc/backupfilehelper.cxx b/comphelper/source/misc/backupfilehelper.cxx index f9587ce..6686d08 100644 --- a/comphelper/source/misc/backupfilehelper.cxx +++ b/comphelper/source/misc/backupfilehelper.cxx @@ -25,6 +25,7 @@ #include <com/sun/star/xml/dom/DocumentBuilder.hpp> #include <com/sun/star/xml/dom/XElement.hpp> #include <com/sun/star/xml/dom/XNodeList.hpp> +#include <com/sun/star/xml/dom/XText.hpp> #include <com/sun/star/xml/sax/XSAXSerializable.hpp> #include <com/sun/star/xml/sax/Writer.hpp> #include <com/sun/star/xml/sax/XWriter.hpp> @@ -35,6 +36,8 @@ #include <com/sun/star/beans/XPropertySet.hpp> using namespace css; +using namespace css::xml::dom; + static const sal_uInt32 BACKUP_FILE_HELPER_BLOCK_SIZE = 16384; namespace @@ -836,7 +839,7 @@ namespace } #if OSL_DEBUG_LEVEL > 1 - SAL_WARN_IF(osl::FileBase::E_None != osl::File::move(aTempURL, rUnoPackagReg), "comphelper:backupfileheler", "could not copy back modified Extension configuration file"); + SAL_WARN_IF(osl::FileBase::E_None != osl::File::move(aTempURL, rUnoPackagReg), "comphelper.backupfilehelper", "could not copy back modified Extension configuration file"); #else osl::File::move(aTempURL, rUnoPackagReg); #endif @@ -2073,6 +2076,82 @@ namespace comphelper return aFileNames; } + namespace { + uno::Reference<XElement> lcl_getConfigElement(const uno::Reference<XDocument>& xDocument, const OUString& rPath, + const OUString& rKey, const OUString& rValue) + { + uno::Reference< XElement > itemElement = xDocument->createElement("item"); + itemElement->setAttribute("oor:path", rPath); + + uno::Reference< XElement > propElement = xDocument->createElement("prop"); + propElement->setAttribute("oor:name", rKey); + propElement->setAttribute("oor:op", "replace"); // Replace any other options + + uno::Reference< XElement > valueElement = xDocument->createElement("value"); + uno::Reference< XText > textElement = xDocument->createTextNode(rValue); + + valueElement->appendChild(textElement); + propElement->appendChild(valueElement); + itemElement->appendChild(propElement); + + return itemElement; + } + } + + void BackupFileHelper::tryDisableHWAcceleration() + { + const OUString aRegistryModifications(maUserConfigWorkURL + "/registrymodifications.xcu"); + if (!fileExists(aRegistryModifications)) + return; + + uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext(); + uno::Reference< XDocumentBuilder > xBuilder = DocumentBuilder::create(xContext); + uno::Reference< XDocument > xDocument = xBuilder->parseURI(aRegistryModifications); + uno::Reference< XElement > xRootElement = xDocument->getDocumentElement(); + + xRootElement->appendChild(lcl_getConfigElement(xDocument, "/org.openoffice.Office.Common/VCL", + "UseOpenGL", "false")); + xRootElement->appendChild(lcl_getConfigElement(xDocument, "/org.openoffice.Office.Common/VCL", + "ForceOpenGL", "false")); + xRootElement->appendChild(lcl_getConfigElement(xDocument, "/org.openoffice.Office.Common/Misc", + "UseOpenCL", "false")); + xRootElement->appendChild(lcl_getConfigElement(xDocument, "/org.openoffice.Office.Common/Misc", + "UseSwInterpreter", "false")); + + // write back + uno::Reference< xml::sax::XSAXSerializable > xSerializer(xDocument, uno::UNO_QUERY); + + if (!xSerializer.is()) + return; + + // create a SAXWriter + uno::Reference< xml::sax::XWriter > const xSaxWriter = xml::sax::Writer::create(xContext); + uno::Reference< io::XStream > xTempFile(io::TempFile::create(xContext), uno::UNO_QUERY); + uno::Reference< io::XOutputStream > xOutStrm(xTempFile->getOutputStream(), uno::UNO_QUERY); + + // set output stream and do the serialization + xSaxWriter->setOutputStream(uno::Reference< css::io::XOutputStream >(xOutStrm, uno::UNO_QUERY)); + xSerializer->serialize(uno::Reference< xml::sax::XDocumentHandler >(xSaxWriter, uno::UNO_QUERY), uno::Sequence< beans::StringPair >()); + + // get URL from temp file + uno::Reference < beans::XPropertySet > xTempFileProps(xTempFile, uno::UNO_QUERY); + uno::Any aUrl = xTempFileProps->getPropertyValue("Uri"); + OUString aTempURL; + aUrl >>= aTempURL; + + // copy back file + if (aTempURL.isEmpty() || !fileExists(aTempURL)) + return; + + if (fileExists(aRegistryModifications)) + { + osl::File::remove(aRegistryModifications); + } + + int result = osl::File::move(aTempURL, aRegistryModifications); + SAL_WARN_IF(result != osl::FileBase::E_None, "comphelper.backupfilehelper", "could not copy back modified Extension configuration file"); + } + bool BackupFileHelper::isTryResetCustomizationsPossible() { // return true if not all of the customization selection dirs or files are deleted diff --git a/include/comphelper/backupfilehelper.hxx b/include/comphelper/backupfilehelper.hxx index 0857251..5d3173f 100644 --- a/include/comphelper/backupfilehelper.hxx +++ b/include/comphelper/backupfilehelper.hxx @@ -167,6 +167,9 @@ namespace comphelper static bool isTryDeinstallAllExtensionsPossible(); static void tryDeinstallAllExtensions(); + /// Disables OpenGL and OpenCL + static void tryDisableHWAcceleration(); + /** resets User-Customizations like Settings and UserInterface modifications */ static bool isTryResetCustomizationsPossible(); diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox index c69beba..a27e77e 100644 --- a/include/sal/log-areas.dox +++ b/include/sal/log-areas.dox @@ -89,6 +89,7 @@ certain functionality. @section comphelper @li @c comphelper +@li @c comphelper.backupfilehelper @li @c comphelper.container - EmbeddedObjectContainer @section cppu diff --git a/svx/source/dialog/SafeModeDialog.cxx b/svx/source/dialog/SafeModeDialog.cxx index 61e26d0..9dd2d4d 100644 --- a/svx/source/dialog/SafeModeDialog.cxx +++ b/svx/source/dialog/SafeModeDialog.cxx @@ -42,6 +42,7 @@ SafeModeDialog::SafeModeDialog(vcl::Window* pParent) mpCBDisableAllExtensions(), mpCBDeinstallUserExtensions(), mpCBDeinstallAllExtensions(), + mpCBDisableHWAcceleration(), mpCBResetCustomizations(), mpCBResetWholeUserProfile(), @@ -56,6 +57,7 @@ SafeModeDialog::SafeModeDialog(vcl::Window* pParent) get(mpCBDisableAllExtensions, "check_disable_all_extensions"); get(mpCBDeinstallUserExtensions, "check_deinstall_user_extensions"); get(mpCBDeinstallAllExtensions, "check_deinstall_all_extensions"); + get(mpCBDisableHWAcceleration, "check_disable_hw_acceleration"); get(mpCBResetCustomizations, "check_reset_customizations"); get(mpCBResetWholeUserProfile, "check_reset_whole_userprofile"); @@ -70,6 +72,7 @@ SafeModeDialog::SafeModeDialog(vcl::Window* pParent) mpCBDisableAllExtensions->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpCBDeinstallUserExtensions->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpCBDeinstallAllExtensions->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); + mpCBDisableHWAcceleration->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpCBResetCustomizations->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); mpCBResetWholeUserProfile->SetToggleHdl(LINK(this, SafeModeDialog, CheckBoxHdl)); @@ -130,6 +133,7 @@ void SafeModeDialog::dispose() mpCBDisableAllExtensions.clear(); mpCBDeinstallUserExtensions.clear(); mpCBDeinstallAllExtensions.clear(); + mpCBDisableHWAcceleration.clear(); mpCBResetCustomizations.clear(); mpCBResetWholeUserProfile.clear(); @@ -180,6 +184,11 @@ void SafeModeDialog::applyChanges() comphelper::BackupFileHelper::tryDeinstallAllExtensions(); } + if (mpCBDisableHWAcceleration->IsChecked()) + { + comphelper::BackupFileHelper::tryDisableHWAcceleration(); + } + if (mpCBResetCustomizations->IsChecked()) { // Reset customizations (Settings and UserInterface modifications) @@ -210,7 +219,7 @@ IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn, void) } else if (pBtn == mpBtnRestart.get()) { - Close(); + //Close(); applyChanges(); } } @@ -223,6 +232,7 @@ IMPL_LINK(SafeModeDialog, CheckBoxHdl, CheckBox&, /*pCheckBox*/, void) mpCBDisableAllExtensions->IsChecked() || mpCBDeinstallUserExtensions->IsChecked() || mpCBDeinstallAllExtensions->IsChecked() || + mpCBDisableHWAcceleration->IsChecked() || mpCBResetCustomizations->IsChecked() || mpCBResetWholeUserProfile->IsChecked()); diff --git a/svx/source/dialog/SafeModeDialog.hxx b/svx/source/dialog/SafeModeDialog.hxx index 500620a..66a83b2 100644 --- a/svx/source/dialog/SafeModeDialog.hxx +++ b/svx/source/dialog/SafeModeDialog.hxx @@ -41,6 +41,7 @@ private: VclPtr<CheckBox> mpCBDisableAllExtensions; VclPtr<CheckBox> mpCBDeinstallUserExtensions; VclPtr<CheckBox> mpCBDeinstallAllExtensions; + VclPtr<CheckBox> mpCBDisableHWAcceleration; VclPtr<CheckBox> mpCBResetCustomizations; VclPtr<CheckBox> mpCBResetWholeUserProfile; diff --git a/svx/uiconfig/ui/safemodedialog.ui b/svx/uiconfig/ui/safemodedialog.ui index 54bbb1e..e28cac7 100644 --- a/svx/uiconfig/ui/safemodedialog.ui +++ b/svx/uiconfig/ui/safemodedialog.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.16.1 --> +<!-- Generated with glade 3.20.0 --> <interface> <requires lib="gtk+" version="3.12"/> <object class="GtkDialog" id="SafeModeDialog"> @@ -13,16 +13,71 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area1"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="btn_continue"> + <property name="label" translatable="yes">_Continue in Safe Mode</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_quit"> + <property name="label" translatable="yes">_Quit</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="btn_restart"> + <property name="label" translatable="yes">_Make Changes and Restart</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">4</property> + </packing> + </child> <child> <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes">%PRODUCTNAME is now running in Safe Mode. You can make one or more of the following changes to return to a working state. The offered possible changes get more radical from top to bottom, so it is recommended to try them thoroughly one after the other.</property> <property name="wrap">True</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="expand">False</property> @@ -111,6 +166,21 @@ The offered possible changes get more radical from top to bottom, so it is recom </packing> </child> <child> + <object class="GtkCheckButton" id="check_disable_hw_acceleration"> + <property name="label" translatable="yes">Disable hardware acceleration (OpenGL, OpenCL)</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + <child> <object class="GtkCheckButton" id="check_reset_customizations"> <property name="label" translatable="yes">Reset User Customizations (Settings, User Interface modifications, AutoCorrect, AutoText, etc.)</property> <property name="visible">True</property> @@ -122,7 +192,7 @@ The offered possible changes get more radical from top to bottom, so it is recom <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">5</property> + <property name="position">6</property> </packing> </child> <child> @@ -137,7 +207,7 @@ The offered possible changes get more radical from top to bottom, so it is recom <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">6</property> + <property name="position">7</property> </packing> </child> </object> @@ -161,10 +231,10 @@ The offered possible changes get more radical from top to bottom, so it is recom <object class="GtkLabel" id="label3"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes">If you experience problems that are not resolved by using the Safe Mode, visit the following link to get help or report a bug. You can also include the relevant parts of your User Profile. Beware that it might contain personal data.</property> + <property name="xalign">0</property> </object> <packing> <property name="expand">False</property> @@ -203,61 +273,6 @@ You can also include the relevant parts of your User Profile. Beware that it mig <property name="position">3</property> </packing> </child> - <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> - <property name="can_focus">False</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="btn_continue"> - <property name="label" translatable="yes">_Continue in Safe Mode</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="has_default">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="btn_quit"> - <property name="label" translatable="yes">_Quit</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="btn_restart"> - <property name="label" translatable="yes">_Make Changes and Restart</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">4</property> - </packing> - </child> </object> </child> </object> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits