src/hbwidgets/widgets/hbpushbutton.cpp
changeset 28 b7da29130b0e
parent 23 e6ad4ef83b23
--- a/src/hbwidgets/widgets/hbpushbutton.cpp	Thu Sep 02 20:44:51 2010 +0300
+++ b/src/hbwidgets/widgets/hbpushbutton.cpp	Fri Sep 17 08:32:10 2010 +0300
@@ -258,13 +258,6 @@
             q->grabGesture(Qt::TapGesture);
         }
     }
-
-    if( !focusItem ) {
-        focusItem = HbStylePrivate::createPrimitive(HbStylePrivate::P_PushButton_focus, q);
-        //focus primitive is will not be visible by default, 
-        //only in case of keyboard focus events it will be Visible.
-        focusItem->setVisible( false );
-    }
 }
 
 void HbPushButtonPrivate::_q_handleLongKeyPress( )
@@ -680,21 +673,31 @@
 void HbPushButton::recreatePrimitives()
 {
    Q_D( HbPushButton );
-  HbWidget::recreatePrimitives();
-
-   delete d->frameItem;
-   d->frameItem = 0;
-   delete d->iconItem;
-   d->iconItem = 0;
-   delete d->textItem;
-   d->textItem = 0;
-   delete d->touchArea;
-   d->touchArea = 0;
-   delete d->additionalTextItem;
-   d->additionalTextItem = 0;
-   delete d->focusItem;
-   d->focusItem = 0;
-   
+   HbWidget::recreatePrimitives();
+   if ( d->frameItem ) {
+       delete d->frameItem;
+       d->frameItem = 0;
+   }
+   if ( d->iconItem ) {
+       delete d->iconItem;
+       d->iconItem = 0;
+   }
+   if ( d->textItem ) {
+       delete d->textItem ;
+       d->textItem = 0;
+   }
+   if ( d->touchArea ) {
+       delete d->touchArea ;
+       d->touchArea = 0;
+   }
+   if ( d->additionalTextItem ) {
+       delete d->additionalTextItem ;
+       d->additionalTextItem = 0;
+   }
+   if ( d->focusItem ) {
+       delete d->focusItem ;
+       d->focusItem = 0;
+   }
    d->createPrimitives( );
    setFrameBackground( 0 );
 }
@@ -706,9 +709,25 @@
 {
     Q_D( HbPushButton );
     HbWidget::updatePrimitives( );
-
     HbStyleOptionPushButton buttonOption;
     initStyleOption(&buttonOption);
+    //update the button color property information 
+    if ( d->checkable ) { 
+        if ( d->checked ) {
+            setProperty( "state", "latched" );
+        }
+        else {
+            setProperty( "state", "normal" );
+        }
+    }
+    else{
+        if ( d->down ) {
+            setProperty( "state", "pressed" );
+        }
+        else {
+            setProperty( "state", "normal" );
+        }
+    }
     if ( d->textItem ) {
         HbStylePrivate::updatePrimitive( d->textItem, HbStylePrivate::P_PushButton_text, &buttonOption );
     }
@@ -917,11 +936,11 @@
 #ifdef HB_EFFECTS
                     HbEffect::start( this, HB_PUSHBUTTON_TYPE, "pressed" );
 #endif
-                    if( d->checkable && !d->checked) {
+                   /* if( d->checkable && !d->checked) {
                         setProperty( "state", "latched" );
                     }else if(!d->checkable) {
                         setProperty( "state", "pressed" );
-                    }
+                    }*/
                 }
                 break;
             case Qt::GestureUpdated:
@@ -939,11 +958,11 @@
                     HbEffect::start( this, HB_PUSHBUTTON_TYPE, "released" );
 #endif
                 }
-                if( d->checkable && !d->checked) {
+                /*if( d->checkable && !d->checked) {
                     setProperty( "state", "latched" );
                 }else {
                     setProperty( "state", "normal" );
-                }
+                }*/
                 break;
             default:
                 break;
@@ -985,15 +1004,15 @@
     Q_D( HbPushButton );
     if( ( event->reason() == Qt::TabFocusReason || event->reason() == Qt::BacktabFocusReason ) 
         && ( d->navigationKeyPress ) ) {
-        if( d->focusItem ) {
+        if( !d->focusItem ) {
+            d->focusItem = HbStylePrivate::createPrimitive(HbStylePrivate::P_PushButton_focus, this);
+        } else {
             d->focusItem->setVisible( true );
             if( hasFocus() ) {
                 HbStyleOptionPushButton buttonOption;
                 initStyleOption( &buttonOption );
                 HbStylePrivate::updatePrimitive( d->focusItem,HbStylePrivate::P_PushButton_focus, &buttonOption );
-            }
-        } else {
-            d->focusItem = HbStylePrivate::createPrimitive(HbStylePrivate::P_PushButton_focus, this);
+            }            
         }
     }
     HbAbstractButton::focusInEvent( event );