--- a/src/hbwidgets/widgets/hbcombodropdown_p.cpp Tue Jul 06 14:36:53 2010 +0300
+++ b/src/hbwidgets/widgets/hbcombodropdown_p.cpp Wed Aug 18 10:05:37 2010 +0300
@@ -28,10 +28,12 @@
#include "hbwidget_p.h"
#include <hblistview.h>
#include <hbwidgetfeedback.h>
+#include <hbinputvirtualkeyboard.h>
#include <hbtapgesture.h>
#include <hbpangesture.h>
#include <QGestureEvent>
+#include <QGraphicsSceneMouseEvent>
class HbComboDropDownPrivate : public HbWidgetPrivate
{
@@ -44,7 +46,7 @@
backgroundPressed( false )
{
Q_D(HbComboDropDown);
- d->setBackgroundItem(HbStyle::P_ComboBoxPopup_background);
+ d->setBackgroundItem(HbStylePrivate::P_ComboBoxPopup_background);
#if QT_VERSION >= 0x040600
//this is to keep the focus in the previous widget.
setFlag( QGraphicsItem::ItemIsPanel, true );
@@ -54,7 +56,6 @@
HbComboDropDown::~HbComboDropDown( )
{
-
}
void HbComboDropDown::createList( )
@@ -85,18 +86,44 @@
Q_UNUSED( obj );
bool accepted = false;
- if ( isVisible( ) && !vkbOpened ) {
+ if ( isVisible( ) ) {
switch( event->type( ) )
{
case QEvent::GraphicsSceneMousePress:
case QEvent::GraphicsSceneMouseDoubleClick:
{
- if( !( this->isUnderMouse( ) ) ) {
- HbWidgetFeedback::triggered( this, Hb::InstantPopupClosed );
- setVisible( false );
- comboPrivate->q_ptr->setProperty("state","normal");
- backgroundPressed = true;
- accepted = true;
+ if( !vkbOpened ) {
+ //if vkb is not opened and dropdown is not clicked then dismiss drop down
+ if( !( this->isUnderMouse( ) ) ) {
+ HbWidgetFeedback::triggered( this, Hb::InstantPopupClosed );
+ setVisible( false );
+ comboPrivate->q_ptr->setProperty("state","normal");
+ backgroundPressed = true;
+ accepted = true;
+ }
+ } else {
+ //if vkb is opened then dismiss drop down only if click happened outside drop down and
+ //vkb area
+ if( comboPrivate->mEditable ) {
+ HbEditorInterface editorInterface( comboPrivate->q_ptr );
+ HbVkbHost *host = editorInterface.vkbHost( );
+ if( host ) {
+ //get the scene rect of vkb
+ QGraphicsWidget *vkbWidget = host->activeKeypad( )->asGraphicsWidget( );
+ QRectF tmp = host->applicationArea( );
+ QRectF vkbArea = vkbWidget->mapToScene( tmp ).boundingRect( );
+ QGraphicsSceneMouseEvent *mouseEvent =
+ static_cast< QGraphicsSceneMouseEvent * >( event );
+ if( !( this->isUnderMouse( ) ) &&
+ !vkbArea.contains( mouseEvent->scenePos( ) ) ) {
+ HbWidgetFeedback::triggered( this, Hb::InstantPopupClosed );
+ setVisible( false );
+ comboPrivate->q_ptr->setProperty( "state", "normal" );
+ backgroundPressed = true;
+ accepted = true;
+ }
+ }
+ }
}
}
break;
@@ -124,5 +151,19 @@
return accepted;
}
+QVariant HbComboDropDown::itemChange( GraphicsItemChange change, const QVariant & value )
+{
+ switch( change ) {
+ case QGraphicsItem::ItemVisibleHasChanged:
+ if( !value.toBool( ) ) {
+ comboPrivate->resetGeometryChangeFlag( );
+ }
+ break;
+ default:
+ break;
+ }
+ return HbWidget::itemChange( change, value );
+}
+
#include "moc_hbcombodropdown_p.cpp"