From 9b1c9ac6edcdeae431d6104c586ca7feffbb6483 Mon Sep 17 00:00:00 2001 From: Heiko Tietze Date: Wed, 8 Apr 2020 12:58:34 +0200 Subject: [PATCH] Related tdf#130778: New About dialog More flexible dialog logo & about images as SVGs Change-Id: Icefa035893e241a7dee6aa28236e6b89b38477de Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91908 Tested-by: Jenkins Reviewed-by: Heiko Tietze --- bin/gla11y | 1 - .../clang/constantparam.booleans.results | 8 - configure.ac | 6 +- cui/inc/strings.hrc | 3 - cui/source/dialogs/about.cxx | 436 +- cui/source/factory/dlgfact.cxx | 19 +- cui/source/factory/dlgfact.hxx | 19 +- cui/source/inc/about.hxx | 28 +- cui/uiconfig/ui/aboutdialog.ui | 205 +- icon-themes/colibre/brand/flat_logo.svg | 1188 ++- icon-themes/colibre/brand/shell/about.svg | 6417 ++++++++++++++++- icon-themes/colibre/brand/shell/logo.svg | 271 + .../colibre/brand/shell/logo_inverted.svg | 271 + icon-themes/colibre/sfx2/res/logo.png | Bin 15459 -> 0 bytes icon-themes/karasa_jaga/sfx2/res/logo.png | Bin 22096 -> 0 bytes icon-themes/sukapura/sfx2/res/logo.png | Bin 16755 -> 0 bytes icon-themes/tango/sfx2/res/logo.png | Bin 22096 -> 0 bytes include/sfx2/sfxdlg.hxx | 1 - include/vcl/abstdlg.hxx | 10 + include/vcl/weld.hxx | 3 - sc/qa/uitest/calc_tests7/tdf106667.py | 2 +- sfx2/inc/bitmaps.hlst | 1 - sfx2/inc/recentdocsview.hxx | 2 +- sfx2/source/appl/appmisc.cxx | 31 +- sfx2/source/appl/appserv.cxx | 2 +- sfx2/source/control/recentdocsview.cxx | 11 +- solenv/sanitizers/ui/cui.suppr | 5 + sw/qa/uitest/writer_tests5/about_test.py | 2 +- uitest/calc_tests/about_test.py | 2 +- uitest/demo_ui/hierarchy.py | 2 +- vcl/inc/salvtables.hxx | 3 - vcl/source/app/salvtables.cxx | 57 - vcl/source/window/builder.cxx | 4 +- vcl/unx/gtk3/gtk3gtkinst.cxx | 124 - 34 files changed, 8604 insertions(+), 530 deletions(-) create mode 100644 icon-themes/colibre/brand/shell/logo.svg create mode 100644 icon-themes/colibre/brand/shell/logo_inverted.svg delete mode 100644 icon-themes/colibre/sfx2/res/logo.png delete mode 100644 icon-themes/karasa_jaga/sfx2/res/logo.png delete mode 100644 icon-themes/sukapura/sfx2/res/logo.png delete mode 100644 icon-themes/tango/sfx2/res/logo.png diff --git a/bin/gla11y b/bin/gla11y index 1ae67b173959..b1d98c7c0fb8 100755 --- a/bin/gla11y +++ b/bin/gla11y @@ -47,7 +47,6 @@ widgets_toplevel = [ 'GtkOffscreenWindow', 'GtkApplicationWindow', 'GtkDialog', - 'GtkAboutDialog', 'GtkFileChooserDialog', 'GtkColorChooserDialog', 'GtkFontChooserDialog', diff --git a/compilerplugins/clang/constantparam.booleans.results b/compilerplugins/clang/constantparam.booleans.results index ec68cb590a62..9c78e715448a 100644 --- a/compilerplugins/clang/constantparam.booleans.results +++ b/compilerplugins/clang/constantparam.booleans.results @@ -1778,10 +1778,6 @@ include/vcl/weld.hxx:2102 class std::unique_ptr > weld::Builder::weld_dialog(const class rtl::OString &,_Bool) _Bool bTakeOwnership 1 -include/vcl/weld.hxx:2103 - class std::unique_ptr > weld::Builder::weld_about_dialog(const class rtl::OString &,_Bool) - _Bool bTakeOwnership - 1 include/vcl/weld.hxx:2106 class std::unique_ptr > weld::Builder::weld_assistant(const class rtl::OString &,_Bool) _Bool bTakeOwnership @@ -4210,10 +4206,6 @@ vcl/qa/cppunit/BitmapTest.cxx:68 void assertColorsAreSimilar(int,const class std::__cxx11::basic_string, class std::allocator > &,const class BitmapColor &,const class BitmapColor &) int maxDifference 1 -vcl/source/app/salvtables.cxx:1624 - void (anonymous namespace)::SalInstanceAboutDialog::SalInstanceAboutDialog(class vcl::AboutDialog *,class SalInstanceBuilder *,_Bool) - _Bool bTakeOwnership - 0 vcl/source/app/salvtables.cxx:1694 void (anonymous namespace)::SalInstanceAssistant::SalInstanceAssistant(class vcl::RoadmapWizard *,class SalInstanceBuilder *,_Bool) _Bool bTakeOwnership diff --git a/configure.ac b/configure.ac index b8b40177e98e..f1539c699b1f 100644 --- a/configure.ac +++ b/configure.ac @@ -2186,7 +2186,7 @@ AC_ARG_WITH(branding, AS_HELP_STRING([--with-branding=/path/to/images], [Use given path to retrieve branding images set.]) [ - Search for intro.png about.svg and flat_logo.svg. + Search for intro.png about.svg and logo.svg. If any is missing, default ones will be used instead. Search also progress.conf for progress @@ -12553,8 +12553,8 @@ dnl branding dnl =================================================================== AC_MSG_CHECKING([for alternative branding images directory]) # initialize mapped arrays -BRAND_INTRO_IMAGES="flat_logo.svg intro.png intro-highres.png" -brand_files="$BRAND_INTRO_IMAGES about.svg" +BRAND_INTRO_IMAGES="intro.png intro-highres.png" +brand_files="$BRAND_INTRO_IMAGES logo.svg logo_inverted.svg about.svg" if test -z "$with_branding" -o "$with_branding" = "no"; then AC_MSG_RESULT([none]) diff --git a/cui/inc/strings.hrc b/cui/inc/strings.hrc index 70b06199e700..9c81a8e104f9 100644 --- a/cui/inc/strings.hrc +++ b/cui/inc/strings.hrc @@ -390,9 +390,6 @@ #define RID_SVXSTR_ABOUT_DERIVED NC_("aboutdialog|derived", "%PRODUCTNAME is derived from LibreOffice which was based on OpenOffice.org") #define RID_SVXSTR_ABOUT_LOCALE NC_("aboutdialog|locale", "Locale: $LOCALE") #define RID_SVXSTR_ABOUT_UILOCALE NC_("aboutdialog|uilocale", "UI-Language: $LOCALE") -#define RID_SVXSTR_ABOUT_RELEASE_NOTES NC_("aboutdialog|releasenotes", "~Release Notes") -#define RID_SVXSTR_ABOUT_WEBSITE NC_("aboutdialog|website", "~Website") -#define RID_SVXSTR_ABOUT_CREDITS NC_("aboutdialog|credits", "Cre~dits") #define RID_SVXSTR_EDIT_PATHS NC_("optpathspage|editpaths", "Edit Paths: %1") diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx index 625adf9f9a7c..ec5d6b98930b 100644 --- a/cui/source/dialogs/about.cxx +++ b/cui/source/dialogs/about.cxx @@ -17,324 +17,228 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - #include -#include -#include -#include -#include +#include //OSL_ENSURE +#include //osl_getProcessLocale +#include //rtl::isAsciiHexDigit +#include //SAL_WARN +#include //GetSettings +#include +#include //Application:: +#include //VirtualDevice + +#include +#include +#include //utl::Bootstrap::getBuildVersion +#include //ConfigManager:: +#include //EXTRA_BUILDID +#include //CuiResId +#include //SfxApplication::loadBrandSvg +#include + +#include #if HAVE_FEATURE_OPENCL #include #endif -#include #include +#include using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star; -AboutDialog::AboutDialog(weld::Window* pParent) - : m_xBuilder(Application::CreateBuilder(pParent, "cui/ui/aboutdialog.ui")) - , m_xDialog(m_xBuilder->weld_about_dialog("AboutDialog")) - , m_xContentArea(m_xDialog->weld_content_area()) -{ - m_xDialog->add_button(GetStandardText(StandardButtonType::Close), RET_CLOSE); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_CREDITS), 101); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_WEBSITE), 102); - m_xDialog->add_button(CuiResId(RID_SVXSTR_ABOUT_RELEASE_NOTES), 103); +AboutDialog::AboutDialog(weld::Window *pParent) + : GenericDialogController(pParent, "cui/ui/aboutdialog.ui", "AboutDialog"), + m_pCreditsButton(m_xBuilder->weld_link_button("btnCredits")), + m_pWebsiteButton(m_xBuilder->weld_link_button("btnWebsite")), + m_pReleaseNotesButton(m_xBuilder->weld_link_button("btnReleaseNotes")), + m_pCloseButton(m_xBuilder->weld_button("btnClose")), + m_pBrandImage(m_xBuilder->weld_image("imBrand")), + m_pAboutImage(m_xBuilder->weld_image("imAbout")), + m_pVersionLabel(m_xBuilder->weld_label("lbVersion")), + m_pCopyrightLabel(m_xBuilder->weld_label("lbCopyright")) { + m_pVersionLabel->set_label(GetVersionString()); + m_pCopyrightLabel->set_label(GetCopyrightString()); - m_xCreditsButton.reset(m_xDialog->weld_widget_for_response(101)); - m_xCreditsButton->set_secondary(true); - m_xWebsiteButton.reset(m_xDialog->weld_widget_for_response(102)); - m_xWebsiteButton->set_secondary(true); - m_xReleaseNotesButton.reset(m_xDialog->weld_widget_for_response(103)); - m_xReleaseNotesButton->set_secondary(true); - m_xCloseButton.reset(m_xDialog->weld_widget_for_response(RET_CLOSE)); + //Images + const Size nWidth(m_pVersionLabel->get_preferred_size()); + BitmapEx aBackgroundBitmap; - m_buildIdLinkString = m_xDialog->get_website_label(); + if (SfxApplication::loadBrandSvg(Application::GetSettings() + .GetStyleSettings() + .GetDialogColor() + .IsDark() + ? "shell/logo_inverted" + : "shell/logo", + aBackgroundBitmap, + nWidth.getWidth() * 0.8)) { + ScopedVclPtr m_pVirDev = + m_pBrandImage->create_virtual_device(); + m_pVirDev->SetOutputSizePixel(aBackgroundBitmap.GetSizePixel()); + m_pVirDev->DrawBitmapEx(Point(0, 0), aBackgroundBitmap); + m_pBrandImage->set_image(m_pVirDev.get()); + m_pVirDev.disposeAndClear(); + } + if (SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, + nWidth.getWidth())) { + ScopedVclPtr m_pVirDev = + m_pAboutImage->create_virtual_device(); + m_pVirDev->SetOutputSizePixel(aBackgroundBitmap.GetSizePixel()); + m_pVirDev->DrawBitmapEx(Point(0, 0), aBackgroundBitmap); + m_pAboutImage->set_image(m_pVirDev.get()); + m_pVirDev.disposeAndClear(); + } - m_xDialog->set_version(GetVersionString()); - m_xDialog->set_copyright(GetCopyrightString()); + //Links + m_pCreditsButton->set_uri(CuiResId(RID_SVXSTR_ABOUT_CREDITS_URL)); - SetBuildIdLink(); + OUString sURL(officecfg::Office::Common::Help::StartCenter::InfoURL::get()); + localizeWebserviceURI(sURL); + m_pWebsiteButton->set_uri(sURL); - SetLogo(); + sURL = officecfg::Office::Common::Menus::ReleaseNotesURL::get() + + "?LOvers=" + utl::ConfigManager::getProductVersion() + "&LOlocale=" + + LanguageTag(utl::ConfigManager::getUILocale()).getLanguage(); + m_pReleaseNotesButton->set_uri(sURL); - m_xDialog->connect_size_allocate(LINK(this, AboutDialog, SizeAllocHdl)); - - // Connect all handlers - m_xCreditsButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xWebsiteButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xReleaseNotesButton->connect_clicked( LINK( this, AboutDialog, HandleClick ) ); - m_xCloseButton->grab_focus(); + //Handler + m_pCloseButton->grab_focus(); } -AboutDialog::~AboutDialog() -{ -} +AboutDialog::~AboutDialog() {} -IMPL_LINK(AboutDialog, HandleClick, weld::Button&, rButton, void) -{ - OUString sURL = ""; - - // Find which button was pressed and from this, get the URL to be opened - if (&rButton == m_xCreditsButton.get()) - sURL = CuiResId(RID_SVXSTR_ABOUT_CREDITS_URL); - else if (&rButton == m_xWebsiteButton.get()) - { - sURL = officecfg::Office::Common::Help::StartCenter::InfoURL::get(); - localizeWebserviceURI(sURL); - } - else if (&rButton == m_xReleaseNotesButton.get()) - { - sURL = officecfg::Office::Common::Menus::ReleaseNotesURL::get() + - "?LOvers=" + utl::ConfigManager::getProductVersion() + - "&LOlocale=" + LanguageTag(utl::ConfigManager::getUILocale()).getLanguage(); - } - - // If the URL is empty, don't do anything - if ( sURL.isEmpty() ) - return; - try - { - Reference< css::system::XSystemShellExecute > xSystemShellExecute( - css::system::SystemShellExecute::create(::comphelper::getProcessComponentContext() ) ); - xSystemShellExecute->execute( sURL, OUString(), css::system::SystemShellExecuteFlags::URIS_ONLY ); - } - catch (const Exception&) - { - Any exc( ::cppu::getCaughtException() ); - OUString msg( ::comphelper::anyToString( exc ) ); - const SolarMutexGuard guard; - std::unique_ptr xErrorBox(Application::CreateMessageDialog(getDialog(), - VclMessageType::Warning, VclButtonsType::Ok, msg)); - xErrorBox->set_title(m_xDialog->get_title()); - xErrorBox->run(); - } -} - -void AboutDialog::SetBuildIdLink() -{ - const OUString buildId = GetBuildId(); - - if (IsStringValidGitHash(buildId)) - { - if (m_buildIdLinkString.indexOf("$GITHASH") == -1) - { - SAL_WARN( "cui.dialogs", "translated git hash string in translations doesn't contain $GITHASH placeholder" ); - m_buildIdLinkString += " $GITHASH"; - } - - m_xDialog->set_website_label(m_buildIdLinkString.replaceAll("$GITHASH", buildId)); - m_xDialog->set_website("https://hub.libreoffice.org/git-core/" + buildId); - } - else - { - m_xDialog->set_website_label(OUString()); - m_xDialog->set_website(OUString()); - } -} - -void AboutDialog::SetLogo() -{ - auto nWidth = m_xContentArea->get_preferred_size().Width(); - - // fdo#67401 set AntiAliasing for SVG logo - SvtOptionsDrawinglayer aDrawOpt; - bool bOldAntiAliasSetting = aDrawOpt.IsAntiAliasing(); - aDrawOpt.SetAntiAliasing(true); - - // load svg logo, specify desired width, scale height isotropically - SfxApplication::loadBrandSvg("flat_logo", aLogoBitmap, nWidth); - - aDrawOpt.SetAntiAliasing(bOldAntiAliasSetting); - - if (!aLogoBitmap) - m_xDialog->set_logo(nullptr); - else - { - Graphic aGraphic(aLogoBitmap); - m_xDialog->set_logo(aGraphic.GetXGraphic()); - } -} - -IMPL_LINK(AboutDialog, SizeAllocHdl, const Size&, rSize, void) -{ - if (rSize.Width() == aBackgroundBitmap.GetSizePixel().Width()) - return; - // Load background image - if (!(Application::GetSettings().GetStyleSettings().GetHighContrastMode())) - { - SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, rSize.Width()); - Graphic aGraphic(aBackgroundBitmap); - m_xDialog->set_background(aGraphic.GetXGraphic()); - } -} - -OUString AboutDialog::GetBuildId() -{ - OUString sDefault; - OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); - if (!sBuildId.isEmpty()) - return sBuildId; - - sBuildId = utl::Bootstrap::getBuildIdData(sDefault); - - if (!sBuildId.isEmpty()) - { - return sBuildId.getToken( 0, '-' ); - } - - OSL_ENSURE( !sBuildId.isEmpty(), "No BUILDID in bootstrap file" ); +OUString AboutDialog::GetBuildId() { + OUString sDefault; + OUString sBuildId(utl::Bootstrap::getBuildVersion(sDefault)); + if (!sBuildId.isEmpty()) return sBuildId; + + sBuildId = utl::Bootstrap::getBuildIdData(sDefault); + + if (!sBuildId.isEmpty()) { + return sBuildId.getToken(0, '-'); + } + + OSL_ENSURE(!sBuildId.isEmpty(), "No BUILDID in bootstrap file"); + return sBuildId; } -OUString AboutDialog::GetLocaleString() -{ - OUString aLocaleStr; - rtl_Locale * pLocale; +OUString AboutDialog::GetLocaleString() { + OUString aLocaleStr; + rtl_Locale *pLocale; - osl_getProcessLocale( &pLocale ); + osl_getProcessLocale(&pLocale); - if ( pLocale && pLocale->Language ) - { - if (pLocale->Country && rtl_uString_getLength( pLocale->Country) > 0) - aLocaleStr = OUString::unacquired(&pLocale->Language) + "_" + OUString::unacquired(&pLocale->Country); - else - aLocaleStr = OUString(pLocale->Language); - if (pLocale->Variant && rtl_uString_getLength( pLocale->Variant) > 0) - aLocaleStr += OUString(pLocale->Variant); + if (pLocale && pLocale->Language) { + if (pLocale->Country && rtl_uString_getLength(pLocale->Country) > 0) + aLocaleStr = OUString::unacquired(&pLocale->Language) + "_" + + OUString::unacquired(&pLocale->Country); + else + aLocaleStr = OUString(pLocale->Language); + if (pLocale->Variant && rtl_uString_getLength(pLocale->Variant) > 0) + aLocaleStr += OUString(pLocale->Variant); + } + + return aLocaleStr; +} + +bool AboutDialog::IsStringValidGitHash(const OUString &hash) { + for (int i = 0; i < hash.getLength(); i++) { + if (!rtl::isAsciiHexDigit(hash[i])) { + return false; } + } - return aLocaleStr; + return true; } -bool AboutDialog::IsStringValidGitHash(const OUString& hash) -{ - for (int i = 0; i < hash.getLength(); i++) - { - if (!rtl::isAsciiHexDigit(hash[i])) - { - return false; - } - } - - return true; -} - -OUString AboutDialog::GetVersionString() -{ - OUString sVersion = CuiResId(RID_SVXSTR_ABOUT_VERSION); +OUString AboutDialog::GetVersionString() { + OUString sVersion = CuiResId(RID_SVXSTR_ABOUT_VERSION); #ifdef _WIN64 - sVersion += " (x64)"; + sVersion += " (x64)"; #elif defined(_WIN32) - sVersion += " (x86)"; + sVersion += " (x86)"; #endif - OUString sBuildId = GetBuildId(); + OUString sBuildId = GetBuildId(); - OUString aLocaleStr = Application::GetSettings().GetLanguageTag().getBcp47() + " (" + GetLocaleString() + ")"; - OUString aUILocaleStr = Application::GetSettings().GetUILanguageTag().getBcp47(); + OUString aLocaleStr = Application::GetSettings().GetLanguageTag().getBcp47() + + " (" + GetLocaleString() + ")"; + OUString aUILocaleStr = + Application::GetSettings().GetUILanguageTag().getBcp47(); - if (!sBuildId.trim().isEmpty()) - { - sVersion += "\n"; - OUString sBuildStr = CuiResId(RID_SVXSTR_ABOUT_BUILDID); - if (sBuildStr.indexOf("$BUILDID") == -1) - { - SAL_WARN( "cui.dialogs", "translated Build Id string in translations doesn't contain $BUILDID placeholder" ); - sBuildStr += " $BUILDID"; - } - sVersion += sBuildStr.replaceAll("$BUILDID", sBuildId); + if (!sBuildId.trim().isEmpty()) { + sVersion += "\n"; + OUString sBuildStr = CuiResId(RID_SVXSTR_ABOUT_BUILDID); + if (sBuildStr.indexOf("$BUILDID") == -1) { + SAL_WARN("cui.dialogs", "translated Build Id string in translations " + "doesn't contain $BUILDID placeholder"); + sBuildStr += " $BUILDID"; } + sVersion += sBuildStr.replaceAll("$BUILDID", sBuildId); + } - sVersion += "\n" + Application::GetHWOSConfInfo(); + sVersion += "\n" + Application::GetHWOSConfInfo(); - bool const extra = EXTRA_BUILDID[0] != '\0'; - // extracted from the 'if' to avoid Clang -Wunreachable-code - if (extra) - { - sVersion += "\n" EXTRA_BUILDID; - } + bool const extra = EXTRA_BUILDID[0] != '\0'; + // extracted from the 'if' to avoid Clang -Wunreachable-code + if (extra) { + sVersion += "\n" EXTRA_BUILDID; + } - OUString sLocaleStr(CuiResId(RID_SVXSTR_ABOUT_LOCALE)); - if (sLocaleStr.indexOf("$LOCALE") == -1) - { - SAL_WARN( "cui.dialogs", "translated locale string in translations doesn't contain $LOCALE placeholder" ); - sLocaleStr += " $LOCALE"; - } - sVersion += "\n" + sLocaleStr.replaceAll("$LOCALE", aLocaleStr); + OUString sLocaleStr(CuiResId(RID_SVXSTR_ABOUT_LOCALE)); + if (sLocaleStr.indexOf("$LOCALE") == -1) { + SAL_WARN("cui.dialogs", "translated locale string in translations doesn't " + "contain $LOCALE placeholder"); + sLocaleStr += " $LOCALE"; + } + sVersion += "\n" + sLocaleStr.replaceAll("$LOCALE", aLocaleStr); - OUString sUILocaleStr(CuiResId(RID_SVXSTR_ABOUT_UILOCALE)); - if (sUILocaleStr.indexOf("$LOCALE") == -1) - { - SAL_WARN( "cui.dialogs", "translated uilocale string in translations doesn't contain $LOCALE placeholder" ); - sUILocaleStr += " $LOCALE"; - } - sVersion += "; " + sUILocaleStr.replaceAll("$LOCALE", aUILocaleStr); + OUString sUILocaleStr(CuiResId(RID_SVXSTR_ABOUT_UILOCALE)); + if (sUILocaleStr.indexOf("$LOCALE") == -1) { + SAL_WARN("cui.dialogs", "translated uilocale string in translations " + "doesn't contain $LOCALE placeholder"); + sUILocaleStr += " $LOCALE"; + } + sVersion += "; " + sUILocaleStr.replaceAll("$LOCALE", aUILocaleStr); - OUString aCalcMode = "Calc: "; // Calc calculation mode + OUString aCalcMode = "Calc: "; // Calc calculation mode #if HAVE_FEATURE_OPENCL - bool bOpenCL = openclwrapper::GPUEnv::isOpenCLEnabled(); - if (bOpenCL) - aCalcMode += "CL"; + bool bOpenCL = openclwrapper::GPUEnv::isOpenCLEnabled(); + if (bOpenCL) + aCalcMode += "CL"; #else - const bool bOpenCL = false; + const bool bOpenCL = false; #endif - static const bool bThreadingProhibited = std::getenv("SC_NO_THREADED_CALCULATION"); - bool bThreadedCalc = officecfg::Office::Calc::Formula::Calculation::UseThreadedCalculationForFormulaGroups::get(); + static const bool bThreadingProhibited = + std::getenv("SC_NO_THREADED_CALCULATION"); + bool bThreadedCalc = officecfg::Office::Calc::Formula::Calculation:: + UseThreadedCalculationForFormulaGroups::get(); - if (!bThreadingProhibited && !bOpenCL && bThreadedCalc) - { - if (!aCalcMode.endsWith(" ")) - aCalcMode += " "; - aCalcMode += "threaded"; - } + if (!bThreadingProhibited && !bOpenCL && bThreadedCalc) { + if (!aCalcMode.endsWith(" ")) + aCalcMode += " "; + aCalcMode += "threaded"; + } - sVersion += "\n" + aCalcMode; + sVersion += "\n" + aCalcMode; - return sVersion; + return sVersion; } -OUString AboutDialog::GetCopyrightString() -{ - OUString sVendorTextStr(CuiResId(RID_SVXSTR_ABOUT_VENDOR)); - OUString aCopyrightString = sVendorTextStr + "\n" - + CuiResId(RID_SVXSTR_ABOUT_COPYRIGHT) + "\n"; +OUString AboutDialog::GetCopyrightString() { + OUString sVendorTextStr(CuiResId(RID_SVXSTR_ABOUT_VENDOR)); + OUString aCopyrightString = + sVendorTextStr + "\n" + CuiResId(RID_SVXSTR_ABOUT_COPYRIGHT) + "\n"; - if (utl::ConfigManager::getProductName() == "LibreOffice") - aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_BASED_ON); - else - aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_DERIVED); + if (utl::ConfigManager::getProductName() == "LibreOffice") + aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_BASED_ON); + else + aCopyrightString += CuiResId(RID_SVXSTR_ABOUT_DERIVED); - return aCopyrightString; + return aCopyrightString; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx index d7868049d4c7..e7282b3c197a 100644 --- a/cui/source/factory/dlgfact.cxx +++ b/cui/source/factory/dlgfact.cxx @@ -20,6 +20,7 @@ #include #include "dlgfact.hxx" +#include #include #include #include @@ -85,7 +86,6 @@ #include #include #include -#include #include #include @@ -1022,11 +1022,6 @@ VclPtr AbstractDialogFactory_Impl::CreateVclDialog(weld::Wind return nullptr; } -VclPtr AbstractDialogFactory_Impl::CreateAboutDialog(weld::Window* pParent) -{ - return VclPtr::Create(std::make_unique(pParent)); -} - VclPtr AbstractDialogFactory_Impl::CreateFrameDialog(weld::Window* pParent, const Reference< frame::XFrame >& rxFrame, sal_uInt32 nResId, const OUString& rParameter ) { @@ -1421,6 +1416,11 @@ short SvxMacroAssignDialog::Execute() return m_xDialog->run(); } +short AbstractAboutDialog_Impl::Execute() +{ + return m_xDlg->run(); +} + short AbstractTipOfTheDayDialog_Impl::Execute() { return m_xDlg->run(); @@ -1676,6 +1676,13 @@ VclPtr AbstractDialogFactory_Impl::CreateQrCodeGenDialo std::make_unique(pParent, xModel, bEditExisting)); } +VclPtr +AbstractDialogFactory_Impl::CreateAboutDialog(weld::Window* pParent) +{ + return VclPtr::Create( + std::make_unique(pParent)); +} + VclPtr AbstractDialogFactory_Impl::CreateTipOfTheDayDialog(weld::Window* pParent) { diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx index cd4b4d36a9dd..5ddcce87f0db 100644 --- a/cui/source/factory/dlgfact.hxx +++ b/cui/source/factory/dlgfact.hxx @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -738,6 +739,20 @@ public: virtual short Execute() override; }; +class AboutDialog; +class AbstractAboutDialog_Impl : public AbstractAboutDialog +{ +protected: + std::unique_ptr m_xDlg; + +public: + explicit AbstractAboutDialog_Impl(std::unique_ptr p) + : m_xDlg(std::move(p)) + { + } + virtual short Execute() override; +}; + class TipOfTheDayDialog; class AbstractTipOfTheDayDialog_Impl : public AbstractTipOfTheDayDialog { @@ -774,8 +789,6 @@ class AbstractDialogFactory_Impl : public SvxAbstractDialogFactory public: virtual VclPtr CreateVclDialog(weld::Window* pParent, sal_uInt32 nResId) override; - virtual VclPtr CreateAboutDialog(weld::Window* pParent) override; - virtual VclPtr CreateSfxDialog( weld::Window* pParent, const SfxItemSet& rAttr, const SdrView* pView, @@ -954,6 +967,8 @@ public: CreateQrCodeGenDialog(weld::Window* pParent, const css::uno::Reference xModel, bool bEditExisting) override; + virtual VclPtr CreateAboutDialog(weld::Window* pParent) override; + virtual VclPtr CreateTipOfTheDayDialog(weld::Window* pParent) override; virtual VclPtr CreateDiagramDialog( diff --git a/cui/source/inc/about.hxx b/cui/source/inc/about.hxx index aeda433cb2bd..ab03768a27df 100644 --- a/cui/source/inc/about.hxx +++ b/cui/source/inc/about.hxx @@ -22,24 +22,18 @@ #include #include -class AboutDialog : public weld::DialogController +class AboutDialog : public weld::GenericDialogController { private: - std::unique_ptr m_xBuilder; - std::shared_ptr m_xDialog; - std::unique_ptr m_xContentArea; - std::unique_ptr m_xCreditsButton; - std::unique_ptr m_xWebsiteButton; - std::unique_ptr m_xReleaseNotesButton; - std::unique_ptr m_xCloseButton; + std::unique_ptr m_pCreditsButton; + std::unique_ptr m_pWebsiteButton; + std::unique_ptr m_pReleaseNotesButton; + std::unique_ptr m_pCloseButton; - BitmapEx aLogoBitmap; - BitmapEx aBackgroundBitmap; - - OUString m_buildIdLinkString; - - void SetBuildIdLink(); - void SetLogo(); + std::unique_ptr m_pBrandImage; + std::unique_ptr m_pAboutImage; + std::unique_ptr m_pVersionLabel; + std::unique_ptr m_pCopyrightLabel; static OUString GetBuildId(); static OUString GetVersionString(); @@ -49,11 +43,7 @@ private: public: AboutDialog(weld::Window* pParent); - virtual weld::Dialog* getDialog() override { return m_xDialog.get(); } virtual ~AboutDialog() override; - - DECL_LINK(HandleClick, weld::Button&, void); - DECL_LINK(SizeAllocHdl, const Size&, void); }; #endif // INCLUDED_CUI_SOURCE_INC_ABOUT_HXX diff --git a/cui/uiconfig/ui/aboutdialog.ui b/cui/uiconfig/ui/aboutdialog.ui index 21d9725b11bb..da99da4e5f51 100644 --- a/cui/uiconfig/ui/aboutdialog.ui +++ b/cui/uiconfig/ui/aboutdialog.ui @@ -1,36 +1,44 @@ - + - - + + False 6 About %PRODUCTNAME False True - 0 - 0 + center-on-parent dialog - %PRODUCTNAME - %PRODUCTNAME is a modern, easy-to-use, open source productivity suite for word processing, spreadsheets, presentations and more. - https://www.libreoffice.org/ - See Log: $GITHASH - image-missing - + - + False vertical - 6 + 12 - - True + False + 12 + True end - + + gtk-close + True + True + True + True + True + + + True + True + end + 3 + @@ -40,7 +48,172 @@ 0 + + + True + False + True + True + + + True + False + 12 + True + + + 0 + 0 + 5 + + + + + True + False + 24 + 24 + 24 + 0 + + + 1 + 0 + + + + + True + False + start + 6 + True + True + This release was supplied by The Document Foundation. +Copyright (c) 1980-2020 LibreOffice contributors. +LibreOffice was based on OpenOffice.org + True + 50 + 0 + + + 1 + 3 + + + + + True + False + end + 12 + 12 + True + True + %PRODUCTNAME is a modern, easy-to-use, open source productivity suite for word processing, spreadsheets, presentations and more. + True + 50 + 0 + + + + + + 1 + 2 + + + + + True + False + end + True + True + Version: 7.0 +Build ID: 7.0 +CPU threads +Locale: +Calc: + True + True + end + 50 + 0 + + + 1 + 1 + + + + + True + False + True + + + Credits + True + True + True + none + 0 + + + False + True + 0 + + + + + Website + True + True + True + none + 0 + https://www.libreoffice.org/ + + + False + True + 1 + + + + + Release Notes + True + True + True + none + 0 + + + False + True + 2 + + + + + 1 + 4 + + + + + False + True + 1 + + + + btnClose + diff --git a/icon-themes/colibre/brand/flat_logo.svg b/icon-themes/colibre/brand/flat_logo.svg index e24705a37057..dc9279be615f 100644 --- a/icon-themes/colibre/brand/flat_logo.svg +++ b/icon-themes/colibre/brand/flat_logo.svg @@ -1 +1,1187 @@ - \ No newline at end of file + +image/svg+xml \ No newline at end of file diff --git a/icon-themes/colibre/brand/shell/about.svg b/icon-themes/colibre/brand/shell/about.svg index d3e1035576e2..d9f951caf20f 100644 --- a/icon-themes/colibre/brand/shell/about.svg +++ b/icon-themes/colibre/brand/shell/about.svg @@ -1 +1,6416 @@ - \ No newline at end of file + + + + + LibreOffice 7 about dialog design + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + LibreOffice 7 about dialog design + + + Bayu Rizaldhan Rayes + + + + + Bayu Rizaldhan Rayes + + + Artwork for LibreOffice 7 about dialog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icon-themes/colibre/brand/shell/logo.svg b/icon-themes/colibre/brand/shell/logo.svg new file mode 100644 index 000000000000..3b919b6a6c01 --- /dev/null +++ b/icon-themes/colibre/brand/shell/logo.svg @@ -0,0 +1,271 @@ + +image/svg+xml \ No newline at end of file diff --git a/icon-themes/colibre/brand/shell/logo_inverted.svg b/icon-themes/colibre/brand/shell/logo_inverted.svg new file mode 100644 index 000000000000..81b8555ae49c --- /dev/null +++ b/icon-themes/colibre/brand/shell/logo_inverted.svg @@ -0,0 +1,271 @@ + +image/svg+xml \ No newline at end of file diff --git a/icon-themes/colibre/sfx2/res/logo.png b/icon-themes/colibre/sfx2/res/logo.png deleted file mode 100644 index 3ae20b710bbadb27a4a9f2ea7c8148d28557f0c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15459 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 Gf&T+x3qcJ4 diff --git a/icon-themes/karasa_jaga/sfx2/res/logo.png b/icon-themes/karasa_jaga/sfx2/res/logo.png deleted file mode 100644 index 9ba6acaaaa0da5df6d6b98caff615e183df090aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22096 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 diff --git a/icon-themes/tango/sfx2/res/logo.png b/icon-themes/tango/sfx2/res/logo.png deleted file mode 100644 index 9ba6acaaaa0da5df6d6b98caff615e183df090aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22096 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 CreatePasteDialog(weld::Window* pParent) = 0; virtual VclPtr CreateLinksDialog(weld::Window* pParent, sfx2::LinkManager* pMgr, bool bHTML=false, sfx2::SvBaseLink* p=nullptr) = 0; virtual VclPtr CreateSvxScriptOrgDialog(weld::Window* pParent, const OUString& rLanguage) = 0; - virtual VclPtr CreateAboutDialog(weld::Window* pParent) = 0; virtual VclPtr CreateScriptSelectorDialog(weld::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame) = 0; diff --git a/include/vcl/abstdlg.hxx b/include/vcl/abstdlg.hxx index 645f1da4b301..459abf4d39a7 100644 --- a/include/vcl/abstdlg.hxx +++ b/include/vcl/abstdlg.hxx @@ -125,6 +125,12 @@ protected: virtual ~AbstractQrCodeGenDialog() override = default; }; +class VCL_DLLPUBLIC AbstractAboutDialog : public VclAbstractDialog +{ +protected: + virtual ~AbstractAboutDialog() override = default; +}; + class VCL_DLLPUBLIC AbstractTipOfTheDayDialog : public VclAbstractDialog { protected: @@ -173,6 +179,10 @@ public: virtual VclPtr CreateScreenshotAnnotationDlg( weld::Dialog& rParentDialog) = 0; + // create about dialog + virtual VclPtr + CreateAboutDialog(weld::Window* pParent) = 0; + // create info dialog to show tip-of-the-day virtual VclPtr CreateTipOfTheDayDialog(weld::Window* pParent) = 0; diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 18eeb67f38a1..951b591f654b 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -2132,9 +2132,6 @@ public: bool bTakeOwnership = true) = 0; virtual std::unique_ptr weld_dialog(const OString& id, bool bTakeOwnership = true) = 0; - virtual std::unique_ptr weld_about_dialog(const OString& id, - bool bTakeOwnership = true) - = 0; virtual std::unique_ptr weld_assistant(const OString& id, bool bTakeOwnership = true) = 0; virtual std::unique_ptr weld_window(const OString& id, bool bTakeOwnership = true) = 0; diff --git a/sc/qa/uitest/calc_tests7/tdf106667.py b/sc/qa/uitest/calc_tests7/tdf106667.py index 5f07e904269b..5475c76808bb 100644 --- a/sc/qa/uitest/calc_tests7/tdf106667.py +++ b/sc/qa/uitest/calc_tests7/tdf106667.py @@ -28,7 +28,7 @@ class tdf106667(UITestCase): self.ui_test.execute_dialog_through_command(".uno:About") xAboutDlg = self.xUITest.getTopFocusWindow() - xCloseBtn = xAboutDlg.getChild("close") + xCloseBtn = xAboutDlg.getChild("btnClose") self.ui_test.close_dialog_through_button(xCloseBtn) self.assertEqual(get_cell_by_position(document, 0, 0, 0).getString(), "A") diff --git a/sfx2/inc/bitmaps.hlst b/sfx2/inc/bitmaps.hlst index 9dbdfb4da5d4..28e16d920513 100644 --- a/sfx2/inc/bitmaps.hlst +++ b/sfx2/inc/bitmaps.hlst @@ -75,7 +75,6 @@ #define SFX_FILE_THUMBNAIL_MATH "res/math128.png" #define SFX_FILE_THUMBNAIL_DEFAULT "res/main128.png" -#define BMP_WELCOME "sfx2/res/logo.png" #define BMP_RECENTDOC_REMOVE "res/recentdoc_remove.png" #define BMP_RECENTDOC_REMOVE_HIGHLIGHTED "res/recentdoc_remove_highlighted.png" #define BMP_DEFAULT "res/templatestar.png" diff --git a/sfx2/inc/recentdocsview.hxx b/sfx2/inc/recentdocsview.hxx index ff21644a9940..95b9386cd0ec 100644 --- a/sfx2/inc/recentdocsview.hxx +++ b/sfx2/inc/recentdocsview.hxx @@ -89,7 +89,7 @@ private: size_t mnLastMouseDownItem; /// Image that appears when there is no recent document. - Image maWelcomeImage; + BitmapEx maWelcomeImage; OUString maWelcomeLine1; OUString maWelcomeLine2; }; diff --git a/sfx2/source/appl/appmisc.cxx b/sfx2/source/appl/appmisc.cxx index f6fcc99bdb18..ada8f86eed04 100644 --- a/sfx2/source/appl/appmisc.cxx +++ b/sfx2/source/appl/appmisc.cxx @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -101,6 +102,29 @@ bool SfxApplication::IsDowning() const { return pImpl->bDowning; } SfxDispatcher* SfxApplication::GetAppDispatcher_Impl() { return pImpl->pAppDispat; } SfxSlotPool& SfxApplication::GetAppSlotPool_Impl() const { return *pImpl->pSlotPool; } +static bool FileExists( const INetURLObject& rURL ) +{ + bool bRet = false; + + if( rURL.GetProtocol() != INetProtocol::NotValid ) + { + try + { + ::ucbhelper::Content aCnt( rURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), uno::Reference< ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() ); + OUString aTitle; + + aCnt.getPropertyValue("Title") >>= aTitle; + bRet = ( !aTitle.isEmpty() ); + } + catch(const Exception&) + { + return false; + } + } + + return bRet; +} + bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWidth) { // Load from disk @@ -109,7 +133,11 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid OUString uri = "$BRAND_BASE_DIR/" LIBO_ETC_FOLDER + aBaseName + ".svg"; rtl::Bootstrap::expandMacros( uri ); + INetURLObject aObj( uri ); + if ( !FileExists(aObj) ) + return false; + VectorGraphicData aVectorGraphicData(aObj.PathToFileName(), VectorGraphicDataType::Svg); // transform into [0,0,width,width*aspect] std dimensions @@ -175,8 +203,7 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid BitmapEx SfxApplication::GetApplicationLogo(long nWidth) { BitmapEx aBitmap; - SfxApplication::loadBrandSvg("flat_logo", aBitmap, nWidth); - (void)Application::LoadBrandBitmap ("about", aBitmap); + SfxApplication::loadBrandSvg("shell/about", aBitmap, nWidth); return aBitmap; } diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx index 912363d7da75..6dd813fdf7be 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -653,7 +653,7 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - case SID_ABOUT: { - SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create(); + VclAbstractDialogFactory* pFact = VclAbstractDialogFactory::Create(); ScopedVclPtr pDlg(pFact->CreateAboutDialog(rReq.GetFrameWeld())); pDlg->Execute(); bDone = true; diff --git a/sfx2/source/control/recentdocsview.cxx b/sfx2/source/control/recentdocsview.cxx index e9120d355a01..b4b5fea1c2ec 100644 --- a/sfx2/source/control/recentdocsview.cxx +++ b/sfx2/source/control/recentdocsview.cxx @@ -39,6 +39,7 @@ #include #include #include "recentdocsviewitem.hxx" +#include #include @@ -124,7 +125,7 @@ RecentDocsView::RecentDocsView( vcl::Window* pParent ) : ThumbnailView(pParent) , mnFileTypes(ApplicationType::TYPE_NONE) , mnLastMouseDownItem(THUMBNAILVIEW_ITEM_NOTFOUND) - , maWelcomeImage(StockImage::Yes, BMP_WELCOME) + , maWelcomeImage() , maWelcomeLine1(SfxResId(STR_WELCOME_LINE1)) , maWelcomeLine2(SfxResId(STR_WELCOME_LINE2)) { @@ -135,6 +136,8 @@ RecentDocsView::RecentDocsView( vcl::Window* pParent ) setItemMaxTextLength( 30 ); setItemDimensions( mnItemMaxSize, mnItemMaxSize, gnTextHeight, gnItemPadding ); + maWelcomeImage = SfxApplication::GetApplicationLogo(500); + maFillColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsBackgroundColor::get()); maTextColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsTextColor::get()); maHighlightColor = Color(officecfg::Office::Common::Help::StartCenter::StartCenterThumbnailsHighlightColor::get()); @@ -365,13 +368,13 @@ void RecentDocsView::Paint(vcl::RenderContext& rRenderContext, const tools::Rect const int nX = (rSize.Width() - rImgSize.Width())/2; int nY = (rSize.Height() - 3 * nTextHeight - rImgSize.Height())/2; Point aImgPoint(nX, nY); - rRenderContext.DrawImage(aImgPoint, rImgSize, maWelcomeImage); + rRenderContext.DrawBitmapEx(aImgPoint, rImgSize, maWelcomeImage); nY = nY + rImgSize.Height(); - rRenderContext.DrawText(tools::Rectangle(0, nY, rSize.Width(), nY + nTextHeight), + rRenderContext.DrawText(tools::Rectangle(0, nY + 1 * nTextHeight, rSize.Width(), nY + nTextHeight), maWelcomeLine1, DrawTextFlags::Center); - rRenderContext.DrawText(tools::Rectangle(0, nY + 1.5 * nTextHeight, rSize.Width(), rSize.Height()), + rRenderContext.DrawText(tools::Rectangle(0, nY + 2 * nTextHeight, rSize.Width(), rSize.Height()), maWelcomeLine2, DrawTextFlags::MultiLine | DrawTextFlags::WordBreak | DrawTextFlags::Center); diff --git a/solenv/sanitizers/ui/cui.suppr b/solenv/sanitizers/ui/cui.suppr index 7d71d2e109ad..763ab34f58ad 100644 --- a/solenv/sanitizers/ui/cui.suppr +++ b/solenv/sanitizers/ui/cui.suppr @@ -1,3 +1,8 @@ +cui/uiconfig/ui/aboutdialog.ui://GtkImage[@id='imAbout'] no-labelled-by +cui/uiconfig/ui/aboutdialog.ui://GtkImage[@id='imBrand'] no-labelled-by +cui/uiconfig/ui/aboutdialog.ui://GtkLabel[@id='lbCopyright'] orphan-label +cui/uiconfig/ui/aboutdialog.ui://GtkLabel[@id='lbAbout'] orphan-label +cui/uiconfig/ui/aboutdialog.ui://GtkLabel[@id='lbVersion'] orphan-label cui/uiconfig/ui/aboutconfigdialog.ui://GtkEntry[@id='searchEntry'] no-labelled-by cui/uiconfig/ui/acorexceptpage.ui://GtkEntry[@id='abbrev'] no-labelled-by cui/uiconfig/ui/acorexceptpage.ui://GtkEntry[@id='double'] no-labelled-by diff --git a/sw/qa/uitest/writer_tests5/about_test.py b/sw/qa/uitest/writer_tests5/about_test.py index 159107275b58..7005dbb65221 100644 --- a/sw/qa/uitest/writer_tests5/about_test.py +++ b/sw/qa/uitest/writer_tests5/about_test.py @@ -17,7 +17,7 @@ class AboutDlgTest(UITestCase): xAboutDlg = self.xUITest.getTopFocusWindow() - xCloseBtn = xAboutDlg.getChild("close") + xCloseBtn = xAboutDlg.getChild("btnClose") self.ui_test.close_dialog_through_button(xCloseBtn) self.ui_test.close_doc() diff --git a/uitest/calc_tests/about_test.py b/uitest/calc_tests/about_test.py index a5082ee6c8e2..c6dc75b939dc 100644 --- a/uitest/calc_tests/about_test.py +++ b/uitest/calc_tests/about_test.py @@ -17,7 +17,7 @@ class AboutDlgTest(UITestCase): xAboutDlg = self.xUITest.getTopFocusWindow() - xCloseBtn = xAboutDlg.getChild("close") + xCloseBtn = xAboutDlg.getChild("btnClose") self.ui_test.close_dialog_through_button(xCloseBtn) self.ui_test.close_doc() diff --git a/uitest/demo_ui/hierarchy.py b/uitest/demo_ui/hierarchy.py index 5f7b3c25bed6..f5434366fda4 100644 --- a/uitest/demo_ui/hierarchy.py +++ b/uitest/demo_ui/hierarchy.py @@ -27,7 +27,7 @@ class CheckBoxTest(UITestCase): print(json_content) print(json.dumps(json_content, indent=4)) - closeBtn = xAboutDlg.getChild("close") + closeBtn = xAboutDlg.getChild("btnClose") self.ui_test.close_dialog_through_button(closeBtn) self.ui_test.close_doc() diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index dd3575b79c38..1553538ea932 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -22,9 +22,6 @@ public: virtual std::unique_ptr weld_message_dialog(const OString& id, bool bTakeOwnership = true) override; - virtual std::unique_ptr - weld_about_dialog(const OString& id, bool bTakeOwnership = true) override; - virtual std::unique_ptr weld_dialog(const OString& id, bool bTakeOwnership = true) override; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 13f596d5bc36..ed219871af24 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1615,48 +1615,6 @@ public: } }; -class SalInstanceAboutDialog : public SalInstanceDialog, public virtual weld::AboutDialog -{ -private: - VclPtr m_xAboutDialog; - -public: - SalInstanceAboutDialog(vcl::AboutDialog* pDialog, SalInstanceBuilder* pBuilder, - bool bTakeOwnership) - : SalInstanceDialog(pDialog, pBuilder, bTakeOwnership) - , m_xAboutDialog(pDialog) - { - } - virtual void set_version(const OUString& rVersion) override - { - m_xAboutDialog->SetVersion(rVersion); - } - virtual void set_copyright(const OUString& rCopyright) override - { - m_xAboutDialog->SetCopyright(rCopyright); - } - virtual void set_website(const OUString& rURL) override - { - m_xAboutDialog->SetWebsiteLink(rURL); - } - virtual void set_website_label(const OUString& rLabel) override - { - m_xAboutDialog->SetWebsiteLabel(rLabel); - } - virtual OUString get_website_label() const override - { - return m_xAboutDialog->GetWebsiteLabel(); - } - virtual void set_logo(const css::uno::Reference& rImage) override - { - m_xAboutDialog->SetLogo(Image(rImage)); - } - virtual void set_background(const css::uno::Reference& rImage) override - { - m_xAboutDialog->SetBackground(Image(rImage)); - } -}; - class SalInstanceAssistant : public SalInstanceDialog, public virtual weld::Assistant { private: @@ -6270,21 +6228,6 @@ std::unique_ptr SalInstanceBuilder::weld_message_dialog(con return pRet; } -std::unique_ptr SalInstanceBuilder::weld_about_dialog(const OString& id, - bool bTakeOwnership) -{ - vcl::AboutDialog* pAboutDialog = m_xBuilder->get(id); - std::unique_ptr pRet( - pAboutDialog ? new SalInstanceAboutDialog(pAboutDialog, this, false) : nullptr); - if (bTakeOwnership && pAboutDialog) - { - assert(!m_aOwnedToplevel && "only one toplevel per .ui allowed"); - m_aOwnedToplevel.set(pAboutDialog); - m_xBuilder->drop_ownership(pAboutDialog); - } - return pRet; -} - std::unique_ptr SalInstanceBuilder::weld_dialog(const OString& id, bool bTakeOwnership) { diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 361953129edd..020182cbe055 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -1842,7 +1842,7 @@ VclPtr VclBuilder::makeObject(vcl::Window *pParent, const OString & extractButtonImage(id, rMap, name == "GtkRadioButton"); VclPtr xWindow; - if (name == "GtkDialog" || name == "GtkAboutDialog" || name == "GtkAssistant") + if (name == "GtkDialog" || name == "GtkAssistant") { // WB_ALLOWMENUBAR because we don't know in advance if we will encounter // a menubar, and menubars need a BorderWindow in the toplevel, and @@ -1855,8 +1855,6 @@ VclPtr VclBuilder::makeObject(vcl::Window *pParent, const OString & Dialog::InitFlag eInit = !pParent ? Dialog::InitFlag::NoParent : Dialog::InitFlag::Default; if (name == "GtkAssistant") xWindow = VclPtr::Create(pParent, nBits, eInit); - else if (name == "GtkAboutDialog") - xWindow = VclPtr::Create(pParent, nBits, eInit); else xWindow = VclPtr::Create(pParent, nBits, eInit); #if HAVE_FEATURE_DESKTOP diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 584741d17e11..070958751aed 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -4730,103 +4730,6 @@ public: } }; -class GtkInstanceAboutDialog final : public GtkInstanceDialog, public virtual weld::AboutDialog -{ -private: - GtkAboutDialog* m_pAboutDialog; - GtkCssProvider* m_pCssProvider; - std::unique_ptr mxBackgroundImage; -public: - GtkInstanceAboutDialog(GtkAboutDialog* pAboutDialog, GtkInstanceBuilder* pBuilder, bool bTakeOwnership) - : GtkInstanceDialog(GTK_WINDOW(pAboutDialog), pBuilder, bTakeOwnership) - , m_pAboutDialog(pAboutDialog) - , m_pCssProvider(nullptr) - { - // in GtkAboutDialog apply_use_header_bar if headerbar is false it - // automatically adds a default close button which it doesn't if - // headerbar is true and which doesn't appear in the .ui - if (GtkWidget* pDefaultButton = gtk_dialog_get_widget_for_response(GTK_DIALOG(pAboutDialog), GTK_RESPONSE_DELETE_EVENT)) - gtk_widget_destroy(pDefaultButton); - } - - virtual void set_version(const OUString& rVersion) override - { - gtk_about_dialog_set_version(m_pAboutDialog, OUStringToOString(rVersion, RTL_TEXTENCODING_UTF8).getStr()); - } - - virtual void set_copyright(const OUString& rCopyright) override - { - gtk_about_dialog_set_copyright(m_pAboutDialog, OUStringToOString(rCopyright, RTL_TEXTENCODING_UTF8).getStr()); - } - - virtual void set_website(const OUString& rURL) override - { - OString sURL(OUStringToOString(rURL, RTL_TEXTENCODING_UTF8)); - gtk_about_dialog_set_website(m_pAboutDialog, sURL.isEmpty() ? nullptr : sURL.getStr()); - } - - virtual void set_website_label(const OUString& rLabel) override - { - OString sLabel(OUStringToOString(rLabel, RTL_TEXTENCODING_UTF8)); - gtk_about_dialog_set_website_label(m_pAboutDialog, sLabel.isEmpty() ? nullptr : sLabel.getStr()); - } - - virtual OUString get_website_label() const override - { - const gchar* pText = gtk_about_dialog_get_website_label(m_pAboutDialog); - return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); - } - - virtual void set_logo(const css::uno::Reference& rImage) override - { - GdkPixbuf* pixbuf = rImage.is() ? getPixbuf(rImage) : nullptr; - if (!pixbuf) - gtk_about_dialog_set_logo(m_pAboutDialog, nullptr); - else - { - gtk_about_dialog_set_logo(m_pAboutDialog, pixbuf); - g_object_unref(pixbuf); - } - } - - virtual void set_background(const css::uno::Reference& rImage) override - { - GtkStyleContext *pStyleContext = gtk_widget_get_style_context(GTK_WIDGET(m_pAboutDialog)); - if (m_pCssProvider) - { - gtk_style_context_remove_provider(pStyleContext, GTK_STYLE_PROVIDER(m_pCssProvider)); - m_pCssProvider= nullptr; - } - - mxBackgroundImage.reset(); - - if (rImage.is()) - { - mxBackgroundImage.reset(new utl::TempFile()); - mxBackgroundImage->EnableKillingFile(true); - - Image aImage(rImage); - - vcl::PNGWriter aPNGWriter(aImage.GetBitmapEx()); - SvStream* pStream = mxBackgroundImage->GetStream(StreamMode::WRITE); - aPNGWriter.Write(*pStream); - mxBackgroundImage->CloseStream(); - - m_pCssProvider = gtk_css_provider_new(); - OUString aBuffer = "* { background-image: url(\"" + mxBackgroundImage->GetURL() + "\"); }"; - OString aResult = OUStringToOString(aBuffer, RTL_TEXTENCODING_UTF8); - gtk_css_provider_load_from_data(m_pCssProvider, aResult.getStr(), aResult.getLength(), nullptr); - gtk_style_context_add_provider(pStyleContext, GTK_STYLE_PROVIDER(m_pCssProvider), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - } - } - - virtual ~GtkInstanceAboutDialog() override - { - set_background(nullptr); - } -}; - class GtkInstanceAssistant : public GtkInstanceDialog, public virtual weld::Assistant { private: @@ -14117,24 +14020,6 @@ private: set_primary_text(pMessageDialog, (*m_pStringReplace)(get_primary_text(pMessageDialog))); set_secondary_text(pMessageDialog, (*m_pStringReplace)(get_secondary_text(pMessageDialog))); } - else if (GTK_IS_ABOUT_DIALOG(pWindow)) - { - GtkAboutDialog* pAboutDialog = GTK_ABOUT_DIALOG(pWindow); - const gchar *pComments = gtk_about_dialog_get_comments(pAboutDialog); - if (pComments) - { - OUString sComments(pComments, strlen(pComments), RTL_TEXTENCODING_UTF8); - sComments = (*m_pStringReplace)(sComments); - gtk_about_dialog_set_comments(pAboutDialog, OUStringToOString(sComments, RTL_TEXTENCODING_UTF8).getStr()); - } - const gchar *pProgramName = gtk_about_dialog_get_program_name(pAboutDialog); - if (pProgramName) - { - OUString sProgramName(pProgramName, strlen(pProgramName), RTL_TEXTENCODING_UTF8); - sProgramName = (*m_pStringReplace)(sProgramName); - gtk_about_dialog_set_program_name(pAboutDialog, OUStringToOString(sProgramName, RTL_TEXTENCODING_UTF8).getStr()); - } - } } } } @@ -14283,15 +14168,6 @@ public: return std::make_unique(pMessageDialog, this, bTakeOwnership); } - virtual std::unique_ptr weld_about_dialog(const OString &id, bool bTakeOwnership) override - { - GtkAboutDialog* pAboutDialog = GTK_ABOUT_DIALOG(gtk_builder_get_object(m_pBuilder, id.getStr())); - if (!pAboutDialog) - return nullptr; - gtk_window_set_transient_for(GTK_WINDOW(pAboutDialog), GTK_WINDOW(gtk_widget_get_toplevel(m_pParentWidget))); - return std::make_unique(pAboutDialog, this, bTakeOwnership); - } - virtual std::unique_ptr weld_assistant(const OString &id, bool bTakeOwnership) override { GtkAssistant* pAssistant = GTK_ASSISTANT(gtk_builder_get_object(m_pBuilder, id.getStr()));