Fix Symbian bugs.
authorAkos Polster <akos@pipacs.com>
Sun, 21 Nov 2010 02:51:26 +0000 (03:51 +0100)
committerAkos Polster <akos@pipacs.com>
Sun, 21 Nov 2010 02:51:26 +0000 (03:51 +0100)
dorian.pro
main.cpp
pkg/changelog
pkg/symbian/clean.bat
widgets/flickcharm.cpp
widgets/listwindow.cpp
widgets/splash.cpp

index 538cd5e..d7ca844 100644 (file)
@@ -136,9 +136,20 @@ symbian {
     TARGET.UID3 = 0xA89FC85B\r
     TARGET.CAPABILITY = UserEnvironment NetworkServices ReadUserData \\r
         WriteUserData\r
-    TARGET.EPOCHEAPSIZE = 0x080000 0x4000000\r
+    TARGET.EPOCHEAPSIZE = 0x080000 0x8000000\r
     ICON = $$PWD/pkg/symbian/book.svg\r
-    # packageheader = "$${LITERAL_HASH}{\"Dorian\"}, (0xA89FC85B), 0, 3, 6"\r
+\r
+    # FIXME: Package header for Qt 4.6.2:\r
+    packageheader = \\r
+        "$${LITERAL_HASH}{\"Dorian\"},(0xA89FC85B),0,3,9" \\r
+        "[0x101F7961],0,0,0,{\"S60ProductID\"}" \\r
+        "[0x102032BE],0,0,0,{\"S60ProductID\"}" \\r
+        "[0x102752AE],0,0,0,{\"S60ProductID\"}" \\r
+        "[0x1028315F],0,0,0,{\"S60ProductID\"}"\r
+    default_deployment.pkg_prerules = packageheader\r
+\r
+    # FIXME: Package header for Qt 4.6.3 or later:\r
+    # packageheader = "$${LITERAL_HASH}{\"Dorian\"},(0xA89FC85B),0,3,9"\r
     # my_deployment.pkg_prerules = packageheader\r
     # DEPLOYMENT += my_deployment\r
 \r
index 3f56fbc..b655866 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -44,20 +44,23 @@ int main(int argc, char *argv[])
     Trace::setFileName(settings->value("tracefilename").toString());
     qInstallMsgHandler(Trace::messageHandler);
 
-#ifdef Q_OS_SYMBIAN
+#if 0 // def Q_OS_SYMBIAN
     // Show splash screen
     Splash *splash = new Splash();
     splash->showFullScreen();
+    // splash->showMaximized();
+    splash->raise();
     a.processEvents();
 #endif
 
-    // Create main window, re-apply settings, run event loop
+    // Create and initialize main window, then run event loop
     MainWindow *mainWindow = new MainWindow();
     settings->apply();
     mainWindow->initialize();
-#ifdef Q_OS_SYMBIAN
+#if 0 // def Q_OS_SYMBIAN
     splash->close();
-    splash->deleteLater();
+    delete splash;
+    mainWindow->showNormal();
 #endif
     ret = a.exec();
     delete mainWindow;
index b5549c5..327efca 100644 (file)
@@ -6,6 +6,9 @@ dorian (0.3.9-1) unstable; urgency=low
   * Fix Library window content scrolling [#6622]
   * Allow PNG cover images
   * Improve cover images
+  * Reduce speed of kinetic scrolling on Symbian
+  * Improve splash screen display on Symbian
+  * Add versioning to SIS package
 
  -- Akos Polster <akos@pipacs.com>  Wed, 17 Nov 2010 02:00:00 +0100
 
index 4c0565f..65b642a 100755 (executable)
@@ -11,7 +11,7 @@ if exist %src%\bld.inf del /q %src%\bld.inf
 if exist %src%\dorian.loc del /q %src%\dorian.loc\r
 if exist %src%\dorian.rss del /q %src%\dorian.rss\r
 if exist %src%\dorian.sis del /q %src%\dorian.sis\r
-if exist %src%\*.nmp del /q %src%\*.mmp\r
+if exist %src%\*.mmp del /q %src%\*.mmp\r
 if exist %src%\dorian_installer.pkg del /q %src%\dorian_installer.pkg\r
 if exist %src%\dorian_reg.rss del /q %src%\dorian_reg.rss\r
 if exist %src%\dorian_template.pkg del /q %src%\dorian_template.pkg\r
index 062a6f4..50abe68 100755 (executable)
 \r
 const int fingerAccuracyThreshold = 3;\r
 \r
+#ifdef Q_OS_SYMBIAN\r
+const int maxSpeed = 2000;\r
+const int maxSpeedAutoScroll = 1250;\r
+#else\r
+const int maxSpeed = 4000;\r
+const int maxSpeedAutoScroll = 2500;\r
+#endif\r
+\r
 struct FlickData {\r
     typedef enum {\r
         Steady, // Interaction without scrolling\r
@@ -97,7 +105,7 @@ struct FlickData {
                 const int newSpeedY = (qAbs(pixelsPerSecond.y()) > fingerAccuracyThreshold) ? pixelsPerSecond.y() : 0;\r
                 const int newSpeedX = (qAbs(pixelsPerSecond.x()) > fingerAccuracyThreshold) ? pixelsPerSecond.x() : 0;\r
                 if (state == AutoScrollAcceleration) {\r
-                    const int max = 4000; // px by seconds\r
+                    const int max = maxSpeedAutoScroll; // px by seconds\r
                     const int oldSpeedY = speed.y();\r
                     const int oldSpeedX = speed.x();\r
                     if ((oldSpeedY <= 0 && newSpeedY <= 0) ||  (oldSpeedY >= 0 && newSpeedY >= 0)\r
@@ -108,7 +116,7 @@ struct FlickData {
                         speed = QPoint();\r
                     }\r
                 } else {\r
-                    const int max = 2500; // px by seconds\r
+                    const int max = maxSpeed; // px by seconds\r
                     // we average the speed to avoid strange effects with the last delta\r
                     if (!speed.isNull()) {\r
                         speed.setX(qBound(-max, (speed.x() / 4) + (newSpeedX * 3 / 4), max));\r
index d26409d..3443024 100644 (file)
@@ -20,12 +20,16 @@ ListWindow::ListWindow(const QString &noItems_, QWidget *parent):
 
     list = new QListWidget(this);
     list->setSelectionMode(QAbstractItemView::SingleSelection);
+#if defined(Q_OS_SYMBIAN)
+    list->setFixedWidth(QApplication::desktop()->availableGeometry().width());
+    list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+#endif
     populateList();
     setCentralWidget(list);
 
 #ifdef Q_OS_SYMBIAN
     charm = new FlickCharm(this);
-    charm->activateOn(list);
+    // charm->activateOn(list);
     QAction *closeAction = new QAction(parent? tr("Back"): tr("Exit"), this);
     closeAction->setSoftKeyRole(QAction::NegativeSoftKey);
     connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
@@ -65,6 +69,7 @@ void ListWindow::insertButton(int row, const Button &b)
 {
     QPushButton *pushButton = new QPushButton(
         QIcon(Platform::instance()->icon(b.iconName)), b.title, this);
+    pushButton->setFixedWidth(list->width());
     connect(pushButton, SIGNAL(clicked()), b.receiver, b.slot);
     QListWidgetItem *item = new QListWidgetItem();
     item->setFlags(Qt::NoItemFlags);
@@ -98,14 +103,18 @@ void ListWindow::addButton(const QString &title, QObject *receiver,
 {
     TRACE;
 
+#ifdef Q_OS_SYMBIAN
+    Q_UNUSED(iconName);
+    addMenuAction(title, receiver, slot);
+#else
     Button b;
     b.title = title;
     b.receiver = receiver;
     b.slot = slot;
     b.iconName = iconName;
-
     insertButton(buttons.length(), b);
     buttons.append(b);
+#endif
 }
 
 QAction *ListWindow::addMenuAction(const QString &title, QObject *receiver,
@@ -134,6 +143,15 @@ QAction *ListWindow::addMenuAction(const QString &title, QObject *receiver,
 void ListWindow::onItemActivated(const QModelIndex &index)
 {
     TRACE;
+
+    // Work around Qt/Symbian^3 bug: Disabled list items still can be selected
+    if (!mModel) {
+        return;
+    }
+    if (!mModel->rowCount()) {
+        return;
+    }
+
     int row = index.row() - buttons.count();
     qDebug() << "Activated" << index.row() << ", emit activated(" << row << ")";
     emit activated(mModel->index(row, 0));
index 3c96c20..967a84f 100755 (executable)
@@ -4,6 +4,7 @@
 \r
 Splash::Splash(QWidget *parent): QMainWindow(parent)\r
 {\r
+\r
     QLabel *label = new QLabel(this);\r
     QRect geo = QApplication::desktop()->geometry();\r
     label->setGeometry(geo);\r