From 3d0659ab675c4cadfa6cec67123512f25b380531 Mon Sep 17 00:00:00 2001 From: Akos Polster Date: Sun, 21 Nov 2010 03:51:26 +0100 Subject: [PATCH] Fix Symbian bugs. --- dorian.pro | 15 +++++++++++++-- main.cpp | 11 +++++++---- pkg/changelog | 3 +++ pkg/symbian/clean.bat | 2 +- widgets/flickcharm.cpp | 12 ++++++++++-- widgets/listwindow.cpp | 22 ++++++++++++++++++++-- widgets/splash.cpp | 1 + 7 files changed, 55 insertions(+), 11 deletions(-) diff --git a/dorian.pro b/dorian.pro index 538cd5e..d7ca844 100644 --- a/dorian.pro +++ b/dorian.pro @@ -136,9 +136,20 @@ symbian { TARGET.UID3 = 0xA89FC85B TARGET.CAPABILITY = UserEnvironment NetworkServices ReadUserData \ WriteUserData - TARGET.EPOCHEAPSIZE = 0x080000 0x4000000 + TARGET.EPOCHEAPSIZE = 0x080000 0x8000000 ICON = $$PWD/pkg/symbian/book.svg - # packageheader = "$${LITERAL_HASH}{\"Dorian\"}, (0xA89FC85B), 0, 3, 6" + + # FIXME: Package header for Qt 4.6.2: + packageheader = \ + "$${LITERAL_HASH}{\"Dorian\"},(0xA89FC85B),0,3,9" \ + "[0x101F7961],0,0,0,{\"S60ProductID\"}" \ + "[0x102032BE],0,0,0,{\"S60ProductID\"}" \ + "[0x102752AE],0,0,0,{\"S60ProductID\"}" \ + "[0x1028315F],0,0,0,{\"S60ProductID\"}" + default_deployment.pkg_prerules = packageheader + + # FIXME: Package header for Qt 4.6.3 or later: + # packageheader = "$${LITERAL_HASH}{\"Dorian\"},(0xA89FC85B),0,3,9" # my_deployment.pkg_prerules = packageheader # DEPLOYMENT += my_deployment diff --git a/main.cpp b/main.cpp index 3f56fbc..b655866 100644 --- 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; diff --git a/pkg/changelog b/pkg/changelog index b5549c5..327efca 100644 --- a/pkg/changelog +++ b/pkg/changelog @@ -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 Wed, 17 Nov 2010 02:00:00 +0100 diff --git a/pkg/symbian/clean.bat b/pkg/symbian/clean.bat index 4c0565f..65b642a 100755 --- a/pkg/symbian/clean.bat +++ b/pkg/symbian/clean.bat @@ -11,7 +11,7 @@ if exist %src%\bld.inf del /q %src%\bld.inf if exist %src%\dorian.loc del /q %src%\dorian.loc if exist %src%\dorian.rss del /q %src%\dorian.rss if exist %src%\dorian.sis del /q %src%\dorian.sis -if exist %src%\*.nmp del /q %src%\*.mmp +if exist %src%\*.mmp del /q %src%\*.mmp if exist %src%\dorian_installer.pkg del /q %src%\dorian_installer.pkg if exist %src%\dorian_reg.rss del /q %src%\dorian_reg.rss if exist %src%\dorian_template.pkg del /q %src%\dorian_template.pkg diff --git a/widgets/flickcharm.cpp b/widgets/flickcharm.cpp index 062a6f4..50abe68 100755 --- a/widgets/flickcharm.cpp +++ b/widgets/flickcharm.cpp @@ -57,6 +57,14 @@ const int fingerAccuracyThreshold = 3; +#ifdef Q_OS_SYMBIAN +const int maxSpeed = 2000; +const int maxSpeedAutoScroll = 1250; +#else +const int maxSpeed = 4000; +const int maxSpeedAutoScroll = 2500; +#endif + struct FlickData { typedef enum { Steady, // Interaction without scrolling @@ -97,7 +105,7 @@ struct FlickData { const int newSpeedY = (qAbs(pixelsPerSecond.y()) > fingerAccuracyThreshold) ? pixelsPerSecond.y() : 0; const int newSpeedX = (qAbs(pixelsPerSecond.x()) > fingerAccuracyThreshold) ? pixelsPerSecond.x() : 0; if (state == AutoScrollAcceleration) { - const int max = 4000; // px by seconds + const int max = maxSpeedAutoScroll; // px by seconds const int oldSpeedY = speed.y(); const int oldSpeedX = speed.x(); if ((oldSpeedY <= 0 && newSpeedY <= 0) || (oldSpeedY >= 0 && newSpeedY >= 0) @@ -108,7 +116,7 @@ struct FlickData { speed = QPoint(); } } else { - const int max = 2500; // px by seconds + const int max = maxSpeed; // px by seconds // we average the speed to avoid strange effects with the last delta if (!speed.isNull()) { speed.setX(qBound(-max, (speed.x() / 4) + (newSpeedX * 3 / 4), max)); diff --git a/widgets/listwindow.cpp b/widgets/listwindow.cpp index d26409d..3443024 100644 --- a/widgets/listwindow.cpp +++ b/widgets/listwindow.cpp @@ -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)); diff --git a/widgets/splash.cpp b/widgets/splash.cpp index 3c96c20..967a84f 100755 --- a/widgets/splash.cpp +++ b/widgets/splash.cpp @@ -4,6 +4,7 @@ Splash::Splash(QWidget *parent): QMainWindow(parent) { + QLabel *label = new QLabel(this); QRect geo = QApplication::desktop()->geometry(); label->setGeometry(geo); -- 1.7.9.5