[Libreoffice-commits] core.git: sw/source

Caolán McNamara caolanm at redhat.com
Wed Jan 7 04:40:28 PST 2015


 sw/source/ui/frmdlg/column.cxx  |   56 +++++++++++++++++++++++++++++-----------
 sw/source/uibase/inc/column.hxx |    2 -
 2 files changed, 42 insertions(+), 16 deletions(-)

New commits:
commit 8c59f319a712a515c6cad539afc2144e19bd006d
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Jan 7 11:34:30 2015 +0000

    Resolves: fdo#87612 don't overwrite users input if the value is unchanged
    
    so you can enter values without them getting auto-expanded to their canonical
    form as you're typing them and having the insertion point jump to the start
    causing real confusion. But retain the improvement of fdo#61704 where the value
    is set when modified so clicking "ok" without leaving the field works as
    expected
    
    Change-Id: I786b53c2717e232b36e7cc95d99c98aa1f2cd44e

diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx
index d616f06..46747c9 100644
--- a/sw/source/ui/frmdlg/column.cxx
+++ b/sw/source/ui/frmdlg/column.cxx
@@ -815,7 +815,7 @@ void SwColumnPage::Init()
     }
 
     UpdateCols();
-    Update();
+    Update(NULL);
 
         // set maximum number of columns
         // values below 1 are not allowed
@@ -947,7 +947,7 @@ IMPL_LINK( SwColumnPage, ColModify, NumericField *, pNF )
         SetLabels( nFirstVis );
         UpdateCols();
         ResetColWidth();
-        Update();
+        Update(NULL);
     }
 
     return 0;
@@ -1022,7 +1022,7 @@ IMPL_LINK( SwColumnPage, GapModify, MetricField*, pMetricFld )
         }
 
     }
-    Update();
+    Update(pMetricFld);
     return 0;
 }
 
@@ -1050,7 +1050,7 @@ IMPL_LINK( SwColumnPage, AutoWidthHdl, CheckBox *, pBox )
     }
     pColMgr->SetAutoWidth(pBox->IsChecked(), sal_uInt16(nDist));
     UpdateCols();
-    Update();
+    Update(NULL);
     return 0;
 }
 
@@ -1061,7 +1061,7 @@ IMPL_LINK_NOARG(SwColumnPage, Up)
     {
         --nFirstVis;
         SetLabels( nFirstVis );
-        Update();
+        Update(NULL);
     }
     return 0;
 }
@@ -1073,7 +1073,7 @@ IMPL_LINK_NOARG(SwColumnPage, Down)
     {
         ++nFirstVis;
         SetLabels( nFirstVis );
-        Update();
+        Update(NULL);
     }
     return 0;
 }
@@ -1082,7 +1082,8 @@ IMPL_LINK_NOARG(SwColumnPage, Down)
 // an alteration of the column width or the column gap.
 void SwColumnPage::Timeout()
 {
-    if(pModifiedField)
+    PercentField *pField = pModifiedField;
+    if (pModifiedField)
     {
             // find the changed column
         sal_uInt16 nChanged = nFirstVis;
@@ -1118,22 +1119,47 @@ void SwColumnPage::Timeout()
         nColWidth[nChanged] = nNewWidth;
         pModifiedField = 0;
     }
-    Update();
+
+    Update(pField ? pField->get() : NULL);
 }
 
 // Update the view
-void SwColumnPage::Update()
+void SwColumnPage::Update(MetricField *pInteractiveField)
 {
     m_pBalanceColsCB->Enable(nCols > 1);
     if(nCols >= 2)
     {
-        aEd1.SetPrcntValue(aEd1.NormalizePercent(nColWidth[nFirstVis]), FUNIT_TWIP);
-        aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nColDist[nFirstVis]), FUNIT_TWIP);
-        aEd2.SetPrcntValue(aEd2.NormalizePercent(nColWidth[nFirstVis + 1]), FUNIT_TWIP);
+        sal_Int64 nCurrentValue, nNewValue;
+
+        nCurrentValue = aEd1.NormalizePercent(aEd1.DenormalizePercent(aEd1.GetValue(FUNIT_TWIP)));
+        nNewValue = aEd1.NormalizePercent(nColWidth[nFirstVis]);
+
+        //fdo#87612 if we're interacting with this widget and the value will be the same
+        //then leave it alone (i.e. don't change equivalent values of e.g. .8 -> 0.8)
+        if (nNewValue != nCurrentValue || pInteractiveField != aEd1.get())
+            aEd1.SetPrcntValue(nNewValue, FUNIT_TWIP);
+
+        nCurrentValue = aDistEd1.NormalizePercent(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
+        nNewValue = aDistEd1.NormalizePercent(nColDist[nFirstVis]);
+        if (nNewValue != nCurrentValue || pInteractiveField != aDistEd1.get())
+            aDistEd1.SetPrcntValue(nNewValue, FUNIT_TWIP);
+
+        nCurrentValue = aEd2.NormalizePercent(aEd2.DenormalizePercent(aEd2.GetValue(FUNIT_TWIP)));
+        nNewValue = aEd2.NormalizePercent(nColWidth[nFirstVis+1]);
+        if (nNewValue != nCurrentValue || pInteractiveField != aEd2.get())
+            aEd2.SetPrcntValue(nNewValue, FUNIT_TWIP);
+
         if(nCols >= 3)
         {
-            aDistEd2.SetPrcntValue(aDistEd2.NormalizePercent(nColDist[nFirstVis + 1]), FUNIT_TWIP);
-            aEd3.SetPrcntValue(aEd3.NormalizePercent(nColWidth[nFirstVis + 2]), FUNIT_TWIP);
+            nCurrentValue = aDistEd2.NormalizePercent(aDistEd2.DenormalizePercent(aDistEd2.GetValue(FUNIT_TWIP)));
+            nNewValue = aDistEd2.NormalizePercent(nColDist[nFirstVis+1]);
+            if (nNewValue != nCurrentValue || pInteractiveField != aDistEd2.get())
+                aDistEd2.SetPrcntValue(nNewValue, FUNIT_TWIP);
+
+            nCurrentValue = aEd3.NormalizePercent(aEd3.DenormalizePercent(aEd3.GetValue(FUNIT_TWIP)));
+            nNewValue = aEd3.NormalizePercent(nColWidth[nFirstVis+2]);
+            if (nNewValue != nCurrentValue || pInteractiveField != aEd3.get())
+                aEd3.SetPrcntValue(nNewValue, FUNIT_TWIP);
         }
         else
         {
@@ -1224,7 +1250,7 @@ void SwColumnPage::ActivatePage(const SfxItemSet& rSet)
         aDistEd1.SetMetricFieldMin(0);
         aDistEd2.SetMetricFieldMin(0);
     }
-    Update();
+    Update(NULL);
 }
 
 int SwColumnPage::DeactivatePage(SfxItemSet *_pSet)
diff --git a/sw/source/uibase/inc/column.hxx b/sw/source/uibase/inc/column.hxx
index d9b2397..e3a6fd4 100644
--- a/sw/source/uibase/inc/column.hxx
+++ b/sw/source/uibase/inc/column.hxx
@@ -151,7 +151,7 @@ class SwColumnPage : public SfxTabPage
     void Apply(Button *);
     void Timeout();
 
-    void            Update();
+    void            Update(MetricField *pInteractiveField);
     void            UpdateCols();
     void            Init();
     void            ResetColWidth();


More information about the Libreoffice-commits mailing list