weld EditControl for browsebox

Change-Id: I8f21c12f7ee10e1b9ba883a8ff01bb5252429f09
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97353
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/chart2/source/controller/dialogs/DataBrowser.cxx b/chart2/source/controller/dialogs/DataBrowser.cxx
index 0aaccde..a693b14 100644
--- a/chart2/source/controller/dialogs/DataBrowser.cxx
+++ b/chart2/source/controller/dialogs/DataBrowser.cxx
@@ -498,7 +498,7 @@ DataBrowser::DataBrowser(const css::uno::Reference<css::awt::XWindow> &rParent,
    m_bIsReadOnly( false ),
    m_bDataValid( true ),
    m_aNumberEditField( VclPtr<FormattedField>::Create( & EditBrowseBox::GetDataWindow(), WB_NOBORDER ) ),
    m_aTextEditField( VclPtr<Edit>::Create( & EditBrowseBox::GetDataWindow(), WB_NOBORDER ) ),
    m_aTextEditField(VclPtr<EditControl>::Create(&EditBrowseBox::GetDataWindow())),
    m_pColumnsWin(pColumns),
    m_pColorsWin(pColors),
    m_rNumberEditController( new ::svt::FormattedFieldCellController( m_aNumberEditField.get() )),
@@ -1128,8 +1128,9 @@ void DataBrowser::InitController(
    if( rController == m_rTextEditController )
    {
        OUString aText( GetCellText( nRow, nCol ) );
        m_aTextEditField->SetText( aText );
        m_aTextEditField->SetSelection( ::Selection( 0, aText.getLength() ));
        weld::Entry& rEntry = m_aTextEditField->get_widget();
        rEntry.set_text(aText);
        rEntry.select_region(0, -1);
    }
    else if( rController == m_rNumberEditController )
    {
@@ -1210,7 +1211,8 @@ bool DataBrowser::SaveModified()
        break;
        case DataBrowserModel::TEXTORDATE:
        {
            OUString aText( m_aTextEditField->GetText() );
            weld::Entry& rEntry = m_aTextEditField->get_widget();
            OUString aText(rEntry.get_text());
            double fValue = 0.0;
            bChangeValid = false;
            if( isDateTimeString( aText, fValue ) )
@@ -1221,7 +1223,8 @@ bool DataBrowser::SaveModified()
        break;
        case DataBrowserModel::TEXT:
        {
            OUString aText( m_aTextEditField->GetText());
            weld::Entry& rEntry = m_aTextEditField->get_widget();
            OUString aText(rEntry.get_text());
            bChangeValid = m_apDataBrowserModel->setCellText( nCol, nRow, aText );
        }
        break;
@@ -1233,7 +1236,7 @@ bool DataBrowser::SaveModified()
        RowModified( GetCurRow(), GetCurColumnId());
        ::svt::CellController* pCtrl = GetController( GetCurRow(), GetCurColumnId());
        if( pCtrl )
            pCtrl->ClearModified();
            pCtrl->SaveValue();
    }

    return bChangeValid;
diff --git a/chart2/source/controller/dialogs/DataBrowser.hxx b/chart2/source/controller/dialogs/DataBrowser.hxx
index 8e6372b..7f21338 100644
--- a/chart2/source/controller/dialogs/DataBrowser.hxx
+++ b/chart2/source/controller/dialogs/DataBrowser.hxx
@@ -161,7 +161,7 @@ private:
    bool                m_bDataValid;

    VclPtr<FormattedField>      m_aNumberEditField;
    VclPtr<Edit>                m_aTextEditField;
    VclPtr<svt::EditControl>    m_aTextEditField;
    weld::Container*            m_pColumnsWin;
    weld::Container*            m_pColorsWin;

diff --git a/dbaccess/source/ui/browser/brwctrlr.cxx b/dbaccess/source/ui/browser/brwctrlr.cxx
index 4fb8477..c6a414a 100644
--- a/dbaccess/source/ui/browser/brwctrlr.cxx
+++ b/dbaccess/source/ui/browser/brwctrlr.cxx
@@ -1942,7 +1942,6 @@ void SbaXDataBrowserController::Execute(sal_uInt16 nId, const Sequence< Property
            }
            if (ID_BROWSER_CUT == nId || ID_BROWSER_PASTE == nId)
            {
                xCurrentController->SetModified();
                rEdit.Modify();
            }
        }
diff --git a/dbaccess/source/ui/browser/sbagrid.cxx b/dbaccess/source/ui/browser/sbagrid.cxx
index b035a9e..2089f5d 100644
--- a/dbaccess/source/ui/browser/sbagrid.cxx
+++ b/dbaccess/source/ui/browser/sbagrid.cxx
@@ -1219,7 +1219,7 @@ sal_Int8 SbaGridControl::AcceptDrop( const BrowserAcceptDropEvent& rEvt )
            break;

        CellControllerRef xCurrentController = Controller();
        if (xCurrentController.is() && xCurrentController->IsModified() && ((nRow != GetCurRow()) || (nCol != GetCurColumnId())))
        if (xCurrentController.is() && xCurrentController->IsValueChangedFromSaved() && ((nRow != GetCurRow()) || (nCol != GetCurColumnId())))
            // the current controller is modified and the user wants to drop in another cell -> no chance
            // (when leaving the modified cell an error may occur - this is deadly while dragging)
            break;
@@ -1320,9 +1320,8 @@ sal_Int8 SbaGridControl::ExecuteDrop( const BrowserExecuteDropEvent& rEvt )
            return DND_ACTION_NONE;

        rEdit.SetText( sDropped );
        xCurrentController->SetModified();
        // SetText itself doesn't call a Modify as it isn't a user interaction
        rEdit.Modify();
            // SetText itself doesn't call a Modify as it isn't a user interaction

        return DND_ACTION_COPY;
    }
diff --git a/dbaccess/source/ui/control/TableGrantCtrl.cxx b/dbaccess/source/ui/control/TableGrantCtrl.cxx
index 373340a..729106e 100644
--- a/dbaccess/source/ui/control/TableGrantCtrl.cxx
+++ b/dbaccess/source/ui/control/TableGrantCtrl.cxx
@@ -136,9 +136,10 @@ void OTableGrantControl::Init()
        m_pCheckCell    = VclPtr<CheckBoxControl>::Create( &GetDataWindow() );
        m_pCheckCell->GetBox().EnableTriState(false);

        m_pEdit         = VclPtr<Edit>::Create( &GetDataWindow() );
        m_pEdit->SetReadOnly();
        m_pEdit->Enable(false);
        m_pEdit = VclPtr<EditControl>::Create(&GetDataWindow());
        weld::Entry& rEntry = m_pEdit->get_widget();
        rEntry.set_editable(false);
        rEntry.set_sensitive(false);
    }

    UpdateTables();
@@ -250,7 +251,7 @@ bool OTableGrantControl::SaveModified()
        ::dbtools::showError(::dbtools::SQLExceptionInfo(e),VCLUnoHelper::GetInterface(GetParent()),m_xContext);
    }
    if(bErg && Controller().is())
        Controller()->ClearModified();
        Controller()->SaveValue();
    if(!bErg)
        UpdateTables();

@@ -275,7 +276,7 @@ void OTableGrantControl::InitController( CellControllerRef& /*rController*/, lon
    OUString sTablename = m_aTableNames[nRow];
    // special case for tablename
    if(nColumnId == COL_TABLE_NAME)
        m_pEdit->SetText(sTablename);
        m_pEdit->get_widget().set_text(sTablename);
    else
    {
        // get the privileges from the user
diff --git a/dbaccess/source/ui/inc/TableGrantCtrl.hxx b/dbaccess/source/ui/inc/TableGrantCtrl.hxx
index 7f7062f..e15e08e 100644
--- a/dbaccess/source/ui/inc/TableGrantCtrl.hxx
+++ b/dbaccess/source/ui/inc/TableGrantCtrl.hxx
@@ -51,8 +51,8 @@ class OTableGrantControl : public ::svt::EditBrowseBox

    mutable TTablePrivilegeMap  m_aPrivMap;
    OUString                    m_sUserName;
    VclPtr< ::svt::CheckBoxControl>     m_pCheckCell;
    VclPtr<Edit>                        m_pEdit;
    VclPtr<::svt::CheckBoxControl> m_pCheckCell;
    VclPtr<::svt::EditControl> m_pEdit;
    long                        m_nDataPos;
    ImplSVEvent *               m_nDeactivateEvent;

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index f0e221f..ecdd09b 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -119,7 +119,7 @@ OSelectionBrowseBox::OSelectionBrowseBox( vcl::Window* pParent )
                |   BrowserMode::HLINES      | BrowserMode::VLINES
                |   BrowserMode::HEADERBAR_NEW   ;

    m_pTextCell     = VclPtr<Edit>::Create(&GetDataWindow(), 0);
    m_pTextCell     = VclPtr<EditControl>::Create(&GetDataWindow());
    m_pVisibleCell  = VclPtr<CheckBoxControl>::Create(&GetDataWindow());
    m_pTableCell    = VclPtr<ListBoxControl>::Create(&GetDataWindow());
    m_pFieldCell    = VclPtr<ComboBoxControl>::Create(&GetDataWindow());
@@ -554,7 +554,7 @@ void OSelectionBrowseBox::InitController(CellControllerRef& /*rController*/, lon
            setTextCellContext(pEntry,pEntry->GetCriteria( nIdx ),HID_QRYDGN_ROW_CRIT);
        }
    }
    Controller()->ClearModified();
    Controller()->SaveValue();
}

void OSelectionBrowseBox::notifyTableFieldChanged(const OUString& _sOldAlias, const OUString& _sAlias, bool& _bListAction, sal_uInt16 _nColumnId)
@@ -904,7 +904,7 @@ bool OSelectionBrowseBox::SaveModified()
    bool bError         = false;
    bool bListAction    = false;

    if (pEntry.is() && Controller().is() && Controller()->IsModified())
    if (pEntry.is() && Controller().is() && Controller()->IsValueChangedFromSaved())
    {
        // for the Undo-action
        OUString strOldCellContents,sNewValue;
@@ -1038,7 +1038,7 @@ bool OSelectionBrowseBox::SaveModified()

            case BROW_COLUMNALIAS_ROW:
                strOldCellContents = pEntry->GetFieldAlias();
                pEntry->SetFieldAlias(m_pTextCell->GetText());
                pEntry->SetFieldAlias(m_pTextCell->get_widget().get_text());
                sNewValue = pEntry->GetFieldAlias();
                break;
            case BROW_FUNCTION_ROW:
@@ -1090,7 +1090,7 @@ bool OSelectionBrowseBox::SaveModified()
                    break;

                sal_uInt16  nIdx = sal_uInt16(nRow - BROW_CRIT1_ROW);
                OUString aText = comphelper::string::stripStart(m_pTextCell->GetText(), ' ');
                OUString aText = comphelper::string::stripStart(m_pTextCell->get_widget().get_text(), ' ');

                OUString aCrit;
                if(!aText.isEmpty())
@@ -1176,7 +1176,7 @@ bool OSelectionBrowseBox::SaveModified()
            }
        }
        if( !bError && Controller().is() )
            Controller()->ClearModified();
            Controller()->SaveValue();

        RowModified(GetCurRow(), GetCurColumnId());

@@ -2367,8 +2367,12 @@ bool OSelectionBrowseBox::isCutAllowed() const
            break;
        }
        default:
            bCutAllowed = !m_pTextCell->GetSelected().isEmpty();
        {
            weld::Entry& rEntry = m_pTextCell->get_widget();
            int nStartPos, nEndPos;
            bCutAllowed = rEntry.get_selection_bounds(nStartPos, nEndPos);
            break;
        }
    }
    return bCutAllowed;
}
@@ -2385,8 +2389,10 @@ void OSelectionBrowseBox::cut()
            break;
        }
        default:
            m_pTextCell->Cut();
            m_pTextCell->SetModifyFlag();
        {
            weld::Entry& rEntry = m_pTextCell->get_widget();
            rEntry.cut_clipboard();
        }
    }
    SaveModified();
    RowModified(GetBrowseRow(nRow), GetCurColumnId());
@@ -2406,8 +2412,11 @@ void OSelectionBrowseBox::paste()
            break;
        }
        default:
            m_pTextCell->Paste();
            m_pTextCell->SetModifyFlag();
        {
            weld::Entry& rEntry = m_pTextCell->get_widget();
            rEntry.paste_clipboard();
            break;
        }
    }
    RowModified(GetBrowseRow(nRow), GetCurColumnId());
    invalidateUndoRedo();
@@ -2446,7 +2455,11 @@ void OSelectionBrowseBox::copy()
            break;
        }
        default:
            m_pTextCell->Copy();
        {
            weld::Entry& rEntry = m_pTextCell->get_widget();
            rEntry.copy_clipboard();
            break;
        }
    }
}

@@ -2514,8 +2527,9 @@ void OSelectionBrowseBox::enableControl(const OTableFieldDescRef& _rEntry,Window

void OSelectionBrowseBox::setTextCellContext(const OTableFieldDescRef& _rEntry,const OUString& _sText,const OString& _sHelpId)
{
    m_pTextCell->SetText(_sText);
    m_pTextCell->ClearModifyFlag();
    weld::Entry& rEntry = m_pTextCell->get_widget();
    rEntry.set_text(_sText);
    rEntry.save_value();
    if (!m_pTextCell->HasFocus())
        m_pTextCell->GrabFocus();

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
index 1668b49..325554b 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
@@ -55,7 +55,7 @@ namespace dbaui

        long                                m_nSeekRow;
        BrowserMode                         m_nMode;                    // remember the BrowseModes
        VclPtr<Edit>                               m_pTextCell;
        VclPtr< ::svt::EditControl>                 m_pTextCell;
        VclPtr< ::svt::CheckBoxControl>             m_pVisibleCell;
        VclPtr< ::svt::ComboBoxControl>             m_pFieldCell;
        VclPtr< ::svt::ListBoxControl>              m_pFunctionCell;
diff --git a/dbaccess/source/ui/tabledesign/TEditControl.cxx b/dbaccess/source/ui/tabledesign/TEditControl.cxx
index 6f5128f..ee2cb2c 100644
--- a/dbaccess/source/ui/tabledesign/TEditControl.cxx
+++ b/dbaccess/source/ui/tabledesign/TEditControl.cxx
@@ -211,11 +211,11 @@ void OTableEditorCtrl::InitCellController()
    pTypeCell = VclPtr<ListBoxControl>::Create( &GetDataWindow() );

    // Cell description
    pDescrCell = VclPtr<Edit>::Create( &GetDataWindow(), WB_LEFT );
    pDescrCell->SetMaxTextLen( MAX_DESCR_LEN );
    pDescrCell = VclPtr<EditControl>::Create(&GetDataWindow());
    pDescrCell->get_widget().set_max_length(MAX_DESCR_LEN);

    pHelpTextCell = VclPtr<Edit>::Create( &GetDataWindow(), WB_LEFT );
    pHelpTextCell->SetMaxTextLen( MAX_DESCR_LEN );
    pHelpTextCell = VclPtr<EditControl>::Create(&GetDataWindow());
    pHelpTextCell->get_widget().set_max_length(MAX_DESCR_LEN);

    pNameCell->SetHelpId(HID_TABDESIGN_NAMECELL);
    pTypeCell->SetHelpId(HID_TABDESIGN_TYPECELL);
@@ -238,8 +238,8 @@ void OTableEditorCtrl::InitCellController()
void OTableEditorCtrl::ClearModified()
{
    pNameCell->ClearModifyFlag();
    pDescrCell->ClearModifyFlag();
    pHelpTextCell->ClearModifyFlag();
    pDescrCell->get_widget().save_value();
    pHelpTextCell->get_widget().save_value();
    pTypeCell->get_widget().save_value();
}

@@ -379,18 +379,23 @@ void OTableEditorCtrl::InitController(CellControllerRef&, long nRow, sal_uInt16 

            break;
        case HELP_TEXT:
        {
            if( pActFieldDescr )
                aInitString = pActFieldDescr->GetHelpText();
            pHelpTextCell->SetText( aInitString );
            pHelpTextCell->SaveValue();
            weld::Entry& rEntry = pHelpTextCell->get_widget();
            rEntry.set_text(aInitString);
            rEntry.save_value();
            break;
        }
        case COLUMN_DESCRIPTION:
        {
            if( pActFieldDescr )
                aInitString = pActFieldDescr->GetDescription();
            pDescrCell->SetText( aInitString );
            pDescrCell->SaveValue();
            weld::Entry& rEntry = pDescrCell->get_widget();
            rEntry.set_text(aInitString);
            rEntry.save_value();
            break;

        }
    }
}

@@ -526,25 +531,27 @@ void OTableEditorCtrl::SaveData(long nRow, sal_uInt16 nColId)
        case HELP_TEXT:
        {
            // if the current field description is NULL, set Default
            weld::Entry& rEntry = pHelpTextCell->get_widget();
            if( !pActFieldDescr )
            {
                pHelpTextCell->SetText(OUString());
                pHelpTextCell->ClearModifyFlag();
                rEntry.set_text(OUString());
                rEntry.save_value();
            }
            else
                pActFieldDescr->SetHelpText( pHelpTextCell->GetText() );
                pActFieldDescr->SetHelpText(rEntry.get_text());
            break;
        }
        case COLUMN_DESCRIPTION:
        {
            // Set the default if the field description is null
            weld::Entry& rEntry = pDescrCell->get_widget();
            if( !pActFieldDescr )
            {
                pDescrCell->SetText(OUString());
                pDescrCell->ClearModifyFlag();
                rEntry.set_text(OUString());
                rEntry.save_value();
            }
            else
                pActFieldDescr->SetDescription( pDescrCell->GetText() );
                pActFieldDescr->SetDescription(rEntry.get_text());
            break;
        }
        case FIELD_PROPERTY_DEFAULT:
@@ -670,9 +677,6 @@ void OTableEditorCtrl::CellModified( long nRow, sal_uInt16 nColId )
    // SaveData could create an undo action as well
    GetUndoManager().LeaveListAction();
    RowModified(nRow);
    CellControllerRef xController(Controller());
    if(xController.is())
        xController->SetModified();

    // Set the Modify flag
    GetView()->getController().setModified( true );
@@ -1075,16 +1079,23 @@ bool OTableEditorCtrl::IsCutAllowed()
    bool bIsCutAllowed = (GetView()->getController().isAddAllowed() && GetView()->getController().isDropAllowed()) ||
                            GetView()->getController().isAlterAllowed();

    if(bIsCutAllowed)
    if (bIsCutAllowed)
    {
        int nStartPos, nEndPos;
        switch(m_eChildFocus)
        {
            case DESCRIPTION:
                bIsCutAllowed = !pDescrCell->GetSelected().isEmpty();
            {
                weld::Entry& rEntry = pDescrCell->get_widget();
                bIsCutAllowed = rEntry.get_selection_bounds(nStartPos, nEndPos);
                break;
            }
            case HELPTEXT:
                bIsCutAllowed = !pHelpTextCell->GetSelected().isEmpty();
            {
                weld::Entry& rEntry = pHelpTextCell->get_widget();
                bIsCutAllowed = rEntry.get_selection_bounds(nStartPos, nEndPos);
                break;
            }
            case NAME:
                bIsCutAllowed = !pNameCell->GetSelected().isEmpty();
                break;
@@ -1103,10 +1114,17 @@ bool OTableEditorCtrl::IsCutAllowed()
bool OTableEditorCtrl::IsCopyAllowed()
{
    bool bIsCopyAllowed = false;
    if(m_eChildFocus == DESCRIPTION )
        bIsCopyAllowed = !pDescrCell->GetSelected().isEmpty();
    int nStartPos, nEndPos;
    if (m_eChildFocus == DESCRIPTION )
    {
        weld::Entry& rEntry = pDescrCell->get_widget();
        bIsCopyAllowed = rEntry.get_selection_bounds(nStartPos, nEndPos);
    }
    else if(HELPTEXT == m_eChildFocus )
        bIsCopyAllowed = !pHelpTextCell->GetSelected().isEmpty();
    {
        weld::Entry& rEntry = pHelpTextCell->get_widget();
        bIsCopyAllowed = rEntry.get_selection_bounds(nStartPos, nEndPos);
    }
    else if(m_eChildFocus == NAME)
        bIsCopyAllowed = !pNameCell->GetSelected().isEmpty();
    else if(m_eChildFocus == ROW)
@@ -1165,7 +1183,7 @@ void OTableEditorCtrl::cut()
        if(GetView()->getController().isAlterAllowed())
        {
            SaveData(-1,COLUMN_DESCRIPTION);
            pDescrCell->Cut();
            pDescrCell->get_widget().cut_clipboard();
            CellModified(-1,COLUMN_DESCRIPTION);
        }
    }
@@ -1174,7 +1192,7 @@ void OTableEditorCtrl::cut()
        if(GetView()->getController().isAlterAllowed())
        {
            SaveData(-1,HELP_TEXT);
            pHelpTextCell->Cut();
            pHelpTextCell->get_widget().cut_clipboard();
            CellModified(-1,HELP_TEXT);
        }
    }
@@ -1193,9 +1211,15 @@ void OTableEditorCtrl::copy()
    else if(m_eChildFocus == NAME)
        pNameCell->Copy();
    else if(HELPTEXT == m_eChildFocus )
        pHelpTextCell->Copy();
    {
        weld::Entry& rEntry = pHelpTextCell->get_widget();
        rEntry.copy_clipboard();
    }
    else if(m_eChildFocus == DESCRIPTION )
        pDescrCell->Copy();
    {
        weld::Entry& rEntry = pDescrCell->get_widget();
        rEntry.copy_clipboard();
    }
}

void OTableEditorCtrl::paste()
@@ -1219,7 +1243,7 @@ void OTableEditorCtrl::paste()
    {
        if(GetView()->getController().isAlterAllowed())
        {
            pHelpTextCell->Paste();
            pHelpTextCell->get_widget().paste_clipboard();
            CellModified();
        }
    }
@@ -1227,7 +1251,7 @@ void OTableEditorCtrl::paste()
    {
        if(GetView()->getController().isAlterAllowed())
        {
            pDescrCell->Paste();
            pDescrCell->get_widget().paste_clipboard();
            CellModified();
        }
    }
diff --git a/dbaccess/source/ui/tabledesign/TEditControl.hxx b/dbaccess/source/ui/tabledesign/TEditControl.hxx
index 44469bf..69039f3 100644
--- a/dbaccess/source/ui/tabledesign/TEditControl.hxx
+++ b/dbaccess/source/ui/tabledesign/TEditControl.hxx
@@ -45,9 +45,9 @@ namespace dbaui
        std::vector< std::shared_ptr<OTableRow> >*    m_pRowList;

        VclPtr<OSQLNameEdit>               pNameCell;
        VclPtr< ::svt::ListBoxControl>      pTypeCell;
        VclPtr<Edit>                       pHelpTextCell;
        VclPtr<Edit>                       pDescrCell;
        VclPtr<::svt::ListBoxControl>      pTypeCell;
        VclPtr<::svt::EditControl>         pHelpTextCell;
        VclPtr<::svt::EditControl>         pDescrCell;
        VclPtr<OTableFieldDescWin>         pDescrWin;          // properties of one column

         std::shared_ptr<OTableRow> pActRow;
diff --git a/dbaccess/source/ui/tabledesign/TableUndo.cxx b/dbaccess/source/ui/tabledesign/TableUndo.cxx
index 3824880..6cb71bc 100644
--- a/dbaccess/source/ui/tabledesign/TableUndo.cxx
+++ b/dbaccess/source/ui/tabledesign/TableUndo.cxx
@@ -89,7 +89,7 @@ void OTableDesignCellUndoAct::Undo()
    {
        CellControllerRef xController = m_pTabDgnCtrl->Controller();
        if ( xController.is() )
            xController->ClearModified();
            xController->SaveValue();
        m_pTabDgnCtrl->GetView()->getController().setModified(false);

    }
diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx
index ac84f07..73f12c5 100644
--- a/include/svtools/editbrowsebox.hxx
+++ b/include/svtools/editbrowsebox.hxx
@@ -29,6 +29,7 @@

#include <svtools/brwbox.hxx>
#include <svtools/brwhead.hxx>
#include <tools/lineend.hxx>
#include <vcl/InterimItemWindow.hxx>
#include <vcl/vclmedit.hxx>
#include <o3tl/typed_flags_set.hxx>
@@ -93,9 +94,8 @@ namespace svt

        Control& GetWindow() const { return *const_cast< CellController* >( this )->pWindow; }

        virtual void SetModified();
        virtual void ClearModified() = 0;
        virtual bool IsModified() const = 0;
        virtual void SaveValue() = 0;
        virtual bool IsValueChangedFromSaved() const = 0;

        // commit any current changes. Especially, do any reformatting you need (from input formatting
        // to output formatting) here
@@ -140,9 +140,8 @@ namespace svt
        virtual void                ReplaceSelected( const OUString& _rStr ) = 0;
        virtual OUString            GetSelected( LineEnd aSeparator ) const = 0;

        virtual void                SetModified() = 0;
        virtual bool                IsModified() const = 0;
        virtual void                ClearModified() = 0;
        virtual bool                IsValueChangedFromSaved() const = 0;
        virtual void                SaveValue() = 0;
        virtual void                SetModifyHdl( const Link<LinkParamNone*,void>& _rLink ) = 0;
    };

@@ -177,12 +176,127 @@ namespace svt
        virtual void                ReplaceSelected( const OUString& _rStr ) override;
        virtual OUString            GetSelected( LineEnd aSeparator ) const override;

        virtual void                SetModified() override;
        virtual bool                IsModified() const override;
        virtual void                ClearModified() override;
        virtual bool                IsValueChangedFromSaved() const override;
        virtual void                SaveValue() override;
        virtual void                SetModifyHdl( const Link<LinkParamNone*,void>& _rLink ) override;
    };

    class SVT_DLLPUBLIC EditControl final : public InterimItemWindow
    {
    public:
        EditControl(vcl::Window* pParent);

        virtual void dispose() override;

        virtual void GetFocus() override
        {
            if (m_xWidget)
                m_xWidget->grab_focus();
            InterimItemWindow::GetFocus();
        }

        weld::Entry& get_widget() { return *m_xWidget; }

    private:
        std::unique_ptr<weld::Entry> m_xWidget;

        DECL_LINK(KeyInputHdl, const KeyEvent&, bool);
    };

    class SVT_DLLPUBLIC EntryImplementation : public IEditImplementation
    {
        EditControl& m_rEdit;
        int m_nMaxTextLen;
        Link<LinkParamNone*,void> m_aModifyHdl;

        DECL_LINK(ModifyHdl, weld::Entry&, void);
    public:
        EntryImplementation(EditControl& rEdit)
            : m_rEdit(rEdit)
            , m_nMaxTextLen(EDIT_NOLIMIT)
        {
            m_rEdit.get_widget().connect_changed(LINK(this, EntryImplementation, ModifyHdl));
        }

        virtual Control& GetControl() override
        {
            return m_rEdit;
        }

        virtual OUString GetText( LineEnd /*aSeparator*/ ) const override
        {
            // ignore the line end - this base implementation does not support it
            return m_rEdit.get_widget().get_text();
        }

        virtual void SetText( const OUString& _rStr ) override
        {
            return m_rEdit.get_widget().set_text(_rStr);
        }

        virtual bool IsReadOnly() const override
        {
            return !m_rEdit.get_widget().get_editable();
        }

        virtual void SetReadOnly( bool bReadOnly ) override
        {
            m_rEdit.get_widget().set_editable(!bReadOnly);
        }

        virtual sal_Int32 GetMaxTextLen() const override
        {
            return m_nMaxTextLen;
        }

        virtual void SetMaxTextLen( sal_Int32 nMaxLen ) override
        {
            m_nMaxTextLen = nMaxLen;
            m_rEdit.get_widget().set_max_length(nMaxLen == EDIT_NOLIMIT ? 0 : nMaxLen);
        }

        virtual Selection GetSelection() const override
        {
            int nStartPos, nEndPos;
            m_rEdit.get_widget().get_selection_bounds(nStartPos, nEndPos);
            return Selection(nStartPos, nEndPos);
        }

        virtual void SetSelection( const Selection& rSelection ) override
        {
            m_rEdit.get_widget().select_region(rSelection.Min(), rSelection.Max());
        }

        virtual void ReplaceSelected( const OUString& rStr ) override
        {
            m_rEdit.get_widget().replace_selection(rStr);
        }

        virtual OUString GetSelected( LineEnd /*aSeparator*/ ) const override
            // ignore the line end - this base implementation does not support it
        {
            int nStartPos, nEndPos;
            weld::Entry& rEntry = m_rEdit.get_widget();
            rEntry.get_selection_bounds(nStartPos, nEndPos);
            return rEntry.get_text().copy(nStartPos, nEndPos - nStartPos);
        }

        virtual bool IsValueChangedFromSaved() const override
        {
            return m_rEdit.get_widget().get_value_changed_from_saved();
        }

        virtual void SaveValue() override
        {
            m_rEdit.get_widget().save_value();
        }

        virtual void SetModifyHdl( const Link<LinkParamNone*,void>& rLink ) override
        {
            m_aModifyHdl = rLink;
        }
    };

    #include <svtools/editimplementation.hxx>


@@ -244,15 +358,15 @@ namespace svt

    public:
        EditCellController( Edit* _pEdit );
        EditCellController( EditControl* _pEdit );
        EditCellController( IEditImplementation* _pImplementation );
        virtual ~EditCellController( ) override;

        const IEditImplementation* GetEditImplementation( ) const { return m_pEditImplementation; }
              IEditImplementation* GetEditImplementation( )       { return m_pEditImplementation; }

        virtual void SetModified() override;
        virtual bool IsModified() const override;
        virtual void ClearModified() override;
        virtual bool IsValueChangedFromSaved() const override;
        virtual void SaveValue() override;

    protected:
        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
@@ -270,9 +384,8 @@ namespace svt
        const SpinField& GetSpinWindow() const;
        SpinField& GetSpinWindow();

        virtual void SetModified() override;
        virtual bool IsModified() const override;
        virtual void ClearModified() override;
        virtual bool IsValueChangedFromSaved() const override;
        virtual void SaveValue() override;

    private:
        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
@@ -319,8 +432,8 @@ namespace svt
        CheckBoxCellController(CheckBoxControl* pWin);
        CheckBox& GetCheckBox() const;

        virtual bool IsModified() const override;
        virtual void ClearModified() override;
        virtual bool IsValueChangedFromSaved() const override;
        virtual void SaveValue() override;

    private:
        virtual bool WantMouseEvent() const override;
@@ -335,6 +448,13 @@ namespace svt
    public:
        ComboBoxControl(vcl::Window* pParent);

        virtual void GetFocus() override
        {
            if (m_xWidget)
                m_xWidget->grab_focus();
            InterimItemWindow::GetFocus();
        }

        weld::ComboBox& get_widget() { return *m_xWidget; }

        virtual void dispose() override;
@@ -351,8 +471,8 @@ namespace svt
        ComboBoxCellController(ComboBoxControl* pParent);
        weld::ComboBox& GetComboBox() const { return static_cast<ComboBoxControl&>(GetWindow()).get_widget(); }

        virtual bool IsModified() const override;
        virtual void ClearModified() override;
        virtual bool IsValueChangedFromSaved() const override;
        virtual void SaveValue() override;

    protected:
        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
@@ -368,6 +488,13 @@ namespace svt
    public:
        ListBoxControl(vcl::Window* pParent);

        virtual void GetFocus() override
        {
            if (m_xWidget)
                m_xWidget->grab_focus();
            InterimItemWindow::GetFocus();
        }

        weld::ComboBox& get_widget() { return *m_xWidget; }

        virtual void dispose() override;
@@ -383,8 +510,8 @@ namespace svt
        ListBoxCellController(ListBoxControl* pParent);
        weld::ComboBox& GetListBox() const { return static_cast<ListBoxControl&>(GetWindow()).get_widget(); }

        virtual bool IsModified() const override;
        virtual void ClearModified() override;
        virtual bool IsValueChangedFromSaved() const override;
        virtual void SaveValue() override;

    protected:
        virtual bool MoveAllowed(const KeyEvent& rEvt) const override;
@@ -403,7 +530,6 @@ namespace svt


    //= EditBrowserHeader

    class SVT_DLLPUBLIC EditBrowserHeader : public BrowserHeader
    {
    public:
@@ -416,7 +542,6 @@ namespace svt


    //= EditBrowseBox

    class EditBrowseBoxImpl;
    class SVT_DLLPUBLIC EditBrowseBox: public BrowseBox
    {
@@ -552,7 +677,7 @@ namespace svt
                                            // return sal_False prevents leaving the cell
        virtual bool SaveRow();         // commit the current row

        virtual bool IsModified() const {return aController.is() && aController->IsModified();}
        virtual bool IsModified() const {return aController.is() && aController->IsValueChangedFromSaved();}

        virtual CellController* GetController(long nRow, sal_uInt16 nCol);
        virtual void InitController(CellControllerRef& rController, long nRow, sal_uInt16 nCol);
diff --git a/include/svtools/editimplementation.hxx b/include/svtools/editimplementation.hxx
index ceddf0a..9797009 100644
--- a/include/svtools/editimplementation.hxx
+++ b/include/svtools/editimplementation.hxx
@@ -84,49 +84,36 @@ void GenericEditImplementation< EDIT >::ReplaceSelected( const OUString& _rStr )
    m_rEdit.ReplaceSelected( _rStr );
}


template <class EDIT>
OUString GenericEditImplementation< EDIT >::GetSelected( LineEnd ) const
{
    return m_rEdit.GetSelected( );
}


template <class EDIT>
void GenericEditImplementation< EDIT >::SetMaxTextLen( sal_Int32 _nMaxLen )
{
    m_rEdit.SetMaxTextLen( _nMaxLen );
}


template <class EDIT>
sal_Int32 GenericEditImplementation< EDIT >::GetMaxTextLen() const
{
    return m_rEdit.GetMaxTextLen( );
}


template <class EDIT>
void GenericEditImplementation< EDIT >::SetModified()
bool GenericEditImplementation< EDIT >::IsValueChangedFromSaved() const
{
    m_rEdit.SetModifyFlag();
    return m_rEdit.IsValueChangedFromSaved();
}


template <class EDIT>
bool GenericEditImplementation< EDIT >::IsModified() const
void GenericEditImplementation< EDIT >::SaveValue()
{
    return m_rEdit.IsModified();
    m_rEdit.SaveValue();
}


template <class EDIT>
void GenericEditImplementation< EDIT >::ClearModified()
{
    m_rEdit.ClearModifyFlag();
}


template <class EDIT>
void GenericEditImplementation< EDIT >::SetModifyHdl( const Link<LinkParamNone*,void>& _rLink )
{
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
index 8cb3a65..1159fdd 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.cxx
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -463,8 +463,8 @@ bool OFieldExpressionControl::SaveModified()
                    m_pParent->m_pController->getUndoManager().LeaveListAction();
            }

            if ( Controller().is() )
                Controller()->ClearModified();
            if (Controller().is())
                Controller()->SaveValue();
            if ( GetRowCount() == m_pParent->getGroups()->getCount() )
            {
                RowInserted( GetRowCount()-1);
diff --git a/solenv/sanitizers/ui/svt.suppr b/solenv/sanitizers/ui/svt.suppr
index 1366018..e15630b 100644
--- a/solenv/sanitizers/ui/svt.suppr
+++ b/solenv/sanitizers/ui/svt.suppr
@@ -27,3 +27,4 @@ svtools/uiconfig/ui/restartdialog.ui://GtkLabel[@id='reason_opengl'] orphan-labe
svtools/uiconfig/ui/restartdialog.ui://GtkLabel[@id='reason_skia'] orphan-label
svtools/uiconfig/ui/restartdialog.ui://GtkLabel[@id='label'] orphan-label
svtools/uiconfig/ui/spinfieldcontrol.ui://GtkSpinButton[@id='spinbutton'] no-labelled-by
svtools/uiconfig/ui/thineditcontrol.ui://GtkEntry[@id='entry'] no-labelled-by
diff --git a/svtools/UIConfig_svt.mk b/svtools/UIConfig_svt.mk
index 4c2a7cf..23a9e7d 100644
--- a/svtools/UIConfig_svt.mk
+++ b/svtools/UIConfig_svt.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svt,\
	svtools/uiconfig/ui/querydeletedialog \
	svtools/uiconfig/ui/restartdialog \
	svtools/uiconfig/ui/spinfieldcontrol \
	svtools/uiconfig/ui/thineditcontrol \
))

# vim: set noet sw=4 ts=4:
diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx
index df5eb4d..c2534dc 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -93,12 +93,12 @@ namespace svt
        }
    }

    bool ComboBoxCellController::IsModified() const
    bool ComboBoxCellController::IsValueChangedFromSaved() const
    {
        return GetComboBox().get_value_changed_from_saved();
    }

    void ComboBoxCellController::ClearModified()
    void ComboBoxCellController::SaveValue()
    {
        GetComboBox().save_value();
    }
@@ -149,12 +149,12 @@ namespace svt
        }
    }

    bool ListBoxCellController::IsModified() const
    bool ListBoxCellController::IsValueChangedFromSaved() const
    {
        return GetListBox().get_value_changed_from_saved();
    }

    void ListBoxCellController::ClearModified()
    void ListBoxCellController::SaveValue()
    {
        GetListBox().save_value();
    }
@@ -285,19 +285,16 @@ namespace svt
        return static_cast<CheckBoxControl &>(GetWindow()).GetBox();
    }


    bool CheckBoxCellController::IsModified() const
    bool CheckBoxCellController::IsValueChangedFromSaved() const
    {
        return GetCheckBox().IsValueChangedFromSaved();
    }


    void CheckBoxCellController::ClearModified()
    void CheckBoxCellController::SaveValue()
    {
        GetCheckBox().SaveValue();
    }


    IMPL_LINK_NOARG(CheckBoxCellController, ModifyHdl, LinkParamNone*, void)
    {
        callModifyHdl();
@@ -328,8 +325,6 @@ namespace svt
    }

    //= EditCellController


    EditCellController::EditCellController( Edit* _pEdit )
        :CellController( _pEdit )
        ,m_pEditImplementation( new EditImplementation( *_pEdit ) )
@@ -338,7 +333,6 @@ namespace svt
        m_pEditImplementation->SetModifyHdl( LINK(this, EditCellController, ModifyHdl) );
    }


    EditCellController::EditCellController( IEditImplementation* _pImplementation )
        :CellController( &_pImplementation->GetControl() )
        ,m_pEditImplementation( _pImplementation )
@@ -347,6 +341,37 @@ namespace svt
        m_pEditImplementation->SetModifyHdl( LINK(this, EditCellController, ModifyHdl) );
    }

    IMPL_LINK_NOARG(EntryImplementation, ModifyHdl, weld::Entry&, void)
    {
        m_aModifyHdl.Call(nullptr);
    }

    EditControl::EditControl(vcl::Window* pParent)
        : InterimItemWindow(pParent, "svt/ui/thineditcontrol.ui", "EditControl") // *thin*editcontrol has no frame/border
        , m_xWidget(m_xBuilder->weld_entry("entry"))
    {
        m_xWidget->set_width_chars(1); // so a smaller than default width can be used
        m_xWidget->connect_key_press(LINK(this, EditControl, KeyInputHdl));
    }

    IMPL_LINK(EditControl, KeyInputHdl, const KeyEvent&, rKEvt, bool)
    {
        return ChildKeyInput(rKEvt);
    }

    void EditControl::dispose()
    {
        m_xWidget.reset();
        InterimItemWindow::dispose();
    }

    EditCellController::EditCellController(EditControl* pEdit)
        : CellController(pEdit)
        , m_pEditImplementation(new EntryImplementation(*pEdit))
        , m_bOwnImplementation(true)
    {
        m_pEditImplementation->SetModifyHdl( LINK(this, EditCellController, ModifyHdl) );
    }

    EditCellController::~EditCellController( )
    {
@@ -354,19 +379,11 @@ namespace svt
            DELETEZ( m_pEditImplementation );
    }


    void EditCellController::SetModified()
    void EditCellController::SaveValue()
    {
        m_pEditImplementation->SetModified();
        m_pEditImplementation->SaveValue();
    }


    void EditCellController::ClearModified()
    {
        m_pEditImplementation->ClearModified();
    }


    bool EditCellController::MoveAllowed(const KeyEvent& rEvt) const
    {
        bool bResult;
@@ -390,13 +407,11 @@ namespace svt
        return bResult;
    }


    bool EditCellController::IsModified() const
    bool EditCellController::IsValueChangedFromSaved() const
    {
        return m_pEditImplementation->IsModified();
        return m_pEditImplementation->IsValueChangedFromSaved();
    }


    IMPL_LINK_NOARG(EditCellController, ModifyHdl, LinkParamNone*, void)
    {
        callModifyHdl();
@@ -421,18 +436,11 @@ namespace svt
        return static_cast<SpinField &>(GetWindow());
    }

    void SpinCellController::SetModified()
    void SpinCellController::SaveValue()
    {
        GetSpinWindow().SetModifyFlag();
        GetSpinWindow().SaveValue();
    }


    void SpinCellController::ClearModified()
    {
        GetSpinWindow().ClearModifyFlag();
    }


    bool SpinCellController::MoveAllowed(const KeyEvent& rEvt) const
    {
        bool bResult;
@@ -456,10 +464,9 @@ namespace svt
        return bResult;
    }


    bool SpinCellController::IsModified() const
    bool SpinCellController::IsValueChangedFromSaved() const
    {
        return GetSpinWindow().IsModified();
        return GetSpinWindow().IsValueChangedFromSaved();
    }

    IMPL_LINK_NOARG(SpinCellController, ModifyHdl, Edit&, void)
diff --git a/svtools/source/brwbox/editbrowsebox.cxx b/svtools/source/brwbox/editbrowsebox.cxx
index 9b56e56..1db43ea 100644
--- a/svtools/source/brwbox/editbrowsebox.cxx
+++ b/svtools/source/brwbox/editbrowsebox.cxx
@@ -434,7 +434,7 @@ namespace svt
        if (rEvt.GetColumnId() == HandleColumnId)
        {   // it was the handle column. save the current cell content if necessary
            // (clicking on the handle column results in selecting the current row)
            if (IsEditing() && aController->IsModified())
            if (IsEditing() && aController->IsValueChangedFromSaved())
                SaveModified();
        }

@@ -578,7 +578,7 @@ namespace svt

                        case KEY_RETURN:
                            // save the cell content (if necessary)
                            if (IsEditing() && aController->IsModified() && !SaveModified())
                            if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified())
                            {
                                // maybe we're not visible ...
                                EnableAndShow();
@@ -639,7 +639,7 @@ namespace svt
                    if (nId == BROWSER_SELECT || BROWSER_SELECTCOLUMN == nId )
                    {
                        // save the cell content (if necessary)
                        if (IsEditing() && aController->IsModified() && !SaveModified())
                        if (IsEditing() && aController->IsValueChangedFromSaved() && !SaveModified())
                        {
                            // maybe we're not visible ...
                            EnableAndShow();
@@ -813,7 +813,7 @@ namespace svt
            return true;

        // save the cell content
        if (IsEditing() && aController->IsModified() && !const_cast<EditBrowseBox *>(this)->SaveModified())
        if (IsEditing() && aController->IsValueChangedFromSaved() && !const_cast<EditBrowseBox *>(this)->SaveModified())
        {
            // maybe we're not visible ...
            EnableAndShow();
@@ -958,7 +958,7 @@ namespace svt

            InitController(aController, nEditRow, nEditCol);

            aController->ClearModified();
            aController->SaveValue();
            aController->SetModifyHdl(LINK(this,EditBrowseBox,ModifyHdl));
            EnableAndShow();

@@ -1278,7 +1278,6 @@ namespace svt
        }
    }


    void CellController::resume( )
    {
        DBG_ASSERT( bSuspended == !GetWindow().IsVisible(), "CellController::resume: inconsistence!" );
@@ -1290,24 +1289,16 @@ namespace svt
        }
    }


    void CellController::CommitModifications()
    {
        // nothing to do in this base class
    }


    bool CellController::WantMouseEvent() const
    {
        return false;
    }


    void CellController::SetModified()
    {
    }


    bool CellController::MoveAllowed(const KeyEvent&) const
    {
        return true;
diff --git a/svtools/uiconfig/ui/thineditcontrol.ui b/svtools/uiconfig/ui/thineditcontrol.ui
new file mode 100644
index 0000000..a30e8db
--- /dev/null
+++ b/svtools/uiconfig/ui/thineditcontrol.ui
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.2 -->
<interface domain="svt">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkBox" id="EditControl">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="hexpand">True</property>
    <property name="spacing">6</property>
    <child>
      <object class="GtkEntry" id="entry">
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="hexpand">True</property>
        <property name="vexpand">True</property>
        <property name="has_frame">False</property>
        <property name="activates_default">True</property>
        <property name="width_chars">1</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/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx
index 68b4b3c..050824e 100644
--- a/svx/source/fmcomp/fmgridcl.cxx
+++ b/svx/source/fmcomp/fmgridcl.cxx
@@ -1402,7 +1402,7 @@ bool FmGridControl::commit()
    // css::form::component::GridControl
    if (!IsUpdating())
    {
        if (Controller().is() && Controller()->IsModified())
        if (Controller().is() && Controller()->IsValueChangedFromSaved())
        {
            if (!SaveModified())
                return false;
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx
index 81d3e41..06ac175 100644
--- a/svx/source/fmcomp/gridcell.cxx
+++ b/svx/source/fmcomp/gridcell.cxx
@@ -1054,14 +1054,12 @@ DbTextField::DbTextField(DbGridColumn& _rColumn)
{
}


DbTextField::~DbTextField( )
{
    m_pPainterImplementation.reset();
    m_pEdit.reset();
}


void DbTextField::Init( vcl::Window& rParent, const Reference< XRowSet >& xCursor)
{
    sal_Int16 nAlignment = m_rColumn.SetAlignmentFromModel(-1);
@@ -1106,11 +1104,26 @@ void DbTextField::Init( vcl::Window& rParent, const Reference< XRowSet >& xCurso
    }
    else
    {
        m_pWindow = VclPtr<Edit>::Create( &rParent, nStyle );
        m_pEdit.reset(new EditImplementation( *static_cast< Edit* >( m_pWindow.get() ) ));
        auto xEditControl = VclPtr<EditControl>::Create(&rParent);
        auto xEditPainter = VclPtr<EditControl>::Create(&rParent);

        m_pPainter = VclPtr<Edit>::Create( &rParent, nStyle );
        m_pPainterImplementation.reset(new EditImplementation( *static_cast< Edit* >( m_pPainter.get() ) ));
        switch (nAlignment)
        {
            case awt::TextAlign::RIGHT:
                xEditControl->get_widget().set_alignment(TxtAlign::Right);
                xEditPainter->get_widget().set_alignment(TxtAlign::Right);
                break;
            case awt::TextAlign::CENTER:
                xEditControl->get_widget().set_alignment(TxtAlign::Center);
                xEditPainter->get_widget().set_alignment(TxtAlign::Center);
                break;
        }

        m_pWindow = xEditControl;
        m_pEdit.reset(new EntryImplementation(*xEditControl));

        m_pPainter = xEditPainter;
        m_pPainterImplementation.reset(new EntryImplementation(*xEditPainter));
    }

    if ( WB_LEFT == nStyle )
diff --git a/svx/source/fmcomp/gridctrl.cxx b/svx/source/fmcomp/gridctrl.cxx
index a37ce46..d8e20b7 100644
--- a/svx/source/fmcomp/gridctrl.cxx
+++ b/svx/source/fmcomp/gridctrl.cxx
@@ -3049,7 +3049,7 @@ void DbGridControl::RowModified( long nRow )
    if (nRow == m_nCurrentPos && IsEditing())
    {
        CellControllerRef aTmpRef = Controller();
        aTmpRef->ClearModified();
        aTmpRef->SaveValue();
        InitController(aTmpRef, m_nCurrentPos, GetCurColumnId());
    }
    EditBrowseBox::RowModified(nRow);
@@ -3097,7 +3097,7 @@ bool DbGridControl::SaveModified()

    if (bOK)
    {
        Controller()->ClearModified();
        Controller()->SaveValue();

        if ( IsValid(m_xCurrentRow) )
        {
@@ -3110,11 +3110,6 @@ bool DbGridControl::SaveModified()
            SAL_INFO("svx.fmcomp", "no SetState, new state: " << ROWSTATUS(m_xCurrentRow));
        }
    }
    else
    {
        // reset the modified flag...
        Controller()->SetModified();
    }

    return bOK;
}
@@ -3126,7 +3121,7 @@ bool DbGridControl::SaveRow()
    if (!IsValid(m_xCurrentRow) || !IsModified())
        return true;
    // value of the controller was not saved, yet
    else if (Controller().is() && Controller()->IsModified())
    else if (Controller().is() && Controller()->IsValueChangedFromSaved())
    {
        if (!SaveModified())
            return false;
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 1531ad0..90f6046 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -132,8 +132,8 @@ namespace {

class SwEntryBrowseBox : public SwEntryBrowseBox_Base
{
    VclPtr<Edit>                    m_aCellEdit;
    VclPtr< ::svt::CheckBoxControl>  m_aCellCheckBox;
    VclPtr<svt::EditControl> m_aCellEdit;
    VclPtr<svt::CheckBoxControl> m_aCellCheckBox;

    OUString  m_sYes;
    OUString  m_sNo;
@@ -3550,8 +3550,8 @@ SwEntryBrowseBox::SwEntryBrowseBox(const css::uno::Reference<css::awt::XWindow> 
                           BrowserMode::VLINES |
                           BrowserMode::AUTO_VSCROLL|
                           BrowserMode::HIDECURSOR   )
    , m_aCellEdit(VclPtr<Edit>::Create(&GetDataWindow(), 0))
    , m_aCellCheckBox(VclPtr< ::svt::CheckBoxControl>::Create(&GetDataWindow()))
    , m_aCellEdit(VclPtr<svt::EditControl>::Create(&GetDataWindow()))
    , m_aCellCheckBox(VclPtr<svt::CheckBoxControl>::Create(&GetDataWindow()))
    , m_nCurrentRow(0)
    , m_bModified(false)
{
@@ -3738,7 +3738,7 @@ bool SwEntryBrowseBox::SaveModified()
        RowInserted(nRow, 1, true, true);
        if(nCol < ITEM_WORDONLY)
        {
            pController->ClearModified();
            pController->SaveValue();
            GoToRow( nRow );
        }
    }
@@ -3824,7 +3824,7 @@ void SwEntryBrowseBox::WriteEntries(SvStream& rOutStr)
        pController = m_xController.get();
    else
        pController = m_xCheckController.get();
    if(pController ->IsModified())
    if (pController->IsValueChangedFromSaved())
        GoToColumnId(nCol + (nCol < ITEM_CASE ? 1 : -1 ));

    rtl_TextEncoding  eTEnc = osl_getThreadTextEncoding();
@@ -3860,7 +3860,7 @@ bool SwEntryBrowseBox::IsModified()const
        pController = m_xController.get();
    else
        pController = m_xCheckController.get();
    return pController->IsModified();
    return pController->IsValueChangedFromSaved();
}

SwAutoMarkDlg_Impl::SwAutoMarkDlg_Impl(weld::Window* pParent, const OUString& rAutoMarkURL,