Branch: master

93b3efa8 2014-08-07 13:08:29 Timothy Pearson
Refresh control element data structures before executing style object event handlers
This resolves Bug 1816
Fix FTBFS in style examples
M examples/themes/metal.cpp
M examples/themes/metal.h
M examples/themes/wood.cpp
M examples/themes/wood.h
M src/kernel/qstyle.cpp
diff --git a/examples/themes/metal.cpp b/examples/themes/metal.cpp
index 636e562..4a8bac8 100644
--- a/examples/themes/metal.cpp
+++ b/examples/themes/metal.cpp
@@ -41,7 +41,7 @@
 /*!
   Reimplementation from QStyle
  */
-void MetalStyle::applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void MetalStyle::applicationPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	oldPalette = ceData.palette;
 	
@@ -99,7 +99,7 @@
 /*!
   Reimplementation from QStyle
  */
-void MetalStyle::applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void MetalStyle::applicationUnPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	applicationActionRequest(ceData, elementFlags, ptr, AAR_SetPalette, QStyleApplicationActionRequestData(oldPalette, TRUE));
 	applicationActionRequest(ceData, elementFlags, ptr, AAR_SetFont, QStyleApplicationActionRequestData(ceData.font, TRUE));
@@ -108,7 +108,7 @@
 /*!
   Reimplementation from QStyle
  */
-void MetalStyle::polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void MetalStyle::polish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	// the polish function sets some widgets to transparent mode and
 	// some to translate background mode in order to get the full
@@ -126,7 +126,7 @@
 	}
 }
 
-void MetalStyle::unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void MetalStyle::unPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	// the polish function sets some widgets to transparent mode and
 	// some to translate background mode in order to get the full
@@ -145,7 +145,7 @@
 
 void MetalStyle::drawPrimitive( PrimitiveElement pe,
 				QPainter *p,
-				QStyleControlElementData ceData,
+				const QStyleControlElementData &ceData,
 				ControlElementFlags elementFlags,
 				const QRect &r,
 				const QColorGroup &cg,
@@ -191,7 +191,7 @@
 
 void MetalStyle::drawControl( ControlElement element,
 			      QPainter *p,
-			      QStyleControlElementData ceData,
+			      const QStyleControlElementData &ceData,
 			      ControlElementFlags elementFlags,
 			      const QRect &r,
 			      const QColorGroup &cg,
@@ -292,7 +292,7 @@
 }
 void MetalStyle::drawComplexControl( ComplexControl cc,
 				     QPainter *p,
-				     QStyleControlElementData ceData,
+				     const QStyleControlElementData &ceData,
 				     ControlElementFlags elementFlags,
 				     const QRect &r,
 				     const QColorGroup &cg,
@@ -468,7 +468,7 @@
 
 
 
-int MetalStyle::pixelMetric( PixelMetric metric, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QWidget *w ) const
+int MetalStyle::pixelMetric( PixelMetric metric, const QStyleControlElementData &ceData, ControlElementFlags elementFlags, const QWidget *w ) const
 {
     switch ( metric ) {
     case PM_MenuBarFrameWidth:
diff --git a/examples/themes/metal.h b/examples/themes/metal.h
index 46257f6..5e20657 100644
--- a/examples/themes/metal.h
+++ b/examples/themes/metal.h
@@ -26,14 +26,14 @@
 {
 public:
     MetalStyle();
-    void applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+    void applicationPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void applicationUnPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void polish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void unPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
 
     void drawPrimitive( PrimitiveElement pe,
 			QPainter *p,
-			QStyleControlElementData ceData,
+			const QStyleControlElementData &ceData,
 			ControlElementFlags elementFlags,
 			const QRect &r,
 			const QColorGroup &cg,
@@ -42,7 +42,7 @@
 
     void drawControl( ControlElement element,
 		      QPainter *p,
-		      QStyleControlElementData ceData,
+		      const QStyleControlElementData &ceData,
 		      ControlElementFlags elementFlags,
 		      const QRect &r,
 		      const QColorGroup &cg,
@@ -52,7 +52,7 @@
 
     void drawComplexControl( ComplexControl cc,
 			     QPainter *p,
-			     QStyleControlElementData ceData,
+			     const QStyleControlElementData &ceData,
 			     ControlElementFlags elementFlags,
 			     const QRect &r,
 			     const QColorGroup &cg,
@@ -61,7 +61,7 @@
 			     SCFlags subActive = SC_None,
 			     const QStyleOption& = QStyleOption::Default,
 			     const QWidget *widget = 0 ) const;
-    int pixelMetric( PixelMetric, QStyleControlElementData ceData, ControlElementFlags elementFlags, const QWidget * = 0 ) const;
+    int pixelMetric( PixelMetric, const QStyleControlElementData &ceData, ControlElementFlags elementFlags, const QWidget * = 0 ) const;
 
 
 private:
diff --git a/examples/themes/wood.cpp b/examples/themes/wood.cpp
index 085fdea..11af503 100644
--- a/examples/themes/wood.cpp
+++ b/examples/themes/wood.cpp
@@ -769,7 +769,7 @@
 /*!
   Reimplementation from QStyle
  */
-void NorwegianWoodStyle::applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void NorwegianWoodStyle::applicationPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	oldPalette = ceData.palette;
 	
@@ -871,7 +871,7 @@
 	applicationActionRequest(ceData, elementFlags, ptr, AAR_SetPalette, QStyleApplicationActionRequestData(QPalette(active, disabled, active), TRUE));
 }
 
-void NorwegianWoodStyle::applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void NorwegianWoodStyle::applicationUnPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	applicationActionRequest(ceData, elementFlags, ptr, AAR_SetPalette, QStyleApplicationActionRequestData(oldPalette, TRUE));
 }
@@ -879,7 +879,7 @@
 /*!
   Reimplementation from QStyle
  */
-void NorwegianWoodStyle::polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void NorwegianWoodStyle::polish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	// the polish function sets some widgets to transparent mode and
 	// some to translate background mode in order to get the full
@@ -896,7 +896,7 @@
 	}
 }
 
-void NorwegianWoodStyle::unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void *ptr )
+void NorwegianWoodStyle::unPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void *ptr )
 {
 	// the polish function sets some widgets to transparent mode and
 	// some to translate background mode in order to get the full
@@ -915,7 +915,7 @@
 
 void NorwegianWoodStyle::drawPrimitive( PrimitiveElement pe,
 					QPainter *p,
-					QStyleControlElementData ceData,
+					const QStyleControlElementData &ceData,
 					ControlElementFlags elementFlags,
 					const QRect &r,
 					const QColorGroup &cg,
@@ -986,7 +986,7 @@
 
 void NorwegianWoodStyle::drawControl( ControlElement element,
 				      QPainter *p,
-				      QStyleControlElementData ceData,
+				      const QStyleControlElementData &ceData,
 				      ControlElementFlags elementFlags,
 				      const QRect &r,
 				      const QColorGroup &cg,
@@ -1095,7 +1095,7 @@
 
 void NorwegianWoodStyle::drawControlMask( ControlElement element,
 					  QPainter *p,
-					  QStyleControlElementData ceData,
+					  const QStyleControlElementData &ceData,
 					  ControlElementFlags elementFlags,
 					  const QRect &r,
 					  const QStyleOption& opt,
@@ -1118,7 +1118,7 @@
 
 void NorwegianWoodStyle::drawComplexControl( ComplexControl cc,
 					     QPainter *p,
-					     QStyleControlElementData ceData,
+					     const QStyleControlElementData &ceData,
 					     ControlElementFlags elementFlags,
 					     const QRect &r,
 					     const QColorGroup &cg,
@@ -1192,7 +1192,7 @@
 }
 
 QRect NorwegianWoodStyle::querySubControlMetrics( ComplexControl control,
-						  QStyleControlElementData ceData,
+						  const QStyleControlElementData &ceData,
 						  ControlElementFlags elementFlags,
 						  SubControl sc,
 						  const QStyleOption& opt,
@@ -1250,7 +1250,7 @@
     return rect;
 }
 
-QRect NorwegianWoodStyle::subRect( SubRect sr, const QStyleControlElementData ceData, const ControlElementFlags elementFlags, const QWidget * widget ) const
+QRect NorwegianWoodStyle::subRect( SubRect sr, const QStyleControlElementData &ceData, const ControlElementFlags elementFlags, const QWidget * widget ) const
 {
     QRect r;
     switch ( sr ) {
@@ -1355,7 +1355,7 @@
 static inline int buttonthickness( int d )
 { return  d > 20 ? 5 : ( d < 10 ? 2: 3 ); }
 
-void NorwegianWoodStyle::drawSemicircleButton( QPainter *p, QStyleControlElementData ceData,
+void NorwegianWoodStyle::drawSemicircleButton( QPainter *p, const QStyleControlElementData &ceData,
 					       ControlElementFlags elementFlags, const QRect &r,
 					       int dir, bool sunken,
 					       const QColorGroup &g ) const
diff --git a/examples/themes/wood.h b/examples/themes/wood.h
index 3d7b0e6..c5f6720 100644
--- a/examples/themes/wood.h
+++ b/examples/themes/wood.h
@@ -26,14 +26,14 @@
 {
 public:
     NorwegianWoodStyle();
-    void applicationPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void polish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void unPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
-    void applicationUnPolish( QStyleControlElementData ceData, ControlElementFlags elementFlags, void * );
+    void applicationPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void polish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void unPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
+    void applicationUnPolish( const QStyleControlElementData &ceData, ControlElementFlags elementFlags, void * );
 
     void drawPrimitive( PrimitiveElement pe,
 			QPainter *p,
-			QStyleControlElementData ceData,
 ** Diff limit reached (max: 250 lines) **