[Libreoffice-commits] core.git: Branch 'libreoffice-5-0-3' - svx/source vcl/source

Michael Meeks michael.meeks at collabora.com
Tue Oct 20 05:37:45 PDT 2015


 svx/source/tbxctrls/itemwin.cxx |   24 +++++++++++++++---------
 vcl/source/control/lstbox.cxx   |   20 +++++++++++++++++++-
 2 files changed, 34 insertions(+), 10 deletions(-)

New commits:
commit 3184baf770d56e212e0b0699fe7a12dff9985c8e
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Thu Oct 15 13:16:04 2015 +0100

    tdf#94495 - protect lstbox usage post-dispose, and fix ItemWin focus.
    
    Change-Id: I2e4d1c79f57ec048d66111ed393491b7803ee3b9
    Reviewed-on: https://gerrit.libreoffice.org/19389
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/svx/source/tbxctrls/itemwin.cxx b/svx/source/tbxctrls/itemwin.cxx
index 0b575c2..e4e207f 100644
--- a/svx/source/tbxctrls/itemwin.cxx
+++ b/svx/source/tbxctrls/itemwin.cxx
@@ -419,16 +419,19 @@ bool SvxFillTypeBox::PreNotify( NotifyEvent& rNEvt )
 {
     MouseNotifyEvent nType = rNEvt.GetType();
 
-    if ( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
-        nCurPos = GetSelectEntryPos();
-    else if ( MouseNotifyEvent::LOSEFOCUS == nType
-        && Application::GetFocusWindow()
-        && !IsWindowOrChild( Application::GetFocusWindow(), true ) )
+    if (!isDisposed())
     {
-        if ( !bSelect )
-            SelectEntryPos( nCurPos );
-        else
-            bSelect = false;
+        if ( MouseNotifyEvent::MOUSEBUTTONDOWN == nType || MouseNotifyEvent::GETFOCUS == nType )
+            nCurPos = GetSelectEntryPos();
+        else if ( MouseNotifyEvent::LOSEFOCUS == nType
+                  && Application::GetFocusWindow()
+                  && !IsWindowOrChild( Application::GetFocusWindow(), true ) )
+        {
+            if ( !bSelect )
+                SelectEntryPos( nCurPos );
+            else
+                bSelect = false;
+        }
     }
 
     return FillTypeLB::PreNotify( rNEvt );
@@ -440,6 +443,9 @@ bool SvxFillTypeBox::Notify( NotifyEvent& rNEvt )
 {
     bool nHandled = FillTypeLB::Notify( rNEvt );
 
+    if (isDisposed())
+        return false;
+
     if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
     {
         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx
index 9b0d5e5..1b0943b 100644
--- a/vcl/source/control/lstbox.cxx
+++ b/vcl/source/control/lstbox.cxx
@@ -982,6 +982,8 @@ void ListBox::DoubleClick()
 
 void ListBox::Clear()
 {
+    if (!mpImplLB)
+        return;
     mpImplLB->Clear();
     if( IsDropDownBox() )
     {
@@ -1037,13 +1039,15 @@ void ListBox::RemoveEntry( sal_Int32 nPos )
 
 Image ListBox::GetEntryImage( sal_Int32 nPos ) const
 {
-    if ( mpImplLB->GetEntryList()->HasEntryImage( nPos ) )
+    if ( mpImplLB && mpImplLB->GetEntryList()->HasEntryImage( nPos ) )
         return mpImplLB->GetEntryList()->GetEntryImage( nPos );
     return Image();
 }
 
 sal_Int32 ListBox::GetEntryPos( const OUString& rStr ) const
 {
+    if (!mpImplLB)
+        return LISTBOX_ENTRY_NOTFOUND;
     sal_Int32 nPos = mpImplLB->GetEntryList()->FindEntry( rStr );
     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
         nPos = nPos - mpImplLB->GetEntryList()->GetMRUCount();
@@ -1052,6 +1056,8 @@ sal_Int32 ListBox::GetEntryPos( const OUString& rStr ) const
 
 sal_Int32 ListBox::GetEntryPos( const void* pData ) const
 {
+    if (!mpImplLB)
+        return LISTBOX_ENTRY_NOTFOUND;
     sal_Int32 nPos = mpImplLB->GetEntryList()->FindEntry( pData );
     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
         nPos = nPos - mpImplLB->GetEntryList()->GetMRUCount();
@@ -1060,11 +1066,15 @@ sal_Int32 ListBox::GetEntryPos( const void* pData ) const
 
 OUString ListBox::GetEntry( sal_Int32 nPos ) const
 {
+    if (!mpImplLB)
+        return OUString();
     return mpImplLB->GetEntryList()->GetEntryText( nPos + mpImplLB->GetEntryList()->GetMRUCount() );
 }
 
 sal_Int32 ListBox::GetEntryCount() const
 {
+    if (!mpImplLB)
+        return 0;
     return mpImplLB->GetEntryList()->GetEntryCount() - mpImplLB->GetEntryList()->GetMRUCount();
 }
 
@@ -1075,11 +1085,16 @@ OUString ListBox::GetSelectEntry(sal_Int32 nIndex) const
 
 sal_Int32 ListBox::GetSelectEntryCount() const
 {
+    if (!mpImplLB)
+        return 0;
     return mpImplLB->GetEntryList()->GetSelectEntryCount();
 }
 
 sal_Int32 ListBox::GetSelectEntryPos( sal_Int32 nIndex ) const
 {
+    if (!mpImplLB || !mpImplLB->GetEntryList())
+        return LISTBOX_ENTRY_NOTFOUND;
+
     sal_Int32 nPos = mpImplLB->GetEntryList()->GetSelectEntryPos( nIndex );
     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     {
@@ -1107,6 +1122,9 @@ void ListBox::SelectEntry( const OUString& rStr, bool bSelect )
 
 void ListBox::SelectEntryPos( sal_Int32 nPos, bool bSelect )
 {
+    if (!mpImplLB)
+        return;
+
     if ( 0 <= nPos && nPos < mpImplLB->GetEntryList()->GetEntryCount() )
     {
         sal_Int32 oldSelectCount = GetSelectEntryCount(), newSelectCount = 0, nCurrentPos = mpImplLB->GetCurrentPos();


More information about the Libreoffice-commits mailing list