summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorRelease Engineers <releng@openoffice.org>2009-05-06 13:20:55 +0000
committerRelease Engineers <releng@openoffice.org>2009-05-06 13:20:55 +0000
commite9da29679bce3b544add9233a4aca2b19b78da1a (patch)
treed7b04f6d50479fccfd1adc411e451910fe360007 /sw
parentcf1aa12f1484595899cd2793bca56b47eb53a0de (diff)
CWS-TOOLING: integrate CWS os127
2009-04-27 15:37:53 +0200 hde r271284 : i101363 2009-04-27 11:21:04 +0200 hde r271256 : #i101363 2009-03-26 12:56:13 +0100 os r270070 : #i97437# call ErrorHandler if necessary 2009-03-17 14:47:12 +0100 os r269609 : CWS-TOOLING: rebase CWS os127 to trunk@269297 (milestone: DEV300:m43) 2009-03-16 11:45:30 +0100 os r269516 : #i97471# SwDrawTextShell::Init(): mouse double click and key input in group objects at the same time: prevent crash 2009-03-12 12:02:45 +0100 os r269381 : #i100069# label Herma 5116 added 2009-03-12 12:01:21 +0100 os r269380 : #i100069# label description fixed 2009-02-16 15:10:22 +0100 os r267817 : #i96791# mark label names with x-no-translate 2009-01-26 15:41:13 +0100 os r266932 : #i97572# selection should not be kill in update of a TOX 2009-01-22 15:17:37 +0100 os r266719 : #i97850# reconversion patch applied 2009-01-22 15:01:00 +0100 os r266717 : #i98023# enable loading from InputStream 2009-01-21 16:04:52 +0100 os r266679 : #97667# names from database column: keep dots and extensions 2009-01-21 15:58:03 +0100 os r266678 : #i97577# disable address list access if csv-file has been removed 2009-01-21 12:47:19 +0100 os r266658 : #i97577# disable address list access if csv-file has been removed 2009-01-19 14:37:03 +0100 os r266499 : #i97437# catch exceptions in storeToURL 2009-01-19 13:54:44 +0100 os r266494 : #i98237# SwRVPMark removed
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/swunohelper.hxx2
-rw-r--r--sw/source/core/inc/rvp_mark.hxx46
-rw-r--r--sw/source/core/txtnode/fntcache.cxx38
-rw-r--r--sw/source/ui/dbui/addresslistdialog.cxx12
-rw-r--r--sw/source/ui/dbui/dbmgr.cxx11
-rw-r--r--sw/source/ui/dbui/mmoutputpage.cxx40
-rw-r--r--sw/source/ui/docvw/edtwin.cxx77
-rw-r--r--sw/source/ui/envelp/mailmrge.cxx2
-rw-r--r--sw/source/ui/index/toxmgr.cxx2
-rw-r--r--sw/source/ui/shells/drwtxtsh.cxx3
10 files changed, 117 insertions, 116 deletions
diff --git a/sw/inc/swunohelper.hxx b/sw/inc/swunohelper.hxx
index 2a23f487bc0e..ebf27999b0aa 100644
--- a/sw/inc/swunohelper.hxx
+++ b/sw/inc/swunohelper.hxx
@@ -75,7 +75,7 @@ BOOL UCB_GetFileListOfFolder( const String& rURL, SvStrings& rList,
SvPtrarr* pDateTimeList = 0 );
// is the URL an existing file?
-BOOL UCB_IsFile( const String& rURL );
+SW_DLLPUBLIC BOOL UCB_IsFile( const String& rURL );
// is the URL a existing directory?
BOOL UCB_IsDirectory( const String& rURL );
diff --git a/sw/source/core/inc/rvp_mark.hxx b/sw/source/core/inc/rvp_mark.hxx
deleted file mode 100644
index 3c72a2ecfeb2..000000000000
--- a/sw/source/core/inc/rvp_mark.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: rvp_mark.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _RVP_MARK_HXX
-#define _RVP_MARK_HXX
-
-class OutputDevice;
-class SwRVPMarker
-{
- const OutputDevice *pOutp;
-public:
- SwRVPMarker( const OutputDevice* pOut ) : pOutp( pOut )
- { SwRVPMarker::Mark( pOutp ); }
- ~SwRVPMarker() { SwRVPMarker::Mark( pOutp ); }
- static void Mark( const OutputDevice* pOut );
-};
-
-
-#endif //_RVP_MARK_HXX
diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx
index af0e0137af86..d58236da16b9 100644
--- a/sw/source/core/txtnode/fntcache.cxx
+++ b/sw/source/core/txtnode/fntcache.cxx
@@ -74,10 +74,6 @@
#ifndef _POOLFMT_HRC
#include <poolfmt.hrc>
#endif
-// Enable this to use the helpclass SwRVPMark
-#if OSL_DEBUG_LEVEL > 1
-#include <rvp_mark.hxx>
-#endif
using namespace ::com::sun::star;
@@ -110,28 +106,6 @@ USHORT GetDefaultFontHeight( SwDrawTextInfo &rInf )
}
-#ifdef _RVP_MARK_HXX
-
-void SwRVPMarker::Mark( const OutputDevice* pOut )
-{
- if( pOut )
- {
- Color aOldCol = pOut->GetLineColor();
- Color aBlack = Color( COL_BLACK );
- if( aOldCol != aBlack )
- {
- ((OutputDevice*)pOut)->SetLineColor( aBlack );
- ((OutputDevice*)pOut)->DrawChord( Rectangle(0,1,0,1),
- Point(), Point() );
- ((OutputDevice*)pOut)->SetLineColor( aOldCol );
- }
- else
- ((OutputDevice*)pOut)->DrawChord( Rectangle(0,1,0,1),
- Point(), Point() );
- }
-}
-
-#endif
/*************************************************************************
|*
@@ -938,10 +912,10 @@ static void lcl_DrawLineForWrongListData(
if (rInf.GetOut().GetConnectMetaFile())
rInf.GetOut().Push();
- const Color aCol( rInf.GetOut().GetLineColor() );
+ const Color aCol( rInf.GetOut().GetTextLineColor() );
const BOOL bColSave = aCol != aLineColor;
if (bColSave)
- rInf.GetOut().SetLineColor( aLineColor );
+ rInf.GetOut().SetTextLineColor( aLineColor );
// iterate over all ranges stored in the respective SwWrongList
do
@@ -1012,7 +986,7 @@ static void lcl_DrawLineForWrongListData(
while (nWrLen && pWList->Check( nStart, nWrLen ));
if (bColSave)
- rInf.GetOut().SetLineColor( aCol );
+ rInf.GetOut().SetTextLineColor( aCol );
if (rInf.GetOut().GetConnectMetaFile())
rInf.GetOut().Pop();
@@ -1932,10 +1906,10 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf )
WRONG_SHOW_MEDIUM < nHght ? WAVE_NORMAL :
( WRONG_SHOW_SMALL < nHght ? WAVE_SMALL :
WAVE_FLAT );
- Color aCol( rInf.GetOut().GetLineColor() );
+ Color aCol( rInf.GetOut().GetTextLineColor() );
BOOL bColSave = aCol != *pWaveCol;
if ( bColSave )
- rInf.GetOut().SetLineColor( *pWaveCol );
+ rInf.GetOut().SetTextLineColor( *pWaveCol );
Point aEnd;
long nKernVal = pKernArray[ USHORT( rInf.GetLen() - 1 ) ];
@@ -1982,7 +1956,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf )
rInf.GetOut().DrawWaveLine( aCurrPos, aEnd, nWave );
if ( bColSave )
- rInf.GetOut().SetLineColor( aCol );
+ rInf.GetOut().SetTextLineColor( aCol );
if ( rInf.GetOut().GetConnectMetaFile() )
rInf.GetOut().Pop();
diff --git a/sw/source/ui/dbui/addresslistdialog.cxx b/sw/source/ui/dbui/addresslistdialog.cxx
index b68bdc0e923a..91248fa1e422 100644
--- a/sw/source/ui/dbui/addresslistdialog.cxx
+++ b/sw/source/ui/dbui/addresslistdialog.cxx
@@ -68,7 +68,7 @@
#include <swunohelper.hxx>
#include <vcl/waitobj.hxx>
#include <svtools/pathoptions.hxx>
-
+#include <svtools/urihelper.hxx>
#include <addresslistdialog.hrc>
#include <dbui.hrc>
@@ -145,6 +145,8 @@ struct AddressUserData_Impl
if(!sCharSet.compareToAscii( cUTF8 ))
{
sURL = String(sDBURL).Copy( 10 );
+ //#i97577# at this point the 'URL' can also be a file name!
+ sURL = URIHelper::SmartRel2Abs( INetURLObject(), sURL );
sURL += C2U("/");
sURL += aFilters[0];
sURL += C2U(".");
@@ -269,6 +271,7 @@ SwAddressListDialog::SwAddressListDialog(SwMailMergeAddressBlockPage* pParent) :
m_xDBContext->getByName(pNames[nName]) >>= xSourceProperties;
pUserData->sURL = lcl_getFlatURL( xSourceProperties );
bEnableEdit = pUserData->sURL.getLength() > 0 &&
+ SWUnoHelper::UCB_IsFile( pUserData->sURL ) && //#i97577#
!SWUnoHelper::UCB_IsReadOnlyFileName( pUserData->sURL );
}
catch(const uno::Exception& )
@@ -553,6 +556,7 @@ IMPL_STATIC_LINK(SwAddressListDialog, StaticListBoxSelectHdl_Impl, SvLBoxEntry*,
pThis->m_aListLB.SetEntryText(String(), pSelect, ITEMID_TABLE - 1);
}
pThis->m_aEditPB.Enable(pUserData && pUserData->sURL.getLength() &&
+ SWUnoHelper::UCB_IsFile( pUserData->sURL ) && //#i97577#
!SWUnoHelper::UCB_IsReadOnlyFileName( pUserData->sURL ) );
pThis->m_bInSelectHdl = false;
pThis->LeaveWait();
@@ -638,11 +642,15 @@ void SwAddressListDialog::DetectTablesAndQueries(
m_xDBContext->getByName(m_aDBData.sDataSource) >>= xSourceProperties;
pUserData->sURL = lcl_getFlatURL( xSourceProperties );
- m_aListLB.SetEntryText(m_aDBData.sCommand, pSelect, ITEMID_TABLE - 1);
pUserData->xColumnsSupplier = SwNewDBMgr::GetColumnSupplier(pUserData->xConnection,
m_aDBData.sCommand,
m_aDBData.nCommandType == CommandType::TABLE ?
SW_DB_SELECT_TABLE : SW_DB_SELECT_QUERY );
+ //#i97577#
+ if( pUserData->xColumnsSupplier.is() )
+ m_aListLB.SetEntryText(m_aDBData.sCommand, pSelect, ITEMID_TABLE - 1);
+ else
+ m_aListLB.SetEntryText(String(), pSelect, ITEMID_TABLE - 1);
}
String sCommand = m_aListLB.GetEntryText(pSelect, ITEMID_TABLE - 1);
m_aOK.Enable(pSelect && sCommand.Len());
diff --git a/sw/source/ui/dbui/dbmgr.cxx b/sw/source/ui/dbui/dbmgr.cxx
index bf6bef6959b3..cbc77678e84e 100644
--- a/sw/source/ui/dbui/dbmgr.cxx
+++ b/sw/source/ui/dbui/dbmgr.cxx
@@ -1332,7 +1332,6 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell,
pStoreToFilterOptions = &rMergeDescriptor.sSaveToFilterOptions;
}
}
- String sAddress;
bCancel = FALSE;
// in case of creating a single resulting file this has to be created here
@@ -1399,7 +1398,6 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell,
pViewFrm = SfxViewFrame::GetNext(*pViewFrm, pSourrceDocSh);
}
ULONG nDocNo = 1;
- ULONG nCounter = 0;
long nStartRow, nEndRow;
// collect temporary files
@@ -1410,6 +1408,7 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell,
{
String sPath(sSubject);
+ String sAddress;
if( !bEMail && bColumnName )
{
SwDBFormatData aDBFormat;
@@ -1419,14 +1418,18 @@ BOOL SwNewDBMgr::MergeMailFiles(SwWrtShell* pSourceShell,
if (!sAddress.Len())
sAddress = '_';
sPath += sAddress;
- nCounter = 0;
}
// create a new temporary file name - only done once in case of bCreateSingleFile
if( 1 == nDocNo || (!rMergeDescriptor.bCreateSingleFile && !bAsSingleFile) )
{
INetURLObject aEntry(sPath);
- String sLeading(aEntry.GetBase());
+ String sLeading;
+ //#i97667# if the name is from a database field then it will be used _as is_
+ if( sAddress.Len() )
+ sLeading = sAddress;
+ else
+ sLeading = aEntry.GetBase();
aEntry.removeSegment();
sPath = aEntry.GetMainURL( INetURLObject::NO_DECODE );
String sExt( pStoreToFilter->GetDefaultExtension() );
diff --git a/sw/source/ui/dbui/mmoutputpage.cxx b/sw/source/ui/dbui/mmoutputpage.cxx
index 4a5884a9daeb..64fd024fab57 100644
--- a/sw/source/ui/dbui/mmoutputpage.cxx
+++ b/sw/source/ui/dbui/mmoutputpage.cxx
@@ -55,6 +55,8 @@
#include <svx/langitem.hxx>
#include <svtools/itemset.hxx>
#include <svtools/stritem.hxx>
+#include <svtools/ehdl.hxx>
+#include <svtools/sfxecode.hxx>
#include <vcl/msgbox.hxx>
#include <sfx2/dinfdlg.hxx>
#include <sfx2/printer.hxx>
@@ -752,7 +754,24 @@ IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton)
pValues[0].Value <<= ::rtl::OUString(sFilter);
uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY);
- xStore->storeToURL( sPath, aValues );
+ sal_uInt32 nErrorCode = ERRCODE_NONE;
+ try
+ {
+ xStore->storeToURL( sPath, aValues );
+ }
+ catch( task::ErrorCodeIOException& aErrorEx )
+ {
+ nErrorCode = (sal_uInt32)aErrorEx.ErrCode;
+ }
+ catch( Exception& )
+ {
+ nErrorCode = ERRCODE_IO_GENERAL;
+ }
+ if( nErrorCode != ERRCODE_NONE )
+ {
+ SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle());
+ ErrorHandler::HandleError( nErrorCode );
+ }
}
else
{
@@ -787,7 +806,24 @@ IMPL_LINK(SwMailMergeOutputPage, SaveOutputHdl_Impl, PushButton*, pButton)
pValues[0].Value <<= ::rtl::OUString(pSfxFlt->GetFilterName());
uno::Reference< frame::XStorable > xStore( pTargetView->GetDocShell()->GetModel(), uno::UNO_QUERY);
- xStore->storeToURL( sTargetTempURL, aValues );
+ sal_uInt32 nErrorCode = ERRCODE_NONE;
+ try
+ {
+ xStore->storeToURL( sTargetTempURL, aValues );
+ }
+ catch( task::ErrorCodeIOException& aErrorEx )
+ {
+ nErrorCode = (sal_uInt32)aErrorEx.ErrCode;
+ }
+ catch( Exception& )
+ {
+ nErrorCode = ERRCODE_IO_GENERAL;
+ }
+ if( nErrorCode != ERRCODE_NONE )
+ {
+ SfxErrorContext aEc(ERRCTX_SFX_SAVEASDOC, pTargetView->GetDocShell()->GetTitle());
+ ErrorHandler::HandleError( nErrorCode );
+ }
SwView* pSourceView = rConfigItem.GetSourceView();
PrintMonitor aSaveMonitor(this, PrintMonitor::MONITOR_TYPE_SAVE);
diff --git a/sw/source/ui/docvw/edtwin.cxx b/sw/source/ui/docvw/edtwin.cxx
index f5a39dd1dee0..5166f0f01d5c 100644
--- a/sw/source/ui/docvw/edtwin.cxx
+++ b/sw/source/ui/docvw/edtwin.cxx
@@ -5076,49 +5076,70 @@ void SwEditWin::Command( const CommandEvent& rCEvt )
case COMMAND_SELECTIONCHANGE:
{
const CommandSelectionChangeData *pData = rCEvt.GetSelectionChangeData();
- rSh.HideCrsr();
+ rSh.SttCrsrMove();
rSh.GoStartSentence();
rSh.GetCrsr()->GetPoint()->nContent += sal::static_int_cast<sal_uInt16, ULONG>(pData->GetStart());
rSh.SetMark();
- rSh.GetCrsr()->GetMark()->nContent += sal::static_int_cast<sal_uInt16, ULONG>( pData->GetEnd() - pData->GetStart() );
- rSh.ShowCrsr();
+ rSh.GetCrsr()->GetMark()->nContent += sal::static_int_cast<sal_uInt16, ULONG>(pData->GetEnd() - pData->GetStart());
+ rSh.EndCrsrMove( TRUE );
}
break;
case COMMAND_PREPARERECONVERSION:
if( rSh.HasSelection() )
{
- if ( rSh.IsMultiSelection() )
+ SwPaM *pCrsr = (SwPaM*)rSh.GetCrsr();
+
+ if( rSh.IsMultiSelection() )
+ {
+ if( pCrsr && !pCrsr->HasMark() &&
+ pCrsr->GetPoint() == pCrsr->GetMark() )
+ {
+ rSh.GoPrevCrsr();
+ pCrsr = (SwPaM*)rSh.GetCrsr();
+ }
+
+ // Cancel all selections other than the last selected one.
+ while( rSh.GetCrsr()->GetNext() != rSh.GetCrsr() )
+ delete rSh.GetCrsr()->GetNext();
+ }
+
+ if( pCrsr )
{
- // Save the last selected area.
- SwPaM *pCrsr = (SwPaM*)rSh.GetCrsr()->GetPrev();
- xub_StrLen nPosIdx = pCrsr->GetPoint()->nContent.GetIndex();
ULONG nPosNodeIdx = pCrsr->GetPoint()->nNode.GetIndex();
- xub_StrLen nMarkIdx = pCrsr->GetMark()->nContent.GetIndex();
+ xub_StrLen nPosIdx = pCrsr->GetPoint()->nContent.GetIndex();
ULONG nMarkNodeIdx = pCrsr->GetMark()->nNode.GetIndex();
+ xub_StrLen nMarkIdx = pCrsr->GetMark()->nContent.GetIndex();
- // ToDo: Deselect the text behind the first paragraph break,
- // if the last selected area ranges from one paragraph
- // to another.
- if( nPosNodeIdx != nMarkNodeIdx )
- break;
+ if( !rSh.GetCrsr()->HasMark() )
+ rSh.GetCrsr()->SetMark();
- // Cancel all selection.
- while( rSh._GetCrsr()->GetNext() != rSh._GetCrsr() )
- delete rSh._GetCrsr()->GetNext();
+ rSh.SttCrsrMove();
- // Restore the last selected area.
+ if( nPosNodeIdx < nMarkNodeIdx )
+ {
+ rSh.GetCrsr()->GetPoint()->nNode = nPosNodeIdx;
rSh.GetCrsr()->GetPoint()->nContent = nPosIdx;
+ rSh.GetCrsr()->GetMark()->nNode = nPosNodeIdx;
+ rSh.GetCrsr()->GetMark()->nContent =
+ rSh.GetCrsr()->GetCntntNode( TRUE )->Len();
+ }
+ else if( nPosNodeIdx == nMarkNodeIdx )
+ {
rSh.GetCrsr()->GetPoint()->nNode = nPosNodeIdx;
- rSh.SetMark();
+ rSh.GetCrsr()->GetPoint()->nContent = nPosIdx;
+ rSh.GetCrsr()->GetMark()->nNode = nMarkNodeIdx;
rSh.GetCrsr()->GetMark()->nContent = nMarkIdx;
+ }
+ else
+ {
rSh.GetCrsr()->GetMark()->nNode = nMarkNodeIdx;
- rSh.ShowCrsr();
- }
- else
- {
- // Deselect the text behind the first paragraph break.
- rSh.NormalizePam( FALSE );
- while( !rSh.IsSelOnePara() && rSh.MovePara( fnParaPrev, fnParaEnd ));
+ rSh.GetCrsr()->GetMark()->nContent = nMarkIdx;
+ rSh.GetCrsr()->GetPoint()->nNode = nMarkNodeIdx;
+ rSh.GetCrsr()->GetPoint()->nContent =
+ rSh.GetCrsr()->GetCntntNode( FALSE )->Len();
+ }
+
+ rSh.EndCrsrMove( TRUE );
}
}
break;
@@ -5653,7 +5674,7 @@ XubString SwEditWin::GetSurroundingText() const
String sReturn;
SwWrtShell& rSh = rView.GetWrtShell();
if( rSh.HasSelection() && !rSh.IsMultiSelection() && rSh.IsSelOnePara() )
- rSh.GetSelectedText( sReturn );
+ rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
else if( !rSh.HasSelection() )
{
SwPosition *pPos = rSh.GetCrsr()->GetPoint();
@@ -5664,7 +5685,7 @@ XubString SwEditWin::GetSurroundingText() const
rSh.GoStartSentence();
rSh.SetMark();
rSh.GoEndSentence();
- rSh.GetSelectedText( sReturn );
+ rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
pPos->nContent = nPos;
rSh.ClearMark();
@@ -5682,7 +5703,7 @@ Selection SwEditWin::GetSurroundingTextSelection() const
if( rSh.HasSelection() )
{
String sReturn;
- rSh.GetSelectedText( sReturn );
+ rSh.GetSelectedText( sReturn, GETSELTXT_PARABRK_TO_ONLYCR );
return Selection( 0, sReturn.Len() );
}
else
diff --git a/sw/source/ui/envelp/mailmrge.cxx b/sw/source/ui/envelp/mailmrge.cxx
index c60859790db0..7b1170b35efe 100644
--- a/sw/source/ui/envelp/mailmrge.cxx
+++ b/sw/source/ui/envelp/mailmrge.cxx
@@ -768,6 +768,8 @@ bool SwMailMergeDlg::ExecQryShell()
}
else
{
+ //#i97667# reset column name - otherwise it's remembered from the last run
+ pMgr->SetEMailColumn(::rtl::OUString());
//start save as dialog
String sFilter;
sPath = SwMailMergeHelper::CallSaveAsDialog(sFilter);
diff --git a/sw/source/ui/index/toxmgr.cxx b/sw/source/ui/index/toxmgr.cxx
index 4e0cbe897ac9..686a134a67ec 100644
--- a/sw/source/ui/index/toxmgr.cxx
+++ b/sw/source/ui/index/toxmgr.cxx
@@ -312,7 +312,7 @@ BOOL SwTOXMgr::UpdateOrInsertTOX(const SwTOXDescription& rDesc,
TOXTypes eCurTOXType = rDesc.GetTOXType();
if(pCurTOX && !ppBase && pSh->HasSelection())
- pSh->DelRight();
+ pSh->EnterStdMode();
switch(eCurTOXType)
{
diff --git a/sw/source/ui/shells/drwtxtsh.cxx b/sw/source/ui/shells/drwtxtsh.cxx
index 0c2797cebd78..a0f38300fba2 100644
--- a/sw/source/ui/shells/drwtxtsh.cxx
+++ b/sw/source/ui/shells/drwtxtsh.cxx
@@ -139,6 +139,9 @@ void SwDrawTextShell::Init()
SwWrtShell &rSh = GetShell();
pSdrView = rSh.GetDrawView();
SdrOutliner * pOutliner = pSdrView->GetTextEditOutliner();
+ //#97471# mouse click _and_ key input at the same time
+ if( !pOutliner )
+ return ;
OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
ULONG nCtrl = pOutliner->GetControlWord();
nCtrl |= EE_CNTRL_AUTOCORRECT;