Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


On 14/04/12 22:20, julien2412 wrote:
Hello,

I reproduced the problem indicated by fdo#48368 and attached to the
bugtracker bt with symbols (see
https://bugs.freedesktop.org/attachment.cgi?id=59985&action=edit)

Here are the lines of basctl/source/basicide/basidesh.cxx which seem to
cause the problem :
     420         for ( sal_uLong nWin = 0; bCanClose&&  ( nWin<
aIDEWindowTable.size() ); nWin++ )
     421         {
     422             IDEBaseWindow* pWin = aIDEWindowTable[ nWin ];
     423             if ( !pWin->CanClose() )

I runned this on gdb and found this :
aIDEWindowTable.size() = 1 but even at the first loop, pWin is null so line
423 fails.

I searched about aIDEWindowTable and found this in
basctl/source/inc/basidesh.hxx :
      62 #if _SOLAR__PRIVATE
      63 typedef std::map<sal_uInt16, IDEBaseWindow*>  IDEWindowTable;
      64 #else
      65 typedef std::map<sal_uInt16, void*>  IDEWindowTable;
      66 #endif

So I propose this straight forward fix :
diff --git a/basctl/source/basicide/basidesh.cxx
b/basctl/source/basicide/basidesh.cxx
index e4dcd98..02e10c2 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -417,9 +417,9 @@ sal_uInt16 BasicIDEShell::PrepareClose( sal_Bool bUI,
sal_Bool bForBrowsing )
      else
      {
          sal_Bool bCanClose = sal_True;
-        for ( sal_uLong nWin = 0; bCanClose&&  ( nWin<
aIDEWindowTable.size() ); nWin++ )
+        for (IDEWindowTable::const_iterator it = aIDEWindowTable.begin();
bCanClose&&  (it != aIDEWindowTable.end()); ++it)
          {
-            IDEBaseWindow* pWin = aIDEWindowTable[ nWin ];
+            IDEBaseWindow* pWin = it->second;
              if ( !pWin->CanClose() )
              {
                  if ( !m_aCurLibName.isEmpty()&&  ( pWin->IsDocument(
m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) )

I can commit and push on master of course but I'd like first your opinion
about this.

please commit looks like the correct fix to me ( on a side note can anyone remember what ( #if _SOLAR__PRIVATE ) is all about, I can't see any reason for it in the context of this code in anycase :-/ and would be tempted to delete it. And btw thanks, always a pleasure to come back from vacation to see something from the to do list fixed by someone else :-))) thanks again!!

Noel



Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.