Index: /trunk/qt/README.txt =================================================================== --- /trunk/qt/README.txt (revision 14149) +++ /trunk/qt/README.txt (revision 14150) @@ -37,7 +37,7 @@ BUILDING ON UNIX - 1. Prerequisites: Qt >= 4.6 and its development packages + 1. Prerequisites: Qt >= 5 and its development packages 2. Build Transmission as normal - 3. In the qt/ directory, type "qmake qtr.pro" or "qmake-qt4 qtr.pro" + 3. In the qt/ directory, type "qmake qtr.pro" or "qmake-qt5 qtr.pro" 4. In the qt/ directory, type "make" 5. In the qt/ directory, as root, type "INSTALL_ROOT=/usr make install" Index: /trunk/qt/about.cc =================================================================== --- /trunk/qt/about.cc (revision 14149) +++ /trunk/qt/about.cc (revision 14150) @@ -38,5 +38,5 @@ l = new QLabel; - l->setPixmap (QPixmap (QString::fromAscii (":/icons/transmission-48.png"))); + l->setPixmap (QPixmap (QString::fromUtf8 (":/icons/transmission-48.png"))); l->setAlignment (Qt::AlignCenter); v->addWidget (l); @@ -45,5 +45,5 @@ f.setWeight (QFont::Bold); f.setPointSize (int (f.pointSize () * 1.2)); - l = new QLabel (tr ("Transmission %1").arg (QString::fromAscii (LONG_VERSION_STRING))); + l = new QLabel (tr ("Transmission %1").arg (QString::fromUtf8 (LONG_VERSION_STRING))); l->setAlignment (Qt::AlignCenter); l->setFont (f); @@ -52,5 +52,5 @@ l = new QLabel (tr ("A fast and easy BitTorrent client")); - l->setStyleSheet (QString::fromAscii ("text-align: center")); + l->setStyleSheet (QString::fromUtf8 ("text-align: center")); l->setAlignment (Qt::AlignCenter); v->addWidget (l); @@ -60,5 +60,5 @@ v->addWidget (l); - l = new QLabel (QString::fromAscii ("http://www.transmissionbt.com/")); + l = new QLabel (QString::fromUtf8 ("http://www.transmissionbt.com/")); l->setOpenExternalLinks (true); l->setAlignment (Qt::AlignCenter); @@ -90,5 +90,5 @@ this, tr ("Credits"), - QString::fromAscii ("Jordan Lee (Backend; Daemon; GTK+; Qt)\n" + QString::fromUtf8 ("Jordan Lee (Backend; Daemon; GTK+; Qt)\n" "Michell Livingston (OS X)\n")); } Index: /trunk/qt/add-data.cc =================================================================== --- /trunk/qt/add-data.cc (revision 14149) +++ /trunk/qt/add-data.cc (revision 14150) @@ -44,5 +44,5 @@ else if( Utils::isHexHashcode( key ) ) { - magnet = QString::fromAscii("magnet:?xt=urn:btih:") + key; + magnet = QString::fromUtf8("magnet:?xt=urn:btih:") + key; type = MAGNET; } Index: /trunk/qt/app.cc =================================================================== --- /trunk/qt/app.cc (revision 14149) +++ /trunk/qt/app.cc (revision 14150) @@ -46,7 +46,7 @@ namespace { - const QString DBUS_SERVICE = QString::fromAscii ("com.transmissionbt.Transmission" ); - const QString DBUS_OBJECT_PATH = QString::fromAscii ("/com/transmissionbt/Transmission"); - const QString DBUS_INTERFACE = QString::fromAscii ("com.transmissionbt.Transmission" ); + const QString DBUS_SERVICE = QString::fromUtf8 ("com.transmissionbt.Transmission" ); + const QString DBUS_OBJECT_PATH = QString::fromUtf8 ("/com/transmissionbt/Transmission"); + const QString DBUS_INTERFACE = QString::fromUtf8 ("com.transmissionbt.Transmission" ); const char * MY_READABLE_NAME ("transmission-qt"); @@ -90,5 +90,5 @@ myLastFullUpdateTime (0) { - const QString MY_CONFIG_NAME = QString::fromAscii ("transmission"); + const QString MY_CONFIG_NAME = QString::fromUtf8 ("transmission"); setApplicationName (MY_CONFIG_NAME); @@ -109,5 +109,5 @@ sizes << 16 << 22 << 24 << 32 << 48 << 64 << 72 << 96 << 128 << 192 << 256; foreach (int size, sizes) - icon.addPixmap (QPixmap (QString::fromAscii (":/icons/transmission-%1.png").arg (size))); + icon.addPixmap (QPixmap (QString::fromUtf8 (":/icons/transmission-%1.png").arg (size))); setWindowIcon (icon); @@ -465,13 +465,13 @@ MyApp :: notify (const QString& title, const QString& body) const { - const QString dbusServiceName = QString::fromAscii ("org.freedesktop.Notifications"); - const QString dbusInterfaceName = QString::fromAscii ("org.freedesktop.Notifications"); - const QString dbusPath = QString::fromAscii ("/org/freedesktop/Notifications"); - - QDBusMessage m = QDBusMessage::createMethodCall (dbusServiceName, dbusPath, dbusInterfaceName, QString::fromAscii ("Notify")); + const QString dbusServiceName = QString::fromUtf8 ("org.freedesktop.Notifications"); + const QString dbusInterfaceName = QString::fromUtf8 ("org.freedesktop.Notifications"); + const QString dbusPath = QString::fromUtf8 ("/org/freedesktop/Notifications"); + + QDBusMessage m = QDBusMessage::createMethodCall (dbusServiceName, dbusPath, dbusInterfaceName, QString::fromUtf8 ("Notify")); QList args; - args.append (QString::fromAscii ("Transmission")); // app_name + args.append (QString::fromUtf8 ("Transmission")); // app_name args.append (0U); // replaces_id - args.append (QString::fromAscii ("transmission")); // icon + args.append (QString::fromUtf8 ("transmission")); // icon args.append (title); // summary args.append (body); // body @@ -511,5 +511,5 @@ DBUS_OBJECT_PATH, DBUS_INTERFACE, - QString::fromAscii ("AddMetainfo")); + QString::fromUtf8 ("AddMetainfo")); QList arguments; AddData a (addme[i]); Index: /trunk/qt/details.cc =================================================================== --- /trunk/qt/details.cc (revision 14149) +++ /trunk/qt/details.cc (revision 14150) @@ -868,5 +868,5 @@ { QString txt; - switch (ch.toAscii ()) + switch (ch.unicode ()) { case 'O': txt = tr ("Optimistic unchoke"); break; Index: /trunk/qt/favicon.cc =================================================================== --- /trunk/qt/favicon.cc (revision 14149) +++ /trunk/qt/favicon.cc (revision 14150) @@ -11,9 +11,9 @@ */ -#include #include #include #include #include +#include #include "favicon.h" @@ -41,5 +41,5 @@ Favicons :: getCacheDir( ) { - const QString base = QDesktopServices::storageLocation( QDesktopServices::CacheLocation ); + const QString base = QStandardPaths::writableLocation (QStandardPaths::CacheLocation); return QDir( base ).absoluteFilePath( "favicons" ); } Index: /trunk/qt/file-tree.cc =================================================================== --- /trunk/qt/file-tree.cc (revision 14149) +++ /trunk/qt/file-tree.cc (revision 14150) @@ -437,5 +437,4 @@ { QString oldpath; - QModelIndex walk = index; FileTreeItem * item = itemFromIndex (index); @@ -576,7 +575,7 @@ FileTreeModel :: clear () { + beginResetModel (); clearSubtree (QModelIndex()); - - reset (); + endResetModel (); } @@ -614,5 +613,5 @@ bool added = false; FileTreeItem * item; - QStringList tokens = filename.split (QChar::fromAscii('/')); + QStringList tokens = filename.split (QChar::fromLatin1('/')); item = findItemForFileIndex (fileIndex); @@ -887,5 +886,5 @@ { setColumnHidden (i, (isetResizeMode(i, QHeaderView::Interactive); + header()->setSectionResizeMode(i, QHeaderView::Interactive); } Index: /trunk/qt/filterbar.cc =================================================================== --- /trunk/qt/filterbar.cc (revision 14149) +++ /trunk/qt/filterbar.cc (revision 14150) @@ -11,4 +11,10 @@ */ +#include +#include +#include +#include +#include +#include #include #include Index: /trunk/qt/freespace-label.cc =================================================================== --- /trunk/qt/freespace-label.cc (revision 14149) +++ /trunk/qt/freespace-label.cc (revision 14150) @@ -74,4 +74,6 @@ FreespaceLabel :: onSessionExecuted (int64_t tag, const QString& result, struct tr_variant * arguments) { + Q_UNUSED (result); + if (tag != myTag) return; Index: /trunk/qt/freespace-label.h =================================================================== --- /trunk/qt/freespace-label.h (revision 14149) +++ /trunk/qt/freespace-label.h (revision 14150) @@ -17,5 +17,5 @@ #include -#include +#include class Session; Index: /trunk/qt/mainwin.cc =================================================================== --- /trunk/qt/mainwin.cc (revision 14149) +++ /trunk/qt/mainwin.cc (revision 14150) @@ -15,4 +15,8 @@ #include +#include +#include +#include +#include #include Index: /trunk/qt/make-dialog.cc =================================================================== --- /trunk/qt/make-dialog.cc (revision 14149) +++ /trunk/qt/make-dialog.cc (revision 14150) @@ -22,4 +22,5 @@ #include #include +#include #include #include @@ -343,5 +344,5 @@ QPushButton * b = new QPushButton; b->setIcon( folderPixmap ); - b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); myDestination = QDir::homePath(); b->setText( myDestination ); @@ -357,5 +358,5 @@ myFolderButton->setIcon( folderPixmap ); myFolderButton->setText( tr( "(None)" ) ); - myFolderButton->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + myFolderButton->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( myFolderButton, SIGNAL(clicked(bool)), this, SLOT(onFolderClicked(void)) ); @@ -372,5 +373,5 @@ myFileButton->setText( tr( "(None)" ) ); myFileButton->setIcon( filePixmap ); - myFileButton->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + myFileButton->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( myFileButton, SIGNAL(clicked(bool)), this, SLOT(onFileClicked(void)) ); @@ -385,5 +386,5 @@ hig->addWideControl( myTrackerEdit = new ShortPlainTextEdit ); - const int height = fontMetrics().size( 0, QString::fromAscii("\n\n\n\n") ).height( ); + const int height = fontMetrics().size( 0, QString::fromUtf8("\n\n\n\n") ).height( ); myTrackerEdit->setMinimumHeight( height ); hig->addTallRow( tr( "&Trackers:" ), myTrackerEdit ); Index: /trunk/qt/options.cc =================================================================== --- /trunk/qt/options.cc (revision 14149) +++ /trunk/qt/options.cc (revision 14150) @@ -125,5 +125,5 @@ p = mySourceButton = new QPushButton; p->setIcon (filePixmap); - p->setStyleSheet (QString::fromAscii ("text-align: left; padding-left: 5; padding-right: 5")); + p->setStyleSheet (QString::fromUtf8 ("text-align: left; padding-left: 5; padding-right: 5")); p->installEventFilter (this); w = p; @@ -140,5 +140,5 @@ } - const int width = fontMetrics.size (0, QString::fromAscii ("This is a pretty long torrent filename indeed.torrent")).width (); + const int width = fontMetrics.size (0, QString::fromUtf8 ("This is a pretty long torrent filename indeed.torrent")).width (); w->setMinimumWidth (width); layout->addWidget (w, row, 1); Index: /trunk/qt/prefs-dialog.cc =================================================================== --- /trunk/qt/prefs-dialog.cc (revision 14149) +++ /trunk/qt/prefs-dialog.cc (revision 14150) @@ -22,5 +22,4 @@ #include #include -#include #include #include @@ -136,5 +135,5 @@ const int minutes( myPrefs.getInt( key ) ); QTimeEdit * e = new QTimeEdit( ); - e->setDisplayFormat( QString::fromAscii( "hh:mm" ) ); + e->setDisplayFormat( QString::fromUtf8( "hh:mm" ) ); e->setProperty( PREF_KEY, key ); e->setTime( QTime().addSecs( minutes * 60 ) ); @@ -234,9 +233,9 @@ h->setSpacing( HIG :: PAD ); QLabel * label = new QLabel; - label->setPixmap( QPixmap( QString::fromAscii( ":/icons/alt-limit-off.png" ) ) ); + label->setPixmap( QPixmap( QString::fromUtf8( ":/icons/alt-limit-off.png" ) ) ); label->setAlignment( Qt::AlignLeft|Qt::AlignVCenter ); h->addWidget( label ); label = new QLabel( tr( "Alternative Speed Limits" ) ); - label->setStyleSheet( QString::fromAscii( "font: bold" ) ); + label->setStyleSheet( QString::fromUtf8( "font: bold" ) ); label->setAlignment( Qt::AlignLeft|Qt::AlignVCenter ); h->addWidget( label ); @@ -573,5 +572,5 @@ b = myWatchButton = new QPushButton; b->setIcon( folderPixmap ); - b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( b, SIGNAL(clicked(bool)), this, SLOT(onWatchClicked(void)) ); hig->addRow( l, b ); @@ -586,5 +585,5 @@ b = myDestinationButton = new QPushButton; b->setIcon( folderPixmap ); - b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( b, SIGNAL(clicked(bool)), this, SLOT(onDestinationClicked(void)) ); hig->addRow( tr( "Save to &Location:" ), b ); @@ -611,5 +610,5 @@ b = myIncompleteButton = new QPushButton; b->setIcon( folderPixmap ); - b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( b, SIGNAL(clicked(bool)), this, SLOT(onIncompleteClicked(void)) ); hig->addRow( myIncompleteCheckbox, b ); @@ -619,5 +618,5 @@ b = myTorrentDoneScriptButton = new QPushButton; b->setIcon( filePixmap ); - b->setStyleSheet( QString::fromAscii( "text-align: left; padding-left: 5; padding-right: 5" ) ); + b->setStyleSheet( QString::fromUtf8( "text-align: left; padding-left: 5; padding-right: 5" ) ); connect( b, SIGNAL(clicked(bool)), this, SLOT(onScriptClicked(void)) ); hig->addRow( myTorrentDoneScriptCheckbox, b ); Index: /trunk/qt/qtr.pro =================================================================== --- /trunk/qt/qtr.pro (revision 14149) +++ /trunk/qt/qtr.pro (revision 14150) @@ -2,5 +2,5 @@ NAME = "Transmission" DESCRIPTION = "Transmission: a fast, easy, and free BitTorrent client" -VERSION = 2.00 +VERSION = 2.81 LICENSE = "GPL" @@ -12,6 +12,6 @@ man.files = transmission-qt.1 -CONFIG += qt qdbus thread debug link_pkgconfig -QT += network +CONFIG += qt thread debug link_pkgconfig +QT += network dbus widgets PKGCONFIG = fontconfig libcurl openssl libevent Index: /trunk/qt/session.cc =================================================================== --- /trunk/qt/session.cc (revision 14149) +++ /trunk/qt/session.cc (revision 14150) @@ -691,9 +691,9 @@ QNetworkRequest request; request.setUrl (myUrl); - request.setRawHeader ("User-Agent", QString (QCoreApplication::instance ()->applicationName () + "/" + LONG_VERSION_STRING).toAscii ()); + request.setRawHeader ("User-Agent", QString (QCoreApplication::instance ()->applicationName () + "/" + LONG_VERSION_STRING).toUtf8 ()); request.setRawHeader ("Content-Type", "application/json; charset=UTF-8"); if (!mySessionId.isEmpty ()) - request.setRawHeader (TR_RPC_SESSION_ID_HEADER, mySessionId.toAscii ()); + request.setRawHeader (TR_RPC_SESSION_ID_HEADER, mySessionId.toUtf8 ()); const QByteArray requestData (json); Index: /trunk/qt/squeezelabel.h =================================================================== --- /trunk/qt/squeezelabel.h (revision 14149) +++ /trunk/qt/squeezelabel.h (revision 14150) @@ -43,5 +43,5 @@ #define SQUEEZELABEL_H -#include +#include class SqueezeLabel : public QLabel Index: /trunk/qt/torrent-model.cc =================================================================== --- /trunk/qt/torrent-model.cc (revision 14149) +++ /trunk/qt/torrent-model.cc (revision 14150) @@ -23,9 +23,12 @@ TorrentModel :: clear( ) { + beginResetModel (); + myIdToRow.clear( ); myIdToTorrent.clear( ); foreach( Torrent * tor, myTorrents ) delete tor; myTorrents.clear( ); - reset( ); + + endResetModel (); } Index: /trunk/qt/utils.h =================================================================== --- /trunk/qt/utils.h (revision 14149) +++ /trunk/qt/utils.h (revision 14150) @@ -43,10 +43,10 @@ /// - static bool isMagnetLink( const QString& s ) { return s.startsWith( QString::fromAscii( "magnet:?" ) ); } + static bool isMagnetLink( const QString& s ) { return s.startsWith( QString::fromUtf8( "magnet:?" ) ); } static bool isHexHashcode( const QString& s ) { if( s.length() != 40 ) return false; - foreach( QChar ch, s ) if( !isxdigit( ch.toAscii() ) ) return false; + foreach( QChar ch, s ) if( !isxdigit( ch.unicode() ) ) return false; return true; } @@ -54,7 +54,7 @@ static bool isUriWithSupportedScheme( const QString& s ) { - static const QString ftp = QString::fromAscii( "ftp://" ); - static const QString http = QString::fromAscii( "http://" ); - static const QString https = QString::fromAscii( "https://" ); + static const QString ftp = QString::fromUtf8( "ftp://" ); + static const QString http = QString::fromUtf8( "http://" ); + static const QString https = QString::fromUtf8( "https://" ); return s.startsWith(http) || s.startsWith(https) || s.startsWith(ftp); } Index: /trunk/qt/watchdir.cc =================================================================== --- /trunk/qt/watchdir.cc (revision 14149) +++ /trunk/qt/watchdir.cc (revision 14150) @@ -53,5 +53,5 @@ if( err ) ret = ERROR; - else if( myModel.hasTorrent( QString::fromAscii( inf.hashString ) ) ) + else if( myModel.hasTorrent( QString::fromUtf8( inf.hashString ) ) ) ret = DUPLICATE; else @@ -107,5 +107,5 @@ // try to add any new files which end in .torrent const QSet newFiles( files - myWatchDirFiles ); - const QString torrentSuffix = QString::fromAscii( ".torrent" ); + const QString torrentSuffix = QString::fromUtf8( ".torrent" ); foreach( QString name, newFiles ) { if( name.endsWith( torrentSuffix, Qt::CaseInsensitive ) ) {