[Libreoffice-commits] core.git: include/sfx2 include/vcl sfx2/source vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Thu Jan 16 14:19:59 UTC 2020


 include/sfx2/weldutils.hxx        |    4 ++
 include/vcl/weld.hxx              |    1 
 sfx2/source/toolbox/weldutils.cxx |   52 +++++++++++++++++++++++++++++++++++++-
 vcl/source/app/salvtables.cxx     |   22 ++++++++++++++++
 vcl/unx/gtk3/gtk3gtkinst.cxx      |   23 ++++++++++++++++
 5 files changed, 101 insertions(+), 1 deletion(-)

New commits:
commit ac748be2f0a3d5ba965eb8a3ace0b526a65a48cb
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Jan 16 10:47:37 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Jan 16 15:19:24 2020 +0100

    use sidebar icon size setting for welded toolboxes in sidebars
    
    Change-Id: Ie582a76e87126effca9260b58d8a8bef51c147ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86908
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/sfx2/weldutils.hxx b/include/sfx2/weldutils.hxx
index 2486ca97307e..8c577f9a1651 100644
--- a/include/sfx2/weldutils.hxx
+++ b/include/sfx2/weldutils.hxx
@@ -16,6 +16,7 @@
 #include <com/sun/star/uno/Reference.hxx>
 #include <tools/link.hxx>
 #include <sfx2/dllapi.h>
+#include <svtools/miscopt.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/weld.hxx>
 
@@ -30,12 +31,15 @@ class SFX2_DLLPUBLIC ToolbarUnoDispatcher
 {
 private:
     css::uno::Reference<css::frame::XFrame> m_xFrame;
+    SvtMiscOptions m_aToolbarOptions;
     weld::Toolbar* m_pToolbar;
 
     DECL_LINK(SelectHdl, const OString&, void);
     DECL_LINK(ToggleMenuHdl, const OString&, void);
+    DECL_LINK(ChangedIconSizeHandler, LinkParamNone*, void);
 
     void CreateController(const OUString& rCommand);
+    vcl::ImageType GetIconSize() const;
 
     typedef std::map<OUString, css::uno::Reference<css::frame::XToolbarController>>
         ControllerContainer;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 6d99c3516589..9890be5d4bc0 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1995,6 +1995,7 @@ public:
     virtual void set_item_tooltip_text(int nIndex, const OUString& rTip) = 0;
 
     virtual vcl::ImageType get_icon_size() const = 0;
+    virtual void set_icon_size(vcl::ImageType eType) = 0;
 
     void connect_clicked(const Link<const OString&, void>& rLink) { m_aClickHdl = rLink; }
     void connect_menu_toggled(const Link<const OString&, void>& rLink) { m_aToggleMenuHdl = rLink; }
diff --git a/sfx2/source/toolbox/weldutils.cxx b/sfx2/source/toolbox/weldutils.cxx
index 112f285297c5..327373d45819 100644
--- a/sfx2/source/toolbox/weldutils.cxx
+++ b/sfx2/source/toolbox/weldutils.cxx
@@ -7,6 +7,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <com/sun/star/frame/XSubToolbarController.hpp>
 #include <comphelper/dispatchcommand.hxx>
 #include <sfx2/sidebar/ControllerFactory.hxx>
 #include <sfx2/weldutils.hxx>
@@ -52,6 +53,25 @@ bool lcl_RTLizeCommandURL(OUString& rCommandURL)
 }
 }
 
+// for now all controllers are in the sidebar
+vcl::ImageType ToolbarUnoDispatcher::GetIconSize() const
+{
+    vcl::ImageType eType = vcl::ImageType::Size16;
+    switch (m_aToolbarOptions.GetSidebarIconSize())
+    {
+        case ToolBoxButtonSize::Large:
+            eType = vcl::ImageType::Size26;
+            break;
+        case ToolBoxButtonSize::Size32:
+            eType = vcl::ImageType::Size32;
+            break;
+        case ToolBoxButtonSize::DontCare:
+        case ToolBoxButtonSize::Small:
+            break;
+    }
+    return eType;
+}
+
 ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
                                            const css::uno::Reference<css::frame::XFrame>& rFrame)
     : m_xFrame(rFrame)
@@ -61,7 +81,8 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
     rToolbar.connect_menu_toggled(LINK(this, ToolbarUnoDispatcher, ToggleMenuHdl));
 
     OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame));
-    vcl::ImageType eSize = rToolbar.get_icon_size();
+    vcl::ImageType eSize = GetIconSize();
+    rToolbar.set_icon_size(eSize);
 
     bool bRTL = AllSettings::GetLayoutRTL();
 
@@ -82,6 +103,8 @@ ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
 
         CreateController(sCommand);
     }
+
+    m_aToolbarOptions.AddListenerLink(LINK(this, ToolbarUnoDispatcher, ChangedIconSizeHandler));
 }
 
 void ToolbarUnoDispatcher::CreateController(const OUString& rCommand)
@@ -121,11 +144,38 @@ IMPL_LINK(ToolbarUnoDispatcher, ToggleMenuHdl, const OString&, rCommand, void)
         xController->click();
 }
 
+IMPL_LINK_NOARG(ToolbarUnoDispatcher, ChangedIconSizeHandler, LinkParamNone*, void)
+{
+    vcl::ImageType eSize = GetIconSize();
+    m_pToolbar->set_icon_size(eSize);
+
+    for (int i = 0, nItems = m_pToolbar->get_n_items(); i < nItems; ++i)
+    {
+        OUString sCommand = OUString::fromUtf8(m_pToolbar->get_item_ident(i));
+        auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, m_xFrame, eSize));
+        m_pToolbar->set_item_image(i, xImage);
+    }
+
+    for (auto const& it : maControllers)
+    {
+        css::uno::Reference<css::frame::XSubToolbarController> xController(it.second,
+                                                                           css::uno::UNO_QUERY);
+        if (xController.is() && xController->opensSubToolbar())
+        {
+            // The button should show the last function that was selected from the
+            // dropdown. The controller should know better than us what it was.
+            xController->updateImage();
+        }
+    }
+}
+
 void ToolbarUnoDispatcher::dispose()
 {
     if (!m_pToolbar)
         return;
 
+    m_aToolbarOptions.RemoveListenerLink(LINK(this, ToolbarUnoDispatcher, ChangedIconSizeHandler));
+
     ControllerContainer aControllers;
     aControllers.swap(maControllers);
     for (auto const& controller : aControllers)
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 7cb974d90635..248a62090f06 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1164,6 +1164,28 @@ public:
         return m_xToolBox->GetImageSize();
     }
 
+    virtual void set_icon_size(vcl::ImageType eType) override
+    {
+        ToolBoxButtonSize eButtonSize = ToolBoxButtonSize::DontCare;
+        switch (eType)
+        {
+            case vcl::ImageType::Size16:
+                eButtonSize = ToolBoxButtonSize::Small;
+                break;
+            case vcl::ImageType::Size26:
+                eButtonSize = ToolBoxButtonSize::Large;
+                break;
+            case vcl::ImageType::Size32:
+                eButtonSize = ToolBoxButtonSize::Size32;
+                break;
+        }
+        if (m_xToolBox->GetToolboxButtonSize() != eButtonSize)
+        {
+            m_xToolBox->SetToolboxButtonSize(eButtonSize);
+            m_xToolBox->queue_resize();
+        }
+    }
+
     virtual ~SalInstanceToolbar() override
     {
         m_xToolBox->SetDropdownClickHdl(Link<ToolBox*, void>());
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 45b4c529f50b..f4424ac18e5c 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -7049,6 +7049,24 @@ public:
         }
         return eRet;
     }
+
+    GtkIconSize VclToGtk(vcl::ImageType eSize)
+    {
+        GtkIconSize eRet;
+        switch (eSize)
+        {
+            case vcl::ImageType::Size16:
+                eRet = GTK_ICON_SIZE_SMALL_TOOLBAR;
+                break;
+            case vcl::ImageType::Size26:
+                eRet = GTK_ICON_SIZE_LARGE_TOOLBAR;
+                break;
+            case vcl::ImageType::Size32:
+                eRet = GTK_ICON_SIZE_DIALOG;
+                break;
+        }
+        return eRet;
+    }
 }
 
 void GtkInstanceMenuButton::set_menu(weld::Menu* pMenu)
@@ -7410,6 +7428,11 @@ public:
         return GtkToVcl(gtk_toolbar_get_icon_size(m_pToolbar));
     }
 
+    virtual void set_icon_size(vcl::ImageType eType) override
+    {
+        return gtk_toolbar_set_icon_size(m_pToolbar, VclToGtk(eType));
+    }
+
     virtual ~GtkInstanceToolbar() override
     {
         for (auto& a : m_aMap)


More information about the Libreoffice-commits mailing list