--- a/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmainwindow.cpp Thu Jun 24 13:11:40 2010 +0100
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/src/hsmainwindow.cpp Fri Jun 25 19:19:22 2010 +0300
@@ -21,10 +21,22 @@
#include "hsmainwindow.h"
#include "hsmenuview.h"
+#include <qservicemanager.h>
/*!
Constructor
*/
-HsMainWindow::HsMainWindow()
+QTM_USE_NAMESPACE
+
+
+/*
+ * A word about HsMainWindow class.
+ * This is not an utility class. It was designed to isolate HbMainWindow connected code, so
+ * it can be substitued in MT for application library. Unfortunately it seems to be the best
+ * way to cope with HbMainWindow problem in MT.
+ */
+
+
+HsMainWindow::HsMainWindow() : mActivityClient(NULL)
{
}
@@ -43,17 +55,64 @@
{
HbMainWindow *const hbW(
HbInstance::instance()->allMainWindows().value(0));
+
+ connect( hbW, SIGNAL(viewReady()), SIGNAL(viewIsReady()),
+ Qt::UniqueConnection );
HbView *const view = menuView.view();
if (!hbW->views().contains(view)) {
hbW->addView(view);
}
- if (hbW->currentView() && !hbW->currentView()->isContentFullScreen()) {
- // quick trick to know if we are not comming from IDLE
- hbW->setCurrentView(view, true, Hb::ViewSwitchUseAltEvent);
- } else {
- hbW->setCurrentView(view);
- }
+ hbW->setCurrentView(view);
}
+
+/*!
+ Grabs screenshot from actual main window
+ \retval QPixmap& containing screenshot
+*/
+QPixmap HsMainWindow::grabScreenshot()
+ {
+ HbMainWindow *const hbW(
+ HbInstance::instance()->allMainWindows().value(0));
+ return QPixmap::grabWidget(hbW, hbW->rect());
+ }
+
+/*!
+ Saves applib activity with current view screenshot
+*/
+void HsMainWindow::saveActivity()
+{
+#ifdef Q_OS_SYMBIAN
+
+ if (!mActivityClient) {
+ QServiceManager serviceManager;
+ mActivityClient = serviceManager.loadInterface("com.nokia.qt.activities.ActivityClient");
+ if (!mActivityClient) {
+ qWarning("Cannot initialize critical com.nokia.qt.activities.ActivityClient service.");
+ }
+ }
+
+ if (mActivityClient) {
+ bool retok;
+ bool ok = QMetaObject::invokeMethod(mActivityClient, "removeActivity",
+ Q_RETURN_ARG(bool, retok), Q_ARG(QString, appLibActivity()));
+ if (!ok) {
+ qWarning("remove appLibActivity failed");
+ }
+
+ QVariant variant;
+ QVariantHash metadata;
+ metadata.insert("screenshot", grabScreenshot());
+
+ ok = QMetaObject::invokeMethod(mActivityClient, "addActivity", Q_RETURN_ARG(bool, retok),
+ Q_ARG(QString, appLibActivity() ), Q_ARG(QVariant, QVariant(variant)),
+ Q_ARG(QVariantHash, metadata));
+ if (!ok) {
+ qWarning("add appLibActivity failed");
+ }
+ }
+#endif//Q_OS_SYMBIAN
+}
+