[Libreoffice-commits] core.git: vcl/aqua vcl/unx vcl/win

Herbert Dürr hdu at apache.org
Fri May 10 01:47:18 PDT 2013


 vcl/aqua/source/gdi/salnativewidgets.cxx     |    7 ++-----
 vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx     |    2 +-
 vcl/unx/kde/salnativewidgets-kde.cxx         |    6 +++---
 vcl/win/source/gdi/salnativewidgets-luna.cxx |    2 +-
 4 files changed, 7 insertions(+), 10 deletions(-)

New commits:
commit c2cb5f47f04cfce498943bad08d18b891c680f19
Author: Herbert Dürr <hdu at apache.org>
Date:   Thu Mar 21 15:27:40 2013 +0000

    Related: #i112873# check native widget's control value type...
    
    before converting to SpinbuttonValue or ScrollbarValue
    
    Else problems like #i112873# or even crashes can and do happen.
    
    (cherry picked from commit d2fde1d34c3c28572b1b6b4780269c15dd4c2bef)
    
    Conflicts:
    	vcl/unx/kde/salnativewidgets-kde.cxx
    
    Change-Id: I6429205ab41b3194577bc50aa02384c920e11ed2

diff --git a/vcl/aqua/source/gdi/salnativewidgets.cxx b/vcl/aqua/source/gdi/salnativewidgets.cxx
index 8e2ef02..3365c04 100644
--- a/vcl/aqua/source/gdi/salnativewidgets.cxx
+++ b/vcl/aqua/source/gdi/salnativewidgets.cxx
@@ -805,7 +805,7 @@ sal_Bool AquaSalGraphics::drawNativeControl(ControlType nType,
 
     case CTRL_SCROLLBAR:
         {
-            ScrollbarValue* pScrollbarVal = (ScrollbarValue *)&aValue;
+            const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
 
             if( nPart == PART_DRAW_BACKGROUND_VERT ||
                 nPart == PART_DRAW_BACKGROUND_HORZ )
@@ -1025,16 +1025,13 @@ sal_Bool AquaSalGraphics::drawNativeControl(ControlType nType,
                 if(nState & CTRL_STATE_FOCUSED) HIThemeDrawFocusRect(&rc, true, mrContext, kHIThemeOrientationNormal);
 
                 //buttons:
-                SpinbuttonValue* pSpinButtonVal = (SpinbuttonValue *)&aValue;
+                const SpinbuttonValue* pSpinButtonVal = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
                 ControlState nUpperState = CTRL_STATE_ENABLED;//state of the upper button
                 ControlState nLowerState = CTRL_STATE_ENABLED;//and of the lower button
                 if(pSpinButtonVal) {//pSpinButtonVal is sometimes null
                     nUpperState = (ControlState) pSpinButtonVal->mnUpperState;
                     nLowerState = (ControlState) pSpinButtonVal->mnLowerState;
-                }
 
-                if( pSpinButtonVal )
-                {
                     HIThemeButtonDrawInfo aSpinInfo;
                     aSpinInfo.kind = kThemeIncDecButton;
                     aSpinInfo.state = kThemeStateActive;
diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index 4ece2aa..29f7542 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -1749,7 +1749,7 @@ sal_Bool GtkSalGraphics::NWPaintGTKScrollbar( ControlType, ControlPart nPart,
                                           const OUString& )
 {
     OSL_ASSERT( aValue.getType() == CTRL_SCROLLBAR );
-    const ScrollbarValue* pScrollbarVal = static_cast<const ScrollbarValue *>(&aValue);
+    const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
     GdkPixmap*      pixmap = NULL;
     Rectangle        pixmapRect, scrollbarRect;
     GtkStateType    stateType;
diff --git a/vcl/unx/kde/salnativewidgets-kde.cxx b/vcl/unx/kde/salnativewidgets-kde.cxx
index dcce289..b1dd7f8 100644
--- a/vcl/unx/kde/salnativewidgets-kde.cxx
+++ b/vcl/unx/kde/salnativewidgets-kde.cxx
@@ -559,7 +559,7 @@ sal_Bool WidgetPainter::drawStyledWidget( QWidget *pWidget,
     }
     else if ( strcmp( QSpinWidget_String, pClassName ) == 0 )
     {
-        const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue *> ( &aValue );
+        const SpinbuttonValue* pValue = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
 
         // Is any of the buttons pressed?
         QStyle::SCFlags eActive = QStyle::SC_None;
@@ -648,7 +648,7 @@ sal_Bool WidgetPainter::drawStyledWidget( QWidget *pWidget,
     }
     else if ( strcmp( QScrollBar_String, pClassName ) == 0 )
     {
-    const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue );
+    const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
 
     QStyle::SCFlags eActive = QStyle::SC_None;
     if ( pValue )
@@ -1052,7 +1052,7 @@ QScrollBar *WidgetPainter::scrollBar( const Rectangle& rControlRegion,
     m_pScrollBar->resize( qRect.size() );
     m_pScrollBar->setOrientation( bHorizontal? Qt::Horizontal: Qt::Vertical );
 
-    const ScrollbarValue *pValue = static_cast<const ScrollbarValue *> ( &aValue );
+    const ScrollbarValue* pScrollbarVal = (aValue.getType() == CTRL_SCROLLBAR) ? static_cast<const ScrollbarValue*>(&aValue) : NULL;
     if ( pValue )
     {
         m_pScrollBar->setMinValue( pValue->mnMin );
diff --git a/vcl/win/source/gdi/salnativewidgets-luna.cxx b/vcl/win/source/gdi/salnativewidgets-luna.cxx
index 842d06d..07f0fb9 100644
--- a/vcl/win/source/gdi/salnativewidgets-luna.cxx
+++ b/vcl/win/source/gdi/salnativewidgets-luna.cxx
@@ -650,7 +650,7 @@ sal_Bool ImplDrawNativeControl( HDC hDC, HTHEME hTheme, RECT rc,
     {
         if( aValue.getType() == CTRL_SPINBUTTONS )
         {
-            const SpinbuttonValue *pValue = static_cast<const SpinbuttonValue*>(&aValue);
+            const SpinbuttonValue* pValue = (aValue.getType() == CTRL_SPINBUTTONS) ? static_cast<const SpinbuttonValue*>(&aValue) : NULL;
             sal_Bool bOk = sal_False;
 
             RECT rect;


More information about the Libreoffice-commits mailing list