Blob Blame History Raw
From cafe54fc6b8ae195a87c77499f63ddb4e0de2d4e Mon Sep 17 00:00:00 2001
Message-Id: <cafe54fc6b8ae195a87c77499f63ddb4e0de2d4e.1334751575.git.erack@redhat.com>
From: Eike Rathke <erack@redhat.com>
Date: Tue, 17 Apr 2012 21:31:50 +0200
Subject: [PATCH] resolved rhbz#813280 the current document is not always the
 first in list

i.e. if more than one document open and dialog invoked on any but the first
document.
---
 sc/source/ui/inc/mvtabdlg.hxx      |    4 +++-
 sc/source/ui/miscdlgs/mvtabdlg.cxx |   27 +++++++++++++++++----------
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/sc/source/ui/inc/mvtabdlg.hxx b/sc/source/ui/inc/mvtabdlg.hxx
index a4b03ed..4a15a66 100644
--- a/sc/source/ui/inc/mvtabdlg.hxx
+++ b/sc/source/ui/inc/mvtabdlg.hxx
@@ -61,6 +61,7 @@ private:
     void ResetRenameInput();
     void CheckNewTabName();
     ScDocument* GetSelectedDoc();
+    bool IsCurrentDocSelected() const;
 
 private:
     FixedLine       aFlAction;
@@ -85,7 +86,8 @@ private:
 
     const String&   mrDefaultName;
 
-    sal_uInt16          nDocument;
+    sal_uInt16      mnCurrentDocPos;
+    sal_uInt16      nDocument;
     SCTAB           nTable;
     bool            bCopyTable:1;
     bool            bRenameTable:1;
diff --git a/sc/source/ui/miscdlgs/mvtabdlg.cxx b/sc/source/ui/miscdlgs/mvtabdlg.cxx
index f50cdd0..e640feb 100644
--- a/sc/source/ui/miscdlgs/mvtabdlg.cxx
+++ b/sc/source/ui/miscdlgs/mvtabdlg.cxx
@@ -82,6 +82,7 @@ ScMoveTableDlg::ScMoveTableDlg( Window*       pParent,
         maStrTabNameInvalid( ScResId(STR_TABNAME_WARN_INVALID) ),
         //
         mrDefaultName( rDefault ),
+        mnCurrentDocPos( 0 ),
         nDocument   ( 0 ),
         nTable      ( 0 ),
         bCopyTable  ( false ),
@@ -143,8 +144,13 @@ void ScMoveTableDlg::EnableRenameTable(sal_Bool bFlag)
 void ScMoveTableDlg::ResetRenameInput()
 {
     if (mbEverEdited)
+    {
         // Don't reset the name when the sheet name has ever been edited.
+        // But check the name, as this is also called for change of copy/move
+        // buttons and document listbox selection.
+        CheckNewTabName();
         return;
+    }
 
     if (!aEdTabName.IsEnabled())
     {
@@ -194,19 +200,15 @@ void ScMoveTableDlg::CheckNewTabName()
         return;
     }
 
-    bool   bFound = false;
+    bool bMoveInCurrentDoc = (aBtnMove.IsChecked() && IsCurrentDocSelected());
+    bool bFound = false;
     sal_uInt16 nLast  = aLbTable.GetEntryCount() - 1;
-    for ( sal_uInt16 i=0; i<=nLast; ++i )
+    for ( sal_uInt16 i=0; i<=nLast && !bFound; ++i )
     {
         if ( rNewName == aLbTable.GetEntry( i ) )
         {
-            if( ( aBtnMove.IsChecked() ) &&
-                ( aLbDoc.GetSelectEntryPos() == 0 ) &&
-                ( aEdTabName.GetText() == mrDefaultName) )
-
-                // Move inside same document, thus same name is allowed.
-                bFound = false;
-            else
+            // Only for move within same document the same name is allowed.
+            if (!bMoveInCurrentDoc || aEdTabName.GetText() != mrDefaultName)
                 bFound = true;
         }
     }
@@ -230,6 +232,11 @@ ScDocument* ScMoveTableDlg::GetSelectedDoc()
     return static_cast<ScDocument*>(aLbDoc.GetEntryData(nPos));
 }
 
+bool ScMoveTableDlg::IsCurrentDocSelected() const
+{
+    return aLbDoc.GetSelectEntryPos() == mnCurrentDocPos;
+}
+
 //------------------------------------------------------------------------
 
 void ScMoveTableDlg::Init()
@@ -270,7 +277,7 @@ void ScMoveTableDlg::InitDocListBox()
 
             if ( pScSh == SfxObjectShell::Current() )
             {
-                nSelPos = i;
+                mnCurrentDocPos = nSelPos = i;
                 aEntryName += sal_Unicode( ' ' );
                 aEntryName += String( ScResId( STR_CURRENTDOC ) );
             }
-- 
1.7.7.6