svx/source/sidebar/possize/PosSizePropertyPanel.cxx |   55 ++++++++++++++++++--
 svx/source/sidebar/possize/PosSizePropertyPanel.hxx |    6 ++
 2 files changed, 57 insertions(+), 4 deletions(-)

New commits:
commit 166c08906577150b45c399fe3c54230d81dfa0d9
Author:     Caolán McNamara <[email protected]>
AuthorDate: Thu Aug 29 11:57:10 2024 +0100
Commit:     Adolfo Jayme Barrientos <[email protected]>
CommitDate: Fri Aug 30 21:40:19 2024 +0200

    Resolves: tdf#160675 reformat 'blanked' metricspinbutton after setting value
    
    click on background, set_text sets a blank for the content of the metric
    spin button, so explicitly reformat when a value is set afterwards.
    
    Change-Id: Idac3f805bcf1baad1cdeaa3caa1c48a976f2f738
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172592
    Tested-by: Jenkins
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx 
b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index 18abfa1160e3..8f26d480f985 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -113,6 +113,11 @@ PosSizePropertyPanel::PosSizePropertyPanel(
     mbAutoWidth(false),
     mbAutoHeight(false),
     mbAdjustEnabled(false),
+    mbMtrPosXBlanked(false),
+    mbMtrPosYBlanked(false),
+    mbMtrWidthBlanked(false),
+    mbMtrHeightBlanked(false),
+    mbMtrAngleBlanked(false),
     mxSidebar(std::move(xSidebar))
 {
     Initialize();
@@ -519,11 +524,17 @@ void PosSizePropertyPanel::NotifyItemUpdate(
                     limitWidth(*mxMtrWidth);
                     mlOldWidth = lOldWidth1;
                     mxMtrWidth->save_value();
+                    if (mbMtrWidthBlanked)
+                    {
+                        mxMtrWidth->reformat();
+                        mbMtrWidthBlanked = false;
+                    }
                     break;
                 }
             }
 
             mxMtrWidth->set_text( "" );
+            mbMtrWidthBlanked = true;
             break;
 
         case SID_ATTR_TRANSFORM_HEIGHT:
@@ -539,6 +550,11 @@ void PosSizePropertyPanel::NotifyItemUpdate(
                     limitWidth(*mxMtrHeight);
                     mlOldHeight = nTmp;
                     mxMtrHeight->save_value();
+                    if (mbMtrHeightBlanked)
+                    {
+                        mxMtrHeight->reformat();
+                        mbMtrHeightBlanked = false;
+                    }
                     break;
                 }
             }
@@ -558,11 +574,17 @@ void PosSizePropertyPanel::NotifyItemUpdate(
                     SetMetricValue( *mxMtrPosX, nTmp, mePoolUnit );
                     limitWidth(*mxMtrPosX);
                     mxMtrPosX->save_value();
+                    if (mbMtrPosXBlanked)
+                    {
+                        mxMtrPosX->reformat();
+                        mbMtrPosXBlanked = false;
+                    }
                     break;
                 }
             }
 
             mxMtrPosX->set_text( "" );
+            mbMtrPosXBlanked = true;
             break;
 
         case SID_ATTR_TRANSFORM_POS_Y:
@@ -577,11 +599,17 @@ void PosSizePropertyPanel::NotifyItemUpdate(
                     SetMetricValue( *mxMtrPosY, nTmp, mePoolUnit );
                     limitWidth(*mxMtrPosY);
                     mxMtrPosY->save_value();
+                    if (mbMtrPosYBlanked)
+                    {
+                        mxMtrPosY->reformat();
+                        mbMtrPosYBlanked = false;
+                    }
                     break;
                 }
             }
 
             mxMtrPosY->set_text( "" );
+            mbMtrPosYBlanked = true;
             break;
 
         case SID_ATTR_TRANSFORM_ROT_X:
@@ -678,11 +706,18 @@ void PosSizePropertyPanel::NotifyItemUpdate(
                     mxMtrAngle->set_value(nTmp.get(), FieldUnit::DEGREE);
                     mxCtrlDial->SetRotation(nTmp);
 
+                    if (mbMtrAngleBlanked)
+                    {
+                        mxMtrAngle->reformat();
+                        mbMtrAngleBlanked = false;
+                    }
+
                     break;
                 }
             }
 
             mxMtrAngle->set_text( "" );
+            mbMtrAngleBlanked = true;
             mxCtrlDial->SetRotation( 0_deg100 );
             break;
 
@@ -877,28 +912,40 @@ void PosSizePropertyPanel::MetricState(SfxItemState 
eState, const SfxPoolItem* p
     if (mxMtrPosX->get_text().isEmpty())
         bPosXBlank = true;
     SetFieldUnit( *mxMtrPosX, meDlgUnit, true );
-    if(bPosXBlank)
+    if (bPosXBlank)
+    {
         mxMtrPosX->set_text(OUString());
+        mbMtrPosXBlanked = true;
+    }
 
     if (mxMtrPosY->get_text().isEmpty())
         bPosYBlank = true;
     SetFieldUnit( *mxMtrPosY, meDlgUnit, true );
-    if(bPosYBlank)
+    if (bPosYBlank)
+    {
         mxMtrPosY->set_text(OUString());
+        mbMtrPosYBlanked = true;
+    }
 
     SetPosSizeMinMax(rUIScale);
 
     if (mxMtrWidth->get_text().isEmpty())
         bWidthBlank = true;
     SetFieldUnit( *mxMtrWidth, meDlgUnit, true );
-    if(bWidthBlank)
+    if (bWidthBlank)
+    {
         mxMtrWidth->set_text(OUString());
+        mbMtrWidthBlanked = true;
+    }
 
     if (mxMtrHeight->get_text().isEmpty())
         bHeightBlank = true;
     SetFieldUnit( *mxMtrHeight, meDlgUnit, true );
-    if(bHeightBlank)
+    if (bHeightBlank)
+    {
         mxMtrHeight->set_text(OUString());
+        mbMtrHeightBlanked = true;
+    }
 }
 
 
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx 
b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
index b57d0bcf7dde..b2a60175ddb8 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.hxx
@@ -154,6 +154,12 @@ private:
     bool                                    mbAutoHeight : 1;
     bool                                    mbAdjustEnabled : 1;
 
+    bool                                    mbMtrPosXBlanked : 1;
+    bool                                    mbMtrPosYBlanked : 1;
+    bool                                    mbMtrWidthBlanked : 1;
+    bool                                    mbMtrHeightBlanked : 1;
+    bool                                    mbMtrAngleBlanked : 1;
+
     css::uno::Reference<css::ui::XSidebar> mxSidebar;
 
     DECL_LINK( ChangePosXHdl, weld::MetricSpinButton&, void );

Reply via email to