Blob Blame History Raw
From d83c1e5de554b7722d0a3161ba757e6e4785810e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 20 Feb 2018 13:59:08 +0000
Subject: [PATCH] Resolves: rhbz#1546997 'search not found' at 0,0 when window
 too narrow
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

if the statusbar hadn't got space for the initial label, then it doesn't get set a position,
so when later forced visible it draws at 0,0

call Resize on the toolbox to get it to relayout, and while we're at it
set the required size of the label so we might have space for it if that
text is shorter than the original len allocation

Change-Id: I37d20125d8195b2c75e83e9673c82c2011ceda8e
Reviewed-on: https://gerrit.libreoffice.org/50041
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
---
 svx/source/dialog/srchdlg.cxx | 48 ++++++++++++++++++++-----------------------
 1 file changed, 22 insertions(+), 26 deletions(-)

diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx
index 4cea924..50c19a3 100644
--- a/svx/source/dialog/srchdlg.cxx
+++ b/svx/source/dialog/srchdlg.cxx
@@ -2375,11 +2375,11 @@ SfxChildWinInfo SvxSearchDialogWrapper::GetInfo() const
 }
 
 
-static vcl::Window* lcl_GetSearchLabelWindow()
+static void lcl_SetSearchLabelWindow(const OUString& rStr)
 {
     SfxViewFrame* pViewFrame = SfxViewFrame::Current();
     if (!pViewFrame)
-        return nullptr;
+        return;
 
     css::uno::Reference< css::beans::XPropertySet > xPropSet(
             pViewFrame->GetFrame().GetFrameInterface(), css::uno::UNO_QUERY_THROW);
@@ -2388,14 +2388,28 @@ static vcl::Window* lcl_GetSearchLabelWindow()
     css::uno::Reference< css::ui::XUIElement > xUIElement =
         xLayoutManager->getElement("private:resource/toolbar/findbar");
     if (!xUIElement.is())
-        return nullptr;
+        return;
     css::uno::Reference< css::awt::XWindow > xWindow(
             xUIElement->getRealInterface(), css::uno::UNO_QUERY_THROW);
     VclPtr< ToolBox > pToolBox = static_cast<ToolBox*>( VCLUnoHelper::GetWindow(xWindow).get() );
-    for (size_t i = 0; pToolBox && i < pToolBox->GetItemCount(); ++i)
+    if (!pToolBox)
+        return;
+    for (size_t i = 0; i < pToolBox->GetItemCount(); ++i)
+    {
         if (pToolBox->GetItemCommand(i) == ".uno:SearchLabel")
-            return pToolBox->GetItemWindow(i);
-    return nullptr;
+        {
+            vcl::Window* pSearchLabel = pToolBox->GetItemWindow(i);
+            assert(pSearchLabel);
+            pSearchLabel->Hide();
+            pSearchLabel->SetText(rStr);
+            if (!rStr.isEmpty())
+            {
+                pSearchLabel->SetSizePixel(pSearchLabel->get_preferred_size());
+                pSearchLabel->Show();
+            }
+        }
+    }
+    pToolBox->Resize();
 }
 
 void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL)
@@ -2410,16 +2424,7 @@ void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL)
     else if (rSL == SearchLabel::NotFound)
         sStr = SVX_RESSTR(RID_SVXSTR_SEARCH_NOT_FOUND);
 
-    if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow())
-    {
-        if (sStr.isEmpty())
-            pSearchLabel->Hide();
-        else
-        {
-            pSearchLabel->SetText(sStr);
-            pSearchLabel->Show();
-        }
-    }
+    lcl_SetSearchLabelWindow(sStr);
     if (SvxSearchDialogWrapper *pWrp = static_cast<SvxSearchDialogWrapper*>( SfxViewFrame::Current()->
             GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() )))
         pWrp->getDialog()->SetSearchLabel(sStr);
@@ -2428,16 +2433,7 @@ void SvxSearchDialogWrapper::SetSearchLabel(const SearchLabel& rSL)
 void SvxSearchDialogWrapper::SetSearchLabel(const OUString& sStr)
 {
 
-    if (vcl::Window *pSearchLabel = lcl_GetSearchLabelWindow())
-    {
-        if (sStr.isEmpty())
-            pSearchLabel->Hide();
-        else
-        {
-            pSearchLabel->SetText(sStr);
-            pSearchLabel->Show();
-        }
-    }
+    lcl_SetSearchLabelWindow(sStr);
     if (SvxSearchDialogWrapper *pWrp = static_cast<SvxSearchDialogWrapper*>( SfxViewFrame::Current()->
             GetChildWindow( SvxSearchDialogWrapper::GetChildWindowId() )))
         pWrp->getDialog()->SetSearchLabel(sStr);
-- 
2.14.3