[Libreoffice-commits] core.git: include/vcl sd/source sfx2/source solenv/sanitizers svx/inc svx/source svx/uiconfig svx/UIConfig_svx.mk vcl/inc vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 10 14:21:01 UTC 2020


 include/vcl/toolbox.hxx                   |    3 
 include/vcl/weld.hxx                      |    2 
 sd/source/ui/sidebar/LayoutMenu.cxx       |    1 
 sfx2/source/control/InterimItemWindow.cxx |   12 ++-
 solenv/sanitizers/ui/svx.suppr            |    1 
 svx/UIConfig_svx.mk                       |    1 
 svx/inc/pch/precompiled_svx.hxx           |    4 -
 svx/source/form/tbxform.cxx               |   94 ++++++++++++++++++------------
 svx/source/inc/tbxform.hxx                |    3 
 svx/source/tbxctrls/grafctrl.cxx          |    7 --
 svx/uiconfig/ui/labelbox.ui               |   23 +++++++
 vcl/inc/toolbox.h                         |    1 
 vcl/source/app/salvtables.cxx             |    5 +
 vcl/source/window/toolbox.cxx             |    3 
 vcl/source/window/toolbox2.cxx            |   11 +++
 vcl/unx/gtk3/gtk3gtkinst.cxx              |    5 +
 16 files changed, 125 insertions(+), 51 deletions(-)

New commits:
commit abfdfe6ac1bfc917d1693874f9dec80167e0806f
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Feb 8 20:43:30 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Feb 10 15:20:26 2020 +0100

    weld SvxFmTbxCtlRecTotal label item window
    
    and SvxFmTbxCtlRecText label item window
    and SvxFmTbxCtlRecFromText label item window
    
    Change-Id: I5c5bbdacfe7e69abd44b9a548deadbf6c4d2a7d0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88283
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/toolbox.hxx b/include/vcl/toolbox.hxx
index a0ec7f897fe1..8a85863dd162 100644
--- a/include/vcl/toolbox.hxx
+++ b/include/vcl/toolbox.hxx
@@ -361,6 +361,9 @@ public:
     ToolBoxItemBits     GetItemBits( sal_uInt16 nItemId ) const;
 
     void                SetItemExpand( sal_uInt16 nItemId, bool bExpand );
+    // e.g. a label used as an itemwindow
+    void                SetItemWindowNonInteractive(sal_uInt16 nItemId, bool bNonInteractive);
+
 
     void                SetItemData( sal_uInt16 nItemId, void* pNewData );
     void*               GetItemData( sal_uInt16 nItemId ) const;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 464047bdf843..9ed79878ea70 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -262,6 +262,8 @@ public:
     virtual void set_stack_background() = 0;
     //make this widget look like it has a highlighted background
     virtual void set_highlight_background() = 0;
+    //make this widget suitable for use in a toolbar
+    virtual void set_toolbar_background() = 0;
 
     virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> get_drop_target() = 0;
 
diff --git a/sd/source/ui/sidebar/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx
index 701c1ce27132..2b12aa17f34e 100644
--- a/sd/source/ui/sidebar/LayoutMenu.cxx
+++ b/sd/source/ui/sidebar/LayoutMenu.cxx
@@ -755,7 +755,6 @@ void LayoutMenu::DataChanged (const DataChangedEvent& /*rEvent*/)
 {
     Fill();
     mxLayoutValueSet->StyleUpdated();
-//TODO    SetBackground(sfx2::sidebar::Theme::GetWallpaper(sfx2::sidebar::Theme::Paint_PanelBackground));
     mxLayoutValueSet->SetColor(sfx2::sidebar::Theme::GetColor(sfx2::sidebar::Theme::Paint_PanelBackground));
 }
 
diff --git a/sfx2/source/control/InterimItemWindow.cxx b/sfx2/source/control/InterimItemWindow.cxx
index d2beb658181a..8e6ddb096318 100644
--- a/sfx2/source/control/InterimItemWindow.cxx
+++ b/sfx2/source/control/InterimItemWindow.cxx
@@ -17,6 +17,8 @@ InterimItemWindow::InterimItemWindow(vcl::Window* pParent, const OUString& rUIXM
     m_xVclContentArea->Show();
     m_xBuilder.reset(Application::CreateInterimBuilder(m_xVclContentArea, rUIXMLDescription));
     m_xContainer = m_xBuilder->weld_container(rID);
+
+    SetBackground(Wallpaper(COL_TRANSPARENT));
 }
 
 InterimItemWindow::~InterimItemWindow() { disposeOnce(); }
@@ -64,16 +66,18 @@ bool InterimItemWindow::ChildKeyInput(const KeyEvent& rKEvt)
     SetFakeFocus(true);
     GrabFocus();
 
-    /* let toolbox know we have focus so it updates its mnHighItemId to point
+    /* now give focus to our toolbox parent */
+    vcl::Window* pToolBox = GetParent();
+    pToolBox->GrabFocus();
+
+    /* let toolbox know this item window has focus so it updates its mnHighItemId to point
        to this toolitem in case tab means to move to another toolitem within
        the toolbox
     */
     NotifyEvent aNEvt(MouseNotifyEvent::GETFOCUS, this);
-    vcl::Window* pToolBox = GetParent();
     pToolBox->EventNotify(aNEvt);
 
-    /* now give focus to our toolbox parent and send it the tab */
-    pToolBox->GrabFocus();
+    /* send parent the tab */
     pToolBox->KeyInput(rKEvt);
 
     return true;
diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr
index 2037cc5c2d90..5baa2b48f9a4 100644
--- a/solenv/sanitizers/ui/svx.suppr
+++ b/solenv/sanitizers/ui/svx.suppr
@@ -46,6 +46,7 @@ svx/uiconfig/ui/headfootformatpage.ui://GtkLabel[@id='labelFooterFormat'] orphan
 svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statusurl'] orphan-label
 svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statuspos'] orphan-label
 svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statussize'] orphan-label
+svx/uiconfig/ui/labelbox.ui://GtkLabel[@id='label'] orphan-label
 svx/uiconfig/ui/mediaplayback.ui://GtkEntry[@id='timeedit'] no-labelled-by
 svx/uiconfig/ui/medialine.ui://GtkEntry[@id='timeedit'] no-labelled-by
 svx/uiconfig/ui/medialine.ui://GtkLabel[@id='url'] orphan-label
diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk
index 69a7e7ea6e92..48f8b24c3e09 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -75,6 +75,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
 	svx/uiconfig/ui/imapmenu \
 	svx/uiconfig/ui/interimdockparent \
 	svx/uiconfig/ui/interimparent \
+	svx/uiconfig/ui/labelbox \
 	svx/uiconfig/ui/lightingwindow \
 	svx/uiconfig/ui/linkwarndialog \
 	svx/uiconfig/ui/measurewidthbar \
diff --git a/svx/inc/pch/precompiled_svx.hxx b/svx/inc/pch/precompiled_svx.hxx
index 335be47a3561..c463eccb9b4a 100644
--- a/svx/inc/pch/precompiled_svx.hxx
+++ b/svx/inc/pch/precompiled_svx.hxx
@@ -13,7 +13,7 @@
  manual changes will be rewritten by the next run of update_pch.sh (which presumably
  also fixes all possible problems, so it's usually better to use it).
 
- Generated on 2020-02-07 12:03:14 using:
+ Generated on 2020-02-08 20:53:08 using:
  ./bin/update_pch svx svx --cutoff=3 --exclude:system --exclude:module --include:local
 
  If after updating build fails, use the following command to locate conflicting headers:
@@ -82,11 +82,11 @@
 #include <vcl/customweld.hxx>
 #include <vcl/dllapi.h>
 #include <vcl/dockwin.hxx>
+#include <vcl/edit.hxx>
 #include <vcl/errcode.hxx>
 #include <vcl/errinf.hxx>
 #include <vcl/event.hxx>
 #include <vcl/field.hxx>
-#include <vcl/fixed.hxx>
 #include <vcl/font.hxx>
 #include <vcl/gdimtf.hxx>
 #include <vcl/graph.hxx>
diff --git a/svx/source/form/tbxform.cxx b/svx/source/form/tbxform.cxx
index ab80e13aa4ba..94e00643b897 100644
--- a/svx/source/form/tbxform.cxx
+++ b/svx/source/form/tbxform.cxx
@@ -21,14 +21,13 @@
 #include <svl/intitem.hxx>
 #include <svl/eitem.hxx>
 #include <svl/stritem.hxx>
+#include <sfx2/InterimItemWindow.hxx>
 #include <sfx2/dispatch.hxx>
 #include <vcl/event.hxx>
 #include <vcl/toolbox.hxx>
-#include <vcl/fixed.hxx>
 #include <vcl/settings.hxx>
 #include <formtoolbars.hxx>
 
-
 #include <svx/dialmgr.hxx>
 #include <svx/svxids.hrc>
 #include <svx/strings.hrc>
@@ -143,23 +142,57 @@ SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecText, SfxBoolItem );
 SvxFmTbxCtlRecText::SvxFmTbxCtlRecText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     :SfxToolBoxControl( nSlotId, nId, rTbx )
 {
+    rTbx.SetItemWindowNonInteractive(nId, true);
 }
 
 SvxFmTbxCtlRecText::~SvxFmTbxCtlRecText()
 {
 }
 
+class LabelItemWindow final : public InterimItemWindow
+{
+private:
+    std::unique_ptr<weld::Label> m_xLabel;
+public:
+    LabelItemWindow(vcl::Window *pParent, const OUString& rLabel)
+        : InterimItemWindow(pParent, "svx/ui/labelbox.ui", "LabelBox")
+        , m_xLabel(m_xBuilder->weld_label("label"))
+    {
+        m_xLabel->set_label(rLabel);
+        Size aSize(m_xLabel->get_preferred_size());
+        aSize.AdjustWidth(12);
+        m_xLabel->set_size_request(aSize.Width(), -1);
+
+        SetSizePixel(m_xLabel->get_preferred_size());
+
+        m_xLabel->set_toolbar_background();
+    }
+
+    void set_label(const OUString& rLabel)
+    {
+        m_xLabel->set_label(rLabel);
+    }
+
+    virtual void dispose() override
+    {
+        m_xLabel.reset();
+        InterimItemWindow::dispose();
+    }
+
+    virtual ~LabelItemWindow() override
+    {
+        disposeOnce();
+    }
+};
+
 VclPtr<vcl::Window> SvxFmTbxCtlRecText::CreateItemWindow( vcl::Window* pParent )
 {
     OUString aText(SvxResId(RID_STR_REC_TEXT));
-    VclPtrInstance<FixedText> pFixedText( pParent );
-    Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
-    pFixedText->SetText( aText );
-    aSize.AdjustWidth(6 );
-    pFixedText->SetSizePixel( aSize );
-    pFixedText->SetBackground(Wallpaper(COL_TRANSPARENT));
-
-    return pFixedText;
+    VclPtrInstance<LabelItemWindow> xFixedText(pParent, aText);
+
+    xFixedText->Show();
+
+    return xFixedText;
 }
 
 SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
@@ -167,57 +200,48 @@ SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
 SvxFmTbxCtlRecFromText::SvxFmTbxCtlRecFromText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     :SfxToolBoxControl( nSlotId, nId, rTbx )
 {
+    rTbx.SetItemWindowNonInteractive(nId, true);
 }
 
-
 SvxFmTbxCtlRecFromText::~SvxFmTbxCtlRecFromText()
 {
 }
 
-
 VclPtr<vcl::Window> SvxFmTbxCtlRecFromText::CreateItemWindow( vcl::Window* pParent )
 {
     OUString aText(SvxResId(RID_STR_REC_FROM_TEXT));
-    VclPtrInstance<FixedText> pFixedText( pParent, WB_CENTER );
-    Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
-    aSize.AdjustWidth(12 );
-    pFixedText->SetText( aText );
-    pFixedText->SetSizePixel( aSize );
-    pFixedText->SetBackground(Wallpaper(COL_TRANSPARENT));
-    return pFixedText.get();
+    VclPtrInstance<LabelItemWindow> xFixedText(pParent, aText);
+
+    xFixedText->Show();
+
+    return xFixedText;
 }
 
 SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecTotal, SfxStringItem );
 
-
 SvxFmTbxCtlRecTotal::SvxFmTbxCtlRecTotal( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
-    :SfxToolBoxControl( nSlotId, nId, rTbx )
-    ,pFixedText( nullptr )
+    : SfxToolBoxControl( nSlotId, nId, rTbx )
 {
+    rTbx.SetItemWindowNonInteractive(nId, true);
 }
 
-
 SvxFmTbxCtlRecTotal::~SvxFmTbxCtlRecTotal()
 {
 }
 
-
 VclPtr<vcl::Window> SvxFmTbxCtlRecTotal::CreateItemWindow( vcl::Window* pParent )
 {
-    pFixedText.reset(VclPtr<FixedText>::Create( pParent ));
     OUString const aSample("123456");
-    Size aSize( pFixedText->GetTextWidth( aSample ), pFixedText->GetTextHeight( ) );
-    aSize.AdjustWidth(12 );
-    pFixedText->SetSizePixel( aSize );
-    pFixedText->SetBackground();
-    pFixedText->SetPaintTransparent(true);
-    return pFixedText;
-}
+    m_xFixedText.reset(VclPtr<LabelItemWindow>::Create(pParent, aSample));
+    m_xFixedText->set_label("");
 
+    m_xFixedText->Show();
+
+    return m_xFixedText;
+}
 
 void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
 {
-
     // setting the FixedText
     if (GetSlotId() != SID_FM_RECORD_TOTAL)
         return;
@@ -228,9 +252,7 @@ void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, co
     else
         aText = "?";
 
-    pFixedText->SetText( aText );
-    pFixedText->Update();
-    pFixedText->Flush();
+    m_xFixedText->set_label(aText);
 
     SfxToolBoxControl::StateChanged( nSID, eState,pState );
 }
diff --git a/svx/source/inc/tbxform.hxx b/svx/source/inc/tbxform.hxx
index 95546f3ce80e..f436a91b2275 100644
--- a/svx/source/inc/tbxform.hxx
+++ b/svx/source/inc/tbxform.hxx
@@ -77,10 +77,11 @@ public:
     virtual VclPtr<vcl::Window> CreateItemWindow( vcl::Window* pParent ) override;
 };
 
+class LabelItemWindow;
 
 class SvxFmTbxCtlRecTotal : public SfxToolBoxControl
 {
-    VclPtr<FixedText> pFixedText;
+    VclPtr<LabelItemWindow> m_xFixedText;
 
 public:
     SFX_DECL_TOOLBOX_CONTROL();
diff --git a/svx/source/tbxctrls/grafctrl.cxx b/svx/source/tbxctrls/grafctrl.cxx
index dbbea77c8d37..0fcf01de5d32 100644
--- a/svx/source/tbxctrls/grafctrl.cxx
+++ b/svx/source/tbxctrls/grafctrl.cxx
@@ -22,7 +22,6 @@
 #include <i18nutil/unicode.hxx>
 #include <vcl/toolbox.hxx>
 #include <vcl/field.hxx>
-#include <vcl/fixed.hxx>
 #include <vcl/idle.hxx>
 #include <vcl/svapp.hxx>
 #include <svl/intitem.hxx>
@@ -215,11 +214,7 @@ ImplGrafControl::ImplGrafControl(
 {
     OUString sResId(ImplGetRID(rCmd));
     mxImage->set_from_icon_name(sResId);
-#if 0
-    // we want to see the background of the toolbox, not of the FixedImage or Control
-    maImage->SetBackground( Wallpaper( COL_TRANSPARENT ) );
-    SetBackground( Wallpaper( COL_TRANSPARENT ) );
-#endif
+    mxImage->set_toolbar_background();
 
     SetBackground( Wallpaper() ); // transparent background
 
diff --git a/svx/uiconfig/ui/labelbox.ui b/svx/uiconfig/ui/labelbox.ui
new file mode 100644
index 000000000000..5f07290f56ee
--- /dev/null
+++ b/svx/uiconfig/ui/labelbox.ui
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="svx">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkBox" id="LabelBox">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="spacing">4</property>
+    <child>
+      <object class="GtkLabel" id="label">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="hexpand">True</property>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="fill">True</property>
+        <property name="position">0</property>
+      </packing>
+    </child>
+  </object>
+</interface>
diff --git a/vcl/inc/toolbox.h b/vcl/inc/toolbox.h
index 3012c5916570..b534b219245f 100644
--- a/vcl/inc/toolbox.h
+++ b/vcl/inc/toolbox.h
@@ -35,6 +35,7 @@ namespace vcl { class Window; }
 struct ImplToolItem
 {
     VclPtr<vcl::Window> mpWindow; //don't dispose mpWindow - we get copied around
+    bool                mbNonInteractiveWindow;
     void*               mpUserData;
     Image               maImage;
     long                mnImageAngle;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f1bc5c341d47..d53ea9292835 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -734,6 +734,11 @@ public:
         set_background(m_xWidget->GetSettings().GetStyleSettings().GetWindowColor());
     }
 
+    virtual void set_toolbar_background() override
+    {
+        m_xWidget->SetBackground(Wallpaper(COL_TRANSPARENT));
+    }
+
     virtual void set_highlight_background() override
     {
         set_background(m_xWidget->GetSettings().GetStyleSettings().GetHighlightColor());
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 6763ca2d09e0..a781b314d751 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -609,7 +609,8 @@ void ToolBox::ImplDrawBorder(vcl::RenderContext& rRenderContext)
 static bool ImplIsFixedControl( const ImplToolItem *pItem )
 {
     return ( pItem->mpWindow &&
-            (pItem->mpWindow->GetType() == WindowType::FIXEDTEXT ||
+            (pItem->mbNonInteractiveWindow ||
+             pItem->mpWindow->GetType() == WindowType::FIXEDTEXT ||
              pItem->mpWindow->GetType() == WindowType::FIXEDLINE ||
              pItem->mpWindow->GetType() == WindowType::GROUPBOX) );
 }
diff --git a/vcl/source/window/toolbox2.cxx b/vcl/source/window/toolbox2.cxx
index 75bf5cc95a86..68cf9a383085 100644
--- a/vcl/source/window/toolbox2.cxx
+++ b/vcl/source/window/toolbox2.cxx
@@ -79,6 +79,7 @@ void ImplToolItem::init(sal_uInt16 nItemId, ToolBoxItemBits nItemBits,
 {
     mnId            = nItemId;
     mpWindow        = nullptr;
+    mbNonInteractiveWindow = false;
     mpUserData      = nullptr;
     meType          = ToolBoxItemType::BUTTON;
     mnBits          = nItemBits;
@@ -878,6 +879,16 @@ void ToolBox::SetItemBits( sal_uInt16 nItemId, ToolBoxItemBits nBits )
     }
 }
 
+void ToolBox::SetItemWindowNonInteractive(sal_uInt16 nItemId, bool bNonInteractive)
+{
+    ImplToolItems::size_type nPos = GetItemPos( nItemId );
+
+    if ( nPos < GetItemCount() )
+    {
+        mpData->m_aItems[nPos].mbNonInteractiveWindow = bNonInteractive;
+    }
+}
+
 ToolBoxItemBits ToolBox::GetItemBits( sal_uInt16 nItemId ) const
 {
     ImplToolItem* pItem = ImplGetItem( nItemId );
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index e0922c1afe98..7a9d53f8a61f 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -2885,6 +2885,11 @@ public:
         set_background(&sColor);
     }
 
+    virtual void set_toolbar_background() override
+    {
+        // no-op
+    }
+
     virtual ~GtkInstanceWidget() override
     {
         if (m_pFocusInEvent)


More information about the Libreoffice-commits mailing list