diff -r 730c025d4b77 -r f378acbc9cfb src/hbcore/gui/hbabstractbutton.cpp --- a/src/hbcore/gui/hbabstractbutton.cpp Thu Jul 15 14:03:49 2010 +0100 +++ b/src/hbcore/gui/hbabstractbutton.cpp Thu Jul 22 16:36:53 2010 +0100 @@ -29,6 +29,7 @@ #include "hbstyleoption_p.h" #include "hbtooltip.h" #include "hbinstance.h" +#include "hbnamespace_p.h" #include #include #include @@ -210,11 +211,11 @@ //In that case, the distance in the direction will be used as significant score, //take also in account orthogonal distance in case two widget are in the same distance. int score; - if ((buttonRect.x() < target.right() && target.x() < buttonRect.right()) + if ( keyNavigation() && (buttonRect.x() < target.right() && target.x() < buttonRect.right()) && (key == Qt::Key_Up || key == Qt::Key_Down)) { //one item's is at the vertical of the other score = (qAbs(p.y() - goal.y()) << 16) + qAbs(p.x() - goal.x()); - } else if ((buttonRect.y() < target.bottom() && target.y() < buttonRect.bottom()) + } else if ( keyNavigation() && (buttonRect.y() < target.bottom() && target.y() < buttonRect.bottom()) && (key == Qt::Key_Left || key == Qt::Key_Right) ) { //one item's is at the horizontal of the other score = (qAbs(p.x() - goal.x()) << 16) + qAbs(p.y() - goal.y()); @@ -224,46 +225,45 @@ if (score > bestScore && candidate) continue; - - switch(key) { - case Qt::Key_Up: - if (p.y() < goal.y()) { - candidate = button; - bestScore = score; - } - break; - case Qt::Key_Down: - if (p.y() > goal.y()) { - candidate = button; - bestScore = score; + if ( keyNavigation()) { + switch(key) { + case Qt::Key_Up: + if (p.y() < goal.y()) { + candidate = button; + bestScore = score; + } + break; + case Qt::Key_Down: + if (p.y() > goal.y()) { + candidate = button; + bestScore = score; + } + break; + case Qt::Key_Left: + if (p.x() < goal.x()) { + candidate = button; + bestScore = score; + } + break; + case Qt::Key_Right: + if (p.x() > goal.x()) { + candidate = button; + bestScore = score; + } + break; } - break; - case Qt::Key_Left: - if (p.x() < goal.x()) { - candidate = button; - bestScore = score; - } - break; - case Qt::Key_Right: - if (p.x() > goal.x()) { - candidate = button; - bestScore = score; - } - break; } } } if (exclusive -#ifdef QT_KEYPAD_NAVIGATION - && !QApplication::keypadNavigationEnabled() -#endif + && !keyNavigation() && candidate && focusButton->isChecked() && candidate->isCheckable()) candidate->click(); - if (candidate) { + if ( keyNavigation() && candidate) { if (key == Qt::Key_Up || key == Qt::Key_Left) candidate->setFocus(Qt::BacktabFocusReason); else @@ -953,42 +953,47 @@ Q_D(HbAbstractButton); if (HbTapGesture *tap = qobject_cast(event->gesture(Qt::TapGesture))) { - bool hit = hitButton(mapFromScene(event->mapToGraphicsScene(tap->position()))); + switch(tap->state()) { + case Qt::GestureStarted: + scene()->setProperty(HbPrivate::OverridingGesture.latin1(),Qt::TapGesture); + if (!tap->property(HbPrivate::ThresholdRect.latin1()).toRect().isValid()) { + tap->setProperty(HbPrivate::ThresholdRect.latin1(), mapRectToScene(boundingRect()).toRect()); + } + setDown(true); + HbWidgetFeedback::triggered(this, Hb::InstantPressed); + updatePrimitives(); + d->emitPressed(); + + break; + case Qt::GestureCanceled: + scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant()); - switch(tap->state()) { - case Qt::GestureStarted: - setDown(true); - HbWidgetFeedback::triggered(this, Hb::InstantPressed); - updatePrimitives(); - d->emitPressed(); - break; - case Qt::GestureCanceled: - if(d->down) { - HbWidgetFeedback::triggered(this, Hb::InstantReleased); - setDown(false); - d->longPress = false; - d->emitReleased(); - } - break; - case Qt::GestureFinished: - if (!d->down) { - return; - } - if ( hit && !d->longPress) { + if(d->down) { + HbWidgetFeedback::triggered(this, Hb::InstantReleased); + setDown(false); + d->longPress = false; + d->emitReleased(); + } + break; + case Qt::GestureFinished: + scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant()); + + if (!d->down){ + return; + } + HbWidgetFeedback::triggered(this, Hb::InstantClicked); - } - HbWidgetFeedback::triggered(this, Hb::InstantReleased); - if ( hit ) { + + d->repeatTimer.stop(); d->click(); - } else { - setDown(false); + + HbWidgetFeedback::triggered(this, Hb::InstantReleased); + d->longPress = false; + break; + default: + break; } - d->longPress = false; - break; - default: - break; - } } } #endif @@ -1014,26 +1019,28 @@ break; case Qt::Key_Up: case Qt::Key_Left: - next = false; + if ( d->keyNavigation() ) { + next = false; + } // fall through case Qt::Key_Right: case Qt::Key_Down: -#ifdef QT_KEYPAD_NAVIGATION - if (QApplication::keypadNavigationEnabled() && (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right)) { - event->ignore(); - return; - } -#endif - if (d->autoExclusive) { - // ### Using qobject_cast to check if the parent is a viewport of - // QAbstractItemView is a crude hack, and should be revisited and - // cleaned up when fixing task 194373. It's here to ensure that we - // keep compatibility outside QAbstractItemView. - d->moveFocus(event->key()); - if (hasFocus()) // nothing happend, propagate + if ( d->keyNavigation() ) { + if ( d->keyNavigation() && (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right)) { event->ignore(); - } else { - focusNextPrevChild(next); + return; + } + if (d->autoExclusive) { + // ### Using qobject_cast to check if the parent is a viewport of + // QAbstractItemView is a crude hack, and should be revisited and + // cleaned up when fixing task 194373. It's here to ensure that we + // keep compatibility outside QAbstractItemView. + d->moveFocus(event->key()); + if (hasFocus()) // nothing happend, propagate + event->ignore(); + } else { + focusNextPrevChild(next); + } } break; case Qt::Key_Escape: