diff -r e4f038c420f7 -r 3ac3aaebaee5 homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp --- a/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp Mon Sep 13 13:03:23 2010 +0300 +++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hsviewappdetailsstate.cpp Mon Sep 20 10:19:07 2010 +0300 @@ -31,7 +31,7 @@ #include "hsviewappdetailsstate.h" #include "hsmenuevent.h" #include "hsmenuitemmodel.h" -#include "hsmenuentryremovedhandler.h" +#include "hsdialogcontroller.h" static const char *const HS_VIEWAPPDETAILS_JAVA_DIALOG_SECTION_NAME= "detailsDialogForJavaApplication"; @@ -41,7 +41,7 @@ /param parent Parent state. */ HsViewAppDetailsState::HsViewAppDetailsState(QState *parent) : - QState(parent), mDialog(0) + QState(parent) { construct(); } @@ -51,7 +51,10 @@ */ HsViewAppDetailsState::~HsViewAppDetailsState() { - delete mDialog; + QT_TRY { + emit exit(); + } QT_CATCH (...) { + } } /*! @@ -82,7 +85,7 @@ QSharedPointer entry = CaService::instance()->getEntry(entryId); if (!entry) { - stateExited(); + emit exit(); return; } const int componentId = entry->attribute( @@ -96,7 +99,7 @@ //TODO: Should we display something In that case? if (detailMap.size() < 1){ - stateExited(); + emit exit(); return; } @@ -112,13 +115,12 @@ section, &loadStatusOk); } - mDialog = qobject_cast( - loader.findWidget(HS_DETAILS_DIALOG_NAME)); + QScopedPointer dialog(qobject_cast( + loader.findWidget(HS_DETAILS_DIALOG_NAME))); - if (mDialog != NULL) { - mDialog->setTimeout(HbPopup::NoTimeout); - mDialog->setAttribute(Qt::WA_DeleteOnClose, true); - mDialog->actions()[0]->setParent(mDialog); + if (!dialog.isNull()) { + dialog->setTimeout(HbPopup::NoTimeout); + dialog->actions()[0]->setParent(dialog.data()); setFieldPresentation(CaSoftwareRegistry::componentNameKey(), detailMap, loader); @@ -140,14 +142,24 @@ detailMap, loader); } - QScopedPointer entryObserver( - new HsMenuEntryRemovedHandler(entryId, this, SIGNAL(exit()))); + QScopedPointer dialogController( + new HsDialogController(dialog.take(), + HsMenuDialogFactory::acceptActionIndex(), + HsMenuDialogFactory::rejectActionIndex())); - entryObserver.take()->setParent(mDialog); + connect(dialogController.data(), + SIGNAL(dialogCompleted()), + this, + SIGNAL(exit())); - mDialog->open(this, SLOT(stateExited())); + // ensure dialog is dismissed on app key pressed + connect(this, SIGNAL(exited()), + dialogController.data(), + SLOT(dismissDialog())); + + dialogController.take()->openDialog(entryId); } else { - stateExited(); + emit exit(); } HSMENUTEST_FUNC_EXIT("HsViewAppDetailsState::onEntry"); } @@ -179,28 +191,5 @@ } } -/*! - Slot invoked when a state is exited. - */ -void HsViewAppDetailsState::stateExited() -{ - HSMENUTEST_FUNC_ENTRY("HsViewAppDetailsState::stateExited"); - emit exit(); - HSMENUTEST_FUNC_EXIT("HsViewAppDetailsState::stateExited"); - qDebug("HsViewAppDetailsState::stateExited()"); -} -/*! - Invoked on exiting state - */ -void HsViewAppDetailsState::onExit(QEvent *event) -{ - QState::onExit(event); - // Close popups if App key was pressed or - // memory card removed - if (mDialog != NULL) { - mDialog->close(); - mDialog = NULL; - } -}