From d96ef13a899bbc5ea2643c1917c300641ea4b291 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Thu, 29 Jan 2015 21:53:05 +0000 Subject: [PATCH] Define QT_NO_CAST_FROM_ASCII (Qt client) Use latin1 encoding most of the time where default encoding was used before. Qt 4 assumes latin1 by default while Qt 5 uses utf-8 which is not what we want. Use utf-8 encoding in some places where default encoding was used before. This includes strings coming from RPC. Fix an issue with SortMode::names[] (filters.cc) where missing comma between "sort-by-queue" and "sort-by-ratio" resulted in two array entries being merged into solid "sort-by-queuesort-by-ratio" string and all the following items being shifted compared to their enum counterparts. --- qt/CMakeLists.txt | 1 + qt/app.cc | 20 ++++----- qt/details.cc | 30 ++++++------- qt/favicon.cc | 10 ++--- qt/file-tree.cc | 8 ++-- qt/file-tree.h | 2 +- qt/filterbar.cc | 26 +++++------ qt/filters.cc | 36 +++++++-------- qt/freespace-label.cc | 2 +- qt/hig.cc | 2 +- qt/license.cc | 4 +- qt/mainwin.cc | 91 ++++++++++++++++++++------------------ qt/make-dialog.cc | 4 +- qt/options.cc | 2 +- qt/prefs.cc | 6 +-- qt/qtr.pro | 4 +- qt/rpc-client.cc | 6 +-- qt/session.cc | 26 +++++------ qt/torrent-delegate-min.cc | 2 +- qt/torrent-delegate.cc | 2 +- qt/torrent.cc | 2 +- qt/tracker-delegate.cc | 38 ++++++++-------- 22 files changed, 165 insertions(+), 159 deletions(-) diff --git a/qt/CMakeLists.txt b/qt/CMakeLists.txt index 209e6528f..4eb7b62ce 100644 --- a/qt/CMakeLists.txt +++ b/qt/CMakeLists.txt @@ -164,6 +164,7 @@ include_directories( add_definitions( "-DTRANSLATIONS_DIR=\"${CMAKE_INSTALL_FULL_DATADIR}/${TR_NAME}/translations\"" + -DQT_NO_CAST_FROM_ASCII ) add_executable(${TR_NAME}-qt WIN32 diff --git a/qt/app.cc b/qt/app.cc index 68f03ce66..405d2bb68 100644 --- a/qt/app.cc +++ b/qt/app.cc @@ -106,18 +106,18 @@ MyApp::MyApp (int& argc, char ** argv): if (loadTranslation (qtTranslator, QLatin1String ("qt"), localeName, QStringList () << QLibraryInfo::location (QLibraryInfo::TranslationsPath) #ifdef TRANSLATIONS_DIR - << TRANSLATIONS_DIR + << QString::fromUtf8 (TRANSLATIONS_DIR) #endif - << (applicationDirPath () + "/translations") + << (applicationDirPath () + QLatin1String ("/translations")) )) installTranslator (&qtTranslator); // install the transmission translator if (loadTranslation (appTranslator, MY_CONFIG_NAME, localeName, QStringList () #ifdef TRANSLATIONS_DIR - << TRANSLATIONS_DIR + << QString::fromUtf8 (TRANSLATIONS_DIR) #endif - << (applicationDirPath () + "/translations") + << (applicationDirPath () + QLatin1String ("/translations")) )) installTranslator (&appTranslator); @@ -125,17 +125,17 @@ MyApp::MyApp (int& argc, char ** argv): #if defined (_WIN32) || defined (__APPLE__) if (QIcon::themeName ().isEmpty ()) - QIcon::setThemeName ("Faenza"); + QIcon::setThemeName (QLatin1String ("Faenza")); #endif // set the default icon - QIcon icon = QIcon::fromTheme ("transmission"); + QIcon icon = QIcon::fromTheme (QLatin1String ("transmission")); if (icon.isNull ()) { QList sizes; sizes << 16 << 22 << 24 << 32 << 48 << 64 << 72 << 96 << 128 << 192 << 256; foreach (int size, sizes) - icon.addPixmap (QPixmap (QString::fromUtf8 (":/icons/transmission-%1.png").arg (size))); + icon.addPixmap (QPixmap (QString::fromLatin1 (":/icons/transmission-%1.png").arg (size))); } setWindowIcon (icon); @@ -192,8 +192,8 @@ MyApp::MyApp (int& argc, char ** argv): { case AddData::URL: arguments.push_back (a.url.toString ()); break; case AddData::MAGNET: arguments.push_back (a.magnet); break; - case AddData::FILENAME: arguments.push_back (a.toBase64 ().constData ()); break; - case AddData::METAINFO: arguments.push_back (a.toBase64 ().constData ()); break; + case AddData::FILENAME: arguments.push_back (QString::fromLatin1 (a.toBase64 ())); break; + case AddData::METAINFO: arguments.push_back (QString::fromLatin1 (a.toBase64 ())); break; default: break; } request.setArguments (arguments); @@ -222,7 +222,7 @@ MyApp::MyApp (int& argc, char ** argv): dir.mkpath (configDir); // is this the first time we've run transmission? - const bool firstTime = !dir.exists ("settings.json"); + const bool firstTime = !dir.exists (QLatin1String ("settings.json")); // initialize the prefs myPrefs = new Prefs (configDir); diff --git a/qt/details.cc b/qt/details.cc index 85c6fecaf..28d201658 100644 --- a/qt/details.cc +++ b/qt/details.cc @@ -869,19 +869,19 @@ Details::refresh () foreach (const Peer& peer, peers) { - const QString key = idStr + ":" + peer.address; + const QString key = idStr + QLatin1Char (':') + peer.address; PeerItem * item = static_cast (myPeers.value (key, 0)); if (item == 0) // new peer has connected { - static const QIcon myEncryptionIcon (":/icons/encrypted.png"); + static const QIcon myEncryptionIcon (QLatin1String (":/icons/encrypted.png")); static const QIcon myEmptyIcon; item = new PeerItem (peer); item->setTextAlignment (COL_UP, Qt::AlignRight|Qt::AlignVCenter); item->setTextAlignment (COL_DOWN, Qt::AlignRight|Qt::AlignVCenter); item->setTextAlignment (COL_PERCENT, Qt::AlignRight|Qt::AlignVCenter); item->setIcon (COL_LOCK, peer.isEncrypted ? myEncryptionIcon : myEmptyIcon); - item->setToolTip (COL_LOCK, peer.isEncrypted ? tr ("Encrypted connection") : ""); + item->setToolTip (COL_LOCK, peer.isEncrypted ? tr ("Encrypted connection") : QString ()); item->setText (COL_ADDRESS, peer.address); item->setText (COL_CLIENT, peer.clientName); newItems << item; @@ -918,9 +918,9 @@ Details::refresh () if (!codeTip.isEmpty ()) codeTip.resize (codeTip.size ()-1); // eat the trailing linefeed - item->setText (COL_UP, peer.rateToPeer.isZero () ? "" : Formatter::speedToString (peer.rateToPeer)); - item->setText (COL_DOWN, peer.rateToClient.isZero () ? "" : Formatter::speedToString (peer.rateToClient)); - item->setText (COL_PERCENT, peer.progress > 0 ? QString::fromLatin1 ("%1%").arg ( (int) (peer.progress * 100.0)) : ""); + item->setText (COL_UP, peer.rateToPeer.isZero () ? QString () : Formatter::speedToString (peer.rateToPeer)); + item->setText (COL_DOWN, peer.rateToClient.isZero () ? QString () : Formatter::speedToString (peer.rateToClient)); + item->setText (COL_PERCENT, peer.progress > 0 ? QString::fromLatin1 ("%1%").arg ( (int) (peer.progress * 100.0)) : QString ()); item->setText (COL_STATUS, code); item->setToolTip (COL_STATUS, codeTip); @@ -1219,9 +1219,9 @@ Details::initTrackerTab () ui.trackersView->setModel (myTrackerFilter); ui.trackersView->setItemDelegate (myTrackerDelegate); - ui.addTrackerButton->setIcon (getStockIcon ("list-add", QStyle::SP_DialogOpenButton)); - ui.editTrackerButton->setIcon (getStockIcon ("document-properties", QStyle::SP_DesktopIcon)); - ui.removeTrackerButton->setIcon (getStockIcon ("list-remove", QStyle::SP_TrashIcon)); + ui.addTrackerButton->setIcon (getStockIcon (QLatin1String ("list-add"), QStyle::SP_DialogOpenButton)); + ui.editTrackerButton->setIcon (getStockIcon (QLatin1String ("document-properties"), QStyle::SP_DesktopIcon)); + ui.removeTrackerButton->setIcon (getStockIcon (QLatin1String ("list-remove"), QStyle::SP_TrashIcon)); ui.showTrackerScrapesCheck->setChecked (myPrefs.getBool (Prefs::SHOW_TRACKER_SCRAPES)); ui.showBackupTrackersCheck->setChecked (myPrefs.getBool (Prefs::SHOW_BACKUP_TRACKERS)); @@ -1251,11 +1251,11 @@ Details::initPeersTab () ui.peersView->sortByColumn (COL_ADDRESS, Qt::AscendingOrder); ui.peersView->setColumnWidth (COL_LOCK, 20); - ui.peersView->setColumnWidth (COL_UP, measureViewItem (ui.peersView, "1024 MiB/s")); - ui.peersView->setColumnWidth (COL_DOWN, measureViewItem (ui.peersView, "1024 MiB/s")); - ui.peersView->setColumnWidth (COL_PERCENT, measureViewItem (ui.peersView, "100%")); - ui.peersView->setColumnWidth (COL_STATUS, measureViewItem (ui.peersView, "ODUK?EXI")); - ui.peersView->setColumnWidth (COL_ADDRESS, measureViewItem (ui.peersView, "888.888.888.888")); + ui.peersView->setColumnWidth (COL_UP, measureViewItem (ui.peersView, QLatin1String ("1024 MiB/s"))); + ui.peersView->setColumnWidth (COL_DOWN, measureViewItem (ui.peersView, QLatin1String ("1024 MiB/s"))); + ui.peersView->setColumnWidth (COL_PERCENT, measureViewItem (ui.peersView, QLatin1String ("100%"))); + ui.peersView->setColumnWidth (COL_STATUS, measureViewItem (ui.peersView, QLatin1String ("ODUK?EXI"))); + ui.peersView->setColumnWidth (COL_ADDRESS, measureViewItem (ui.peersView, QLatin1String ("888.888.888.888"))); } /*** @@ -1321,7 +1321,7 @@ Details::onOpenRequested (const QString& path) if (tor == NULL) continue; - const QString localFilePath = tor->getPath () + "/" + path; + const QString localFilePath = tor->getPath () + QLatin1Char ('/') + path; if (!QFile::exists (localFilePath)) continue; diff --git a/qt/favicon.cc b/qt/favicon.cc index 3077a1012..ff4fbc79c 100644 --- a/qt/favicon.cc +++ b/qt/favicon.cc @@ -49,7 +49,7 @@ Favicons::getCacheDir () QStandardPaths::writableLocation (QStandardPaths::CacheLocation); #endif - return QDir(base).absoluteFilePath ("favicons"); + return QDir(base).absoluteFilePath (QLatin1String ("favicons")); } void @@ -79,8 +79,8 @@ QString Favicons::getHost (const QUrl& url) { QString host = url.host (); - const int first_dot = host.indexOf ('.'); - const int last_dot = host.lastIndexOf ('.'); + const int first_dot = host.indexOf (QLatin1Char ('.')); + const int last_dot = host.lastIndexOf (QLatin1Char ('.')); if ((first_dot != -1) && (last_dot != -1) && (first_dot != last_dot)) host.remove (0, first_dot + 1); @@ -123,9 +123,9 @@ Favicons::add (const QUrl& url) myPixmaps.insert (host, QPixmap ()); // try to download the favicon - const QString path = "http://" + host + "/favicon."; + const QString path = QLatin1String ("http://") + host + QLatin1String ("/favicon."); QStringList suffixes; - suffixes << "ico" << "png" << "gif" << "jpg"; + suffixes << QLatin1String ("ico") << QLatin1String ("png") << QLatin1String ("gif") << QLatin1String ("jpg"); foreach (QString suffix, suffixes) myNAM->get (QNetworkRequest (path + suffix)); } diff --git a/qt/file-tree.cc b/qt/file-tree.cc index d4b3fee86..49d934e87 100644 --- a/qt/file-tree.cc +++ b/qt/file-tree.cc @@ -139,7 +139,7 @@ FileTreeItem::data (int column, int role) const break; case COL_SIZE: - value.setValue (sizeString() + " "); + value.setValue (sizeString() + QLatin1String (" ")); break; case COL_PROGRESS: @@ -395,7 +395,7 @@ FileTreeItem::path () const if (itemPath.isEmpty()) itemPath = item->name(); else - itemPath = item->name() + "/" + itemPath; + itemPath = item->name() + QLatin1Char ('/') + itemPath; item = item->parent (); } @@ -966,10 +966,10 @@ FileTreeView::eventFilter (QObject * o, QEvent * event) QString header; if (column == COL_SIZE) - header = "999.9 KiB"; + header = QLatin1String ("999.9 KiB"); else header = myModel.headerData (column, Qt::Horizontal).toString(); - header += " "; + header += QLatin1String (" "); const int width = fontMetrics.size (0, header).width(); setColumnWidth (column, width); left -= width; diff --git a/qt/file-tree.h b/qt/file-tree.h index 79ae42ce4..5460b82a7 100644 --- a/qt/file-tree.h +++ b/qt/file-tree.h @@ -41,7 +41,7 @@ class FileTreeItem: public QObject virtual ~FileTreeItem(); - FileTreeItem (const QString& name="", int fileIndex=-1, uint64_t size=0): + FileTreeItem (const QString& name=QString (), int fileIndex=-1, uint64_t size=0): myFileIndex (fileIndex), myParent (0), myName (name), diff --git a/qt/filterbar.cc b/qt/filterbar.cc index 257af30a1..484bc0cf3 100644 --- a/qt/filterbar.cc +++ b/qt/filterbar.cc @@ -286,7 +286,7 @@ FilterBarLineEdit::FilterBarLineEdit (QWidget * parent): myClearButton (nullptr) { #if QT_VERSION < QT_VERSION_CHECK(5, 2, 0) - const QIcon icon = QIcon::fromTheme ("edit-clear", style ()->standardIcon (QStyle::SP_DialogCloseButton)); + const QIcon icon = QIcon::fromTheme (QLatin1String ("edit-clear"), style ()->standardIcon (QStyle::SP_DialogCloseButton)); const int iconSize = style ()->pixelMetric (QStyle::PM_SmallIconSize); myClearButton = new QToolButton (this); @@ -363,31 +363,31 @@ FilterBar::createActivityCombo () model->appendRow (new QStandardItem); // separator delegate->setSeparator (model, model->index (1, 0)); - row = new QStandardItem (QIcon::fromTheme ("system-run"), tr ("Active")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("system-run")), tr ("Active")); row->setData (FilterMode::SHOW_ACTIVE, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("go-down"), tr ("Downloading")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-down")), tr ("Downloading")); row->setData (FilterMode::SHOW_DOWNLOADING, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("go-up"), tr ("Seeding")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("go-up")), tr ("Seeding")); row->setData (FilterMode::SHOW_SEEDING, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("media-playback-pause"), tr ("Paused")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("media-playback-pause")), tr ("Paused")); row->setData (FilterMode::SHOW_PAUSED, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("dialog-ok"), tr ("Finished")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("dialog-ok")), tr ("Finished")); row->setData (FilterMode::SHOW_FINISHED, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("view-refresh"), tr ("Verifying")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("view-refresh")), tr ("Verifying")); row->setData (FilterMode::SHOW_VERIFYING, ActivityRole); model->appendRow (row); - row = new QStandardItem (QIcon::fromTheme ("process-stop"), tr ("Error")); + row = new QStandardItem (QIcon::fromTheme (QLatin1String ("process-stop")), tr ("Error")); row->setData (FilterMode::SHOW_ERROR, ActivityRole); model->appendRow (row); @@ -407,7 +407,7 @@ namespace { // get the readable name... QString name = host; - const int pos = name.lastIndexOf ('.'); + const int pos = name.lastIndexOf (QLatin1Char ('.')); if (pos >= 0) name.truncate (pos); if (!name.isEmpty ()) @@ -517,7 +517,7 @@ FilterBar::createTrackerCombo (QStandardItemModel * model) c->setItemDelegate (delegate); QStandardItem * row = new QStandardItem (tr ("All")); - row->setData ("", TrackerRole); + row->setData (QString (), TrackerRole); const int count = myTorrents.rowCount (); row->setData (count, TorrentCountRole); row->setData (getCountString (count), TorrentCountStringRole); @@ -644,14 +644,14 @@ FilterBar::onTrackerIndexChanged (int i) { QString str; const bool isTracker = !myTrackerCombo->itemData (i,TrackerRole).toString ().isEmpty (); - if (!isTracker) // show all + if (!isTracker) { - str = ""; + // show all } else { str = myTrackerCombo->itemData (i,TrackerRole).toString (); - const int pos = str.lastIndexOf ('.'); + const int pos = str.lastIndexOf (QLatin1Char ('.')); if (pos >= 0) str.truncate (pos+1); } diff --git a/qt/filters.cc b/qt/filters.cc index ba5754f42..5e2c9cb00 100644 --- a/qt/filters.cc +++ b/qt/filters.cc @@ -11,14 +11,14 @@ const QString FilterMode::names[NUM_MODES] = { - "show-all", - "show-active", - "show-downloading", - "show-seeding", - "show-paused", - "show-finished", - "show-verifying", - "show-error", + QLatin1String ("show-all"), + QLatin1String ("show-active"), + QLatin1String ("show-downloading"), + QLatin1String ("show-seeding"), + QLatin1String ("show-paused"), + QLatin1String ("show-finished"), + QLatin1String ("show-verifying"), + QLatin1String ("show-error") }; int @@ -33,16 +33,16 @@ FilterMode::modeFromName (const QString& name) const QString SortMode::names[NUM_MODES] = { - "sort-by-activity", - "sort-by-age", - "sort-by-eta", - "sort-by-name", - "sort-by-progress", - "sort-by-queue" - "sort-by-ratio", - "sort-by-size", - "sort-by-state", - "sort-by-id" + QLatin1String ("sort-by-activity"), + QLatin1String ("sort-by-age"), + QLatin1String ("sort-by-eta"), + QLatin1String ("sort-by-name"), + QLatin1String ("sort-by-progress"), + QLatin1String ("sort-by-queue"), + QLatin1String ("sort-by-ratio"), + QLatin1String ("sort-by-size"), + QLatin1String ("sort-by-state"), + QLatin1String ("sort-by-id") }; int diff --git a/qt/freespace-label.cc b/qt/freespace-label.cc index 417d0cb98..e80a8385a 100644 --- a/qt/freespace-label.cc +++ b/qt/freespace-label.cc @@ -91,7 +91,7 @@ FreespaceLabel::onSessionExecuted (int64_t tag, const QString& result, tr_varian if (bytes >= 0) setText (tr("%1 free").arg(Formatter::sizeToString (bytes))); else - setText (""); + setText (QString ()); // update the tooltip size_t len = 0; diff --git a/qt/hig.cc b/qt/hig.cc index d47548ad9..873c38634 100644 --- a/qt/hig.cc +++ b/qt/hig.cc @@ -51,7 +51,7 @@ HIG::addSectionTitle (const QString& title) { QLabel * label = new QLabel (this); label->setText (title); - label->setStyleSheet ("font: bold"); + label->setStyleSheet (QLatin1String ("font: bold")); label->setAlignment (Qt::AlignLeft|Qt::AlignVCenter); addSectionTitle (label); } diff --git a/qt/license.cc b/qt/license.cc index 7306a9d2a..0ab186ce2 100644 --- a/qt/license.cc +++ b/qt/license.cc @@ -22,7 +22,7 @@ LicenseDialog::LicenseDialog (QWidget * parent): QPlainTextEdit * t = new QPlainTextEdit (this); t->setReadOnly (true); - t->setPlainText ( + t->setPlainText (QLatin1String ( "Copyright 2005-2014. All code is copyrighted by the respective authors.\n" "\n" "Transmission can be redistributed and/or modified under the terms of the " @@ -35,7 +35,7 @@ LicenseDialog::LicenseDialog (QWidget * parent): "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" "\n" "Some of Transmission's source files have more permissive licenses. " - "Those files may, of course, be used on their own under their own terms.\n"); + "Those files may, of course, be used on their own under their own terms.\n")); v->addWidget (t); QDialogButtonBox * box = new QDialogButtonBox; diff --git a/qt/mainwin.cc b/qt/mainwin.cc index 3313dfdfc..1e5b718c8 100644 --- a/qt/mainwin.cc +++ b/qt/mainwin.cc @@ -114,28 +114,28 @@ TrMainWindow::TrMainWindow (Session& session, Prefs& prefs, TorrentModel& model, ui.listView->setStyle (new ListViewProxyStyle); // icons - ui.action_OpenFile->setIcon (getStockIcon ("document-open", QStyle::SP_DialogOpenButton)); - ui.action_New->setIcon (getStockIcon ("document-new", QStyle::SP_DesktopIcon)); - ui.action_Properties->setIcon (getStockIcon ("document-properties", QStyle::SP_DesktopIcon)); - ui.action_OpenFolder->setIcon (getStockIcon ("folder-open", QStyle::SP_DirOpenIcon)); - ui.action_Start->setIcon (getStockIcon ("media-playback-start", QStyle::SP_MediaPlay)); - ui.action_StartNow->setIcon (getStockIcon ("media-playback-start", QStyle::SP_MediaPlay)); - ui.action_Announce->setIcon (getStockIcon ("network-transmit-receive")); - ui.action_Pause->setIcon (getStockIcon ("media-playback-pause", QStyle::SP_MediaPause)); - ui.action_Remove->setIcon (getStockIcon ("list-remove", QStyle::SP_TrashIcon)); - ui.action_Delete->setIcon (getStockIcon ("edit-delete", QStyle::SP_TrashIcon)); - ui.action_StartAll->setIcon (getStockIcon ("media-playback-start", QStyle::SP_MediaPlay)); - ui.action_PauseAll->setIcon (getStockIcon ("media-playback-pause", QStyle::SP_MediaPause)); - ui.action_Quit->setIcon (getStockIcon ("application-exit")); - ui.action_SelectAll->setIcon (getStockIcon ("edit-select-all")); - ui.action_ReverseSortOrder->setIcon (getStockIcon ("view-sort-ascending", QStyle::SP_ArrowDown)); - ui.action_Preferences->setIcon (getStockIcon ("preferences-system")); - ui.action_Contents->setIcon (getStockIcon ("help-contents", QStyle::SP_DialogHelpButton)); - ui.action_About->setIcon (getStockIcon ("help-about")); - ui.action_QueueMoveTop->setIcon (getStockIcon ("go-top")); - ui.action_QueueMoveUp->setIcon (getStockIcon ("go-up", QStyle::SP_ArrowUp)); - ui.action_QueueMoveDown->setIcon (getStockIcon ("go-down", QStyle::SP_ArrowDown)); - ui.action_QueueMoveBottom->setIcon (getStockIcon ("go-bottom")); + ui.action_OpenFile->setIcon (getStockIcon (QLatin1String ("document-open"), QStyle::SP_DialogOpenButton)); + ui.action_New->setIcon (getStockIcon (QLatin1String ("document-new"), QStyle::SP_DesktopIcon)); + ui.action_Properties->setIcon (getStockIcon (QLatin1String ("document-properties"), QStyle::SP_DesktopIcon)); + ui.action_OpenFolder->setIcon (getStockIcon (QLatin1String ("folder-open"), QStyle::SP_DirOpenIcon)); + ui.action_Start->setIcon (getStockIcon (QLatin1String ("media-playback-start"), QStyle::SP_MediaPlay)); + ui.action_StartNow->setIcon (getStockIcon (QLatin1String ("media-playback-start"), QStyle::SP_MediaPlay)); + ui.action_Announce->setIcon (getStockIcon (QLatin1String ("network-transmit-receive"))); + ui.action_Pause->setIcon (getStockIcon (QLatin1String ("media-playback-pause"), QStyle::SP_MediaPause)); + ui.action_Remove->setIcon (getStockIcon (QLatin1String ("list-remove"), QStyle::SP_TrashIcon)); + ui.action_Delete->setIcon (getStockIcon (QLatin1String ("edit-delete"), QStyle::SP_TrashIcon)); + ui.action_StartAll->setIcon (getStockIcon (QLatin1String ("media-playback-start"), QStyle::SP_MediaPlay)); + ui.action_PauseAll->setIcon (getStockIcon (QLatin1String ("media-playback-pause"), QStyle::SP_MediaPause)); + ui.action_Quit->setIcon (getStockIcon (QLatin1String ("application-exit"))); + ui.action_SelectAll->setIcon (getStockIcon (QLatin1String ("edit-select-all"))); + ui.action_ReverseSortOrder->setIcon (getStockIcon (QLatin1String ("view-sort-ascending"), QStyle::SP_ArrowDown)); + ui.action_Preferences->setIcon (getStockIcon (QLatin1String ("preferences-system"))); + ui.action_Contents->setIcon (getStockIcon (QLatin1String ("help-contents"), QStyle::SP_DialogHelpButton)); + ui.action_About->setIcon (getStockIcon (QLatin1String ("help-about"))); + ui.action_QueueMoveTop->setIcon (getStockIcon (QLatin1String ("go-top"))); + ui.action_QueueMoveUp->setIcon (getStockIcon (QLatin1String ("go-up"), QStyle::SP_ArrowUp)); + ui.action_QueueMoveDown->setIcon (getStockIcon (QLatin1String ("go-down"), QStyle::SP_ArrowDown)); + ui.action_QueueMoveBottom->setIcon (getStockIcon (QLatin1String ("go-bottom"))); // ui signals connect (ui.action_Toolbar, SIGNAL (toggled (bool)), this, SLOT (setToolbarVisible (bool))); @@ -230,7 +230,7 @@ TrMainWindow::TrMainWindow (Session& session, Prefs& prefs, TorrentModel& model, menu->addSeparator (); menu->addAction (ui.action_Quit); myTrayIcon.setContextMenu (menu); - myTrayIcon.setIcon (QIcon::fromTheme ("transmission-tray-icon", qApp->windowIcon ())); + myTrayIcon.setIcon (QIcon::fromTheme (QLatin1String ("transmission-tray-icon"), qApp->windowIcon ())); connect (&myPrefs, SIGNAL (changed (int)), this, SLOT (refreshPref (int))); connect (ui.action_ShowMainWindow, SIGNAL (triggered (bool)), this, SLOT (toggleWindows (bool))); @@ -583,7 +583,7 @@ void openSelect (const QString& path) scriptArgs.clear (); scriptArgs << QLatin1String ("-e") << QLatin1String ("tell application \"Finder\" to activate"); - QProcess::execute ("/usr/bin/osascript", scriptArgs); + QProcess::execute (QLatin1String ("/usr/bin/osascript"), scriptArgs); } #endif @@ -595,15 +595,15 @@ TrMainWindow::openFolder () QString path (tor->getPath ()); const FileList files = tor->files (); const QString firstfile = files.at (0).filename; - int slashIndex = firstfile.indexOf ('/'); + int slashIndex = firstfile.indexOf (QLatin1Char ('/')); if (slashIndex > -1) { - path = path + "/" + firstfile.left (slashIndex); + path = path + QLatin1Char ('/') + firstfile.left (slashIndex); } #ifdef HAVE_OPEN_SELECT else { - openSelect (path + "/" + firstfile); + openSelect (path + QLatin1Char ('/') + firstfile); return; } #endif @@ -620,7 +620,7 @@ TrMainWindow::copyMagnetLinkToClipboard () void TrMainWindow::openDonate () { - QDesktopServices::openUrl (QUrl ("http://www.transmissionbt.com/donate.php")); + QDesktopServices::openUrl (QUrl (QLatin1String ("http://www.transmissionbt.com/donate.php"))); } void @@ -633,7 +633,7 @@ TrMainWindow::openHelp () void TrMainWindow::refreshTitle () { - QString title ("Transmission"); + QString title (QLatin1String ("Transmission")); const QUrl url (mySession.getRemoteUrl ()); if (!url.isEmpty ()) //: Second (optional) part of main window title "Transmission - host:port" (added when connected to remote session); @@ -699,17 +699,17 @@ TrMainWindow::refreshStatusBar () const QString mode (myPrefs.getString (Prefs::STATUSBAR_STATS)); QString str; - if (mode == "session-ratio") + if (mode == QLatin1String ("session-ratio")) { str = tr ("Ratio: %1").arg (Formatter::ratioToString (mySession.getStats ().ratio)); } - else if (mode == "session-transfer") + else if (mode == QLatin1String ("session-transfer")) { const tr_session_stats& stats (mySession.getStats ()); str = tr ("Down: %1, Up: %2").arg (Formatter::sizeToString (stats.downloadedBytes)) .arg (Formatter::sizeToString (stats.uploadedBytes)); } - else if (mode == "total-transfer") + else if (mode == QLatin1String ("total-transfer")) { const tr_session_stats& stats (mySession.getCumulativeStats ()); str = tr ("Down: %1, Up: %2").arg (Formatter::sizeToString (stats.downloadedBytes)) @@ -973,10 +973,10 @@ TrMainWindow::refreshPref (int key) { case Prefs::STATUSBAR_STATS: str = myPrefs.getString (key); - ui.action_TotalRatio->setChecked (str == "total-ratio"); - ui.action_TotalTransfer->setChecked (str == "total-transfer"); - ui.action_SessionRatio->setChecked (str == "session-ratio"); - ui.action_SessionTransfer->setChecked (str == "session-transfer"); + ui.action_TotalRatio->setChecked (str == QLatin1String ("total-ratio")); + ui.action_TotalTransfer->setChecked (str == QLatin1String ("total-transfer")); + ui.action_SessionRatio->setChecked (str == QLatin1String ("session-ratio")); + ui.action_SessionTransfer->setChecked (str == QLatin1String ("session-transfer")); refreshStatusBar (); break; @@ -1096,7 +1096,10 @@ TrMainWindow::refreshPref (int key) **** ***/ -#define SHOW_OPTIONS_CHECKBOX_NAME "show-options-checkbox" +namespace +{ + const QLatin1String SHOW_OPTIONS_CHECKBOX_NAME ("show-options-checkbox"); +} void TrMainWindow::newTorrent () @@ -1250,7 +1253,7 @@ TrMainWindow::removeTorrents (const bool deleteFiles) if (connected && incomplete) { - secondary_text += "\n"; + secondary_text += QLatin1Char ('\n'); } if (incomplete) @@ -1309,7 +1312,7 @@ TrMainWindow::updateNetworkIcon () key = "network-receive"; else key = "network-idle"; - const QIcon icon = getStockIcon (key, QStyle::SP_DriveNetIcon); + const QIcon icon = getStockIcon (QLatin1String (key), QStyle::SP_DriveNetIcon); const QPixmap pixmap = icon.pixmap (16, 16); QString tip; @@ -1387,10 +1390,10 @@ TrMainWindow::dragEnterEvent (QDragEnterEvent * event) { const QMimeData * mime = event->mimeData (); - if (mime->hasFormat ("application/x-bittorrent") + if (mime->hasFormat (QLatin1String ("application/x-bittorrent")) || mime->hasUrls() - || mime->text ().trimmed ().endsWith (".torrent", Qt::CaseInsensitive) - || mime->text ().startsWith ("magnet:", Qt::CaseInsensitive)) + || mime->text ().trimmed ().endsWith (QLatin1String (".torrent"), Qt::CaseInsensitive) + || mime->text ().startsWith (QLatin1String ("magnet:"), Qt::CaseInsensitive)) event->acceptProposedAction (); } @@ -1401,7 +1404,7 @@ TrMainWindow::dropEvent (QDropEvent * event) if (event->mimeData()->hasText()) { - list = event->mimeData()->text().trimmed().split('\n'); + list = event->mimeData()->text().trimmed().split(QLatin1Char ('\n')); } else if (event->mimeData()->hasUrls()) { @@ -1417,7 +1420,7 @@ TrMainWindow::dropEvent (QDropEvent * event) { const QUrl url (key); - if (url.scheme () == "file") + if (url.scheme () == QLatin1String ("file")) key = QUrl::fromPercentEncoding (url.path().toUtf8()); qApp->addTorrent (key); diff --git a/qt/make-dialog.cc b/qt/make-dialog.cc index d8463553d..22f766c7c 100644 --- a/qt/make-dialog.cc +++ b/qt/make-dialog.cc @@ -132,7 +132,7 @@ MakeDialog::makeTorrent () // get the tiers int tier = 0; QVector trackers; - foreach (QString line, ui.trackersEdit->toPlainText ().split ("\n")) + foreach (QString line, ui.trackersEdit->toPlainText ().split (QLatin1Char ('\n'))) { line = line.trimmed (); if (line.isEmpty ()) @@ -150,7 +150,7 @@ MakeDialog::makeTorrent () // the file to create const QString path = QString::fromUtf8 (myBuilder->top); - const QString torrentName = QFileInfo (path).completeBaseName () + ".torrent"; + const QString torrentName = QFileInfo (path).completeBaseName () + QLatin1String (".torrent"); const QString target = QDir (ui.destinationButton->path ()).filePath (torrentName); // comment diff --git a/qt/options.cc b/qt/options.cc index e755ee031..314b9a57e 100644 --- a/qt/options.cc +++ b/qt/options.cc @@ -438,7 +438,7 @@ OptionsDialog::onTimeout () if (!have) // everything failed { // did the user accidentally specify the child directory instead of the parent? - const QStringList tokens = QString::fromUtf8 (file->name).split ('/'); + const QStringList tokens = QString::fromUtf8 (file->name).split (QLatin1Char ('/')); if (!tokens.empty () && myLocalDestination.dirName () == tokens.at (0)) { // move up one directory and try again diff --git a/qt/prefs.cc b/qt/prefs.cc index 847c44137..0a5c0dc7d 100644 --- a/qt/prefs.cc +++ b/qt/prefs.cc @@ -162,12 +162,12 @@ Prefs::Prefs (const QString& configDir): case TrTypes::SortModeType: if (tr_variantGetStr (b, &str, NULL)) - myValues[i] = QVariant::fromValue (SortMode (str)); + myValues[i] = QVariant::fromValue (SortMode (QString::fromUtf8 (str))); break; case TrTypes::FilterModeType: if (tr_variantGetStr (b, &str, NULL)) - myValues[i] = QVariant::fromValue (FilterMode (str)); + myValues[i] = QVariant::fromValue (FilterMode (QString::fromUtf8 (str))); break; case QVariant::String: @@ -257,7 +257,7 @@ Prefs::~Prefs () // update settings.json with our settings tr_variant file_settings; - const QFile file (QDir(myConfigDir).absoluteFilePath("settings.json")); + const QFile file (QDir(myConfigDir).absoluteFilePath(QLatin1String ("settings.json"))); if (tr_variantFromFile (&file_settings, TR_VARIANT_FMT_JSON, file.fileName().toUtf8().constData())) tr_variantInitDict (&file_settings, PREFS_COUNT); tr_variantMergeDicts (&file_settings, ¤t_settings); diff --git a/qt/qtr.pro b/qt/qtr.pro index 2c0d81e03..1b65113de 100644 --- a/qt/qtr.pro +++ b/qt/qtr.pro @@ -19,6 +19,9 @@ greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets } +DEFINES += QT_NO_CAST_FROM_ASCII +win32:DEFINES += QT_DBUS + TRANSMISSION_TOP = .. include(config.pri) @@ -32,7 +35,6 @@ LIBS += $${LIBB64_LIBS} LIBS += $${LIBUPNP_LIBS} LIBS += $${LIBNATPMP_LIBS} unix: LIBS += -L$${EVENT_TOP}/lib -lz -lrt -win32:DEFINES += QT_DBUS win32:LIBS += -levent-2.0 -lws2_32 -lintl win32:LIBS += -lidn -liconv -lwldap32 -liphlpapi diff --git a/qt/rpc-client.cc b/qt/rpc-client.cc index ea98ab45b..c28800e1a 100644 --- a/qt/rpc-client.cc +++ b/qt/rpc-client.cc @@ -70,8 +70,8 @@ RpcClient::isLocal () const return true; #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - if (myUrl.host () == "127.0.0.1" || - myUrl.host ().compare ("localhost", Qt::CaseInsensitive) == 0) + if (myUrl.host () == QLatin1String ("127.0.0.1") || + myUrl.host ().compare (QLatin1String ("localhost"), Qt::CaseInsensitive) == 0) return true; #else if (QHostAddress (myUrl.host ()).isLoopback ()) @@ -123,7 +123,7 @@ RpcClient::sendRequest (const QByteArray& json) { QNetworkRequest request; request.setUrl (myUrl); - request.setRawHeader ("User-Agent", (qApp->applicationName () + "/" + LONG_VERSION_STRING).toUtf8 ()); + request.setRawHeader ("User-Agent", (qApp->applicationName () + QLatin1Char ('/') + QString::fromUtf8 (LONG_VERSION_STRING)).toUtf8 ()); request.setRawHeader ("Content-Type", "application/json; charset=UTF-8"); if (!mySessionId.isEmpty ()) diff --git a/qt/session.cc b/qt/session.cc index 504641dea..863a141f8 100644 --- a/qt/session.cc +++ b/qt/session.cc @@ -81,7 +81,7 @@ FileAdded::executed (int64_t tag, const QString& result, tr_variant * arguments) if (tag != myTag) return; - if (result == "success") + if (result == QLatin1String ("success")) { tr_variant * dup; const char * str; @@ -218,13 +218,13 @@ Session::updatePref (int key) switch (i) { case 0: - sessionSet (myPrefs.getKey (key), "tolerated"); + sessionSet (myPrefs.getKey (key), QLatin1String ("tolerated")); break; case 1: - sessionSet (myPrefs.getKey (key), "preferred"); + sessionSet (myPrefs.getKey (key), QLatin1String ("preferred")); break; case 2: - sessionSet (myPrefs.getKey (key), "required"); + sessionSet (myPrefs.getKey (key), QLatin1String ("required")); break; } break; @@ -334,10 +334,10 @@ Session::start () if (myPrefs.get (Prefs::SESSION_IS_REMOTE)) { QUrl url; - url.setScheme ("http"); + url.setScheme (QLatin1String ("http")); url.setHost (myPrefs.get (Prefs::SESSION_REMOTE_HOST)); url.setPort (myPrefs.get (Prefs::SESSION_REMOTE_PORT)); - url.setPath ("/transmission/rpc"); + url.setPath (QLatin1String ("/transmission/rpc")); if (myPrefs.get (Prefs::SESSION_REMOTE_AUTH)) { url.setUserName (myPrefs.get (Prefs::SESSION_REMOTE_USERNAME)); @@ -660,7 +660,7 @@ Session::responseReceived (int64_t tag, const QString& result, tr_variant * args tr_variantDictFindStr (args, TR_KEY_path, &path, 0); tr_variantDictFindStr (args, TR_KEY_name, &name, 0); const QString title = tr ("Error Renaming Path"); - const QString text = tr ("

Unable to rename \"%1\" as \"%2\": %3.

Please correct the errors and try again.

").arg (path).arg (name).arg (result); + const QString text = tr ("

Unable to rename \"%1\" as \"%2\": %3.

Please correct the errors and try again.

").arg (QString::fromUtf8 (path)).arg (QString::fromUtf8 (name)).arg (result); QMessageBox * d = new QMessageBox (QMessageBox::Information, title, text, QMessageBox::Close, qApp->activeWindow ()); @@ -698,7 +698,7 @@ Session::responseReceived (int64_t tag, const QString& result, tr_variant * args && tr_variantDictFindList (args, TR_KEY_torrents, &torrents) && ( (child = tr_variantListChild (torrents, 0))) && tr_variantDictFindStr (child, TR_KEY_magnetLink, &str, NULL)) - qApp->clipboard ()->setText (str); + qApp->clipboard ()->setText (QString::fromUtf8 (str)); break; } @@ -842,8 +842,8 @@ Session::updateInfo (tr_variant * d) if (tr_variantDictFindInt (d, TR_KEY_blocklist_size, &i) && i!=blocklistSize ()) setBlocklistSize (i); - if (tr_variantDictFindStr (d, TR_KEY_version, &str, NULL) && (mySessionVersion != str)) - mySessionVersion = str; + if (tr_variantDictFindStr (d, TR_KEY_version, &str, NULL) && (mySessionVersion != QString::fromUtf8 (str))) + mySessionVersion = QString::fromUtf8 (str); //std::cerr << "Session::updateInfo end" << std::endl; connect (&myPrefs, SIGNAL (changed (int)), this, SLOT (updatePref (int))); @@ -978,12 +978,12 @@ Session::launchWebInterface () if (!mySession) // remote session { url = myRpc.url (); - url.setPath ("/transmission/web/"); + url.setPath (QLatin1String ("/transmission/web/")); } else // local session { - url.setScheme ("http"); - url.setHost ("localhost"); + url.setScheme (QLatin1String ("http")); + url.setHost (QLatin1String ("localhost")); url.setPort (myPrefs.getInt (Prefs::RPC_PORT)); } diff --git a/qt/torrent-delegate-min.cc b/qt/torrent-delegate-min.cc index ef992e45f..2c67ea10f 100644 --- a/qt/torrent-delegate-min.cc +++ b/qt/torrent-delegate-min.cc @@ -180,7 +180,7 @@ TorrentDelegateMin::drawTorrent (QPainter * painter, progressBarState |= QStyle::State_Small; const QIcon::Mode emblemIm = isItemSelected ? QIcon::Selected : QIcon::Normal; - const QIcon emblemIcon = tor.hasError () ? QIcon::fromTheme ("emblem-important", style->standardIcon (QStyle::SP_MessageBoxWarning)) : QIcon (); + const QIcon emblemIcon = tor.hasError () ? QIcon::fromTheme (QLatin1String ("emblem-important"), style->standardIcon (QStyle::SP_MessageBoxWarning)) : QIcon (); // layout const QSize m (margin (*style)); diff --git a/qt/torrent-delegate.cc b/qt/torrent-delegate.cc index 317b38068..b29cc22d0 100644 --- a/qt/torrent-delegate.cc +++ b/qt/torrent-delegate.cc @@ -485,7 +485,7 @@ TorrentDelegate::drawTorrent (QPainter * painter, progressBarState |= QStyle::State_Small; const QIcon::Mode emblemIm = isItemSelected ? QIcon::Selected : QIcon::Normal; - const QIcon emblemIcon = tor.hasError () ? QIcon::fromTheme ("emblem-important", style->standardIcon (QStyle::SP_MessageBoxWarning)) : QIcon (); + const QIcon emblemIcon = tor.hasError () ? QIcon::fromTheme (QLatin1String ("emblem-important"), style->standardIcon (QStyle::SP_MessageBoxWarning)) : QIcon (); // layout const QSize m (margin (*style)); diff --git a/qt/torrent.cc b/qt/torrent.cc index e28e226cc..14dd59e26 100644 --- a/qt/torrent.cc +++ b/qt/torrent.cc @@ -246,7 +246,7 @@ Torrent::setString (int i, const char * value) assert (0<=i && i"; - const QString err_markup_end = ""; - const QString timeout_markup_begin = ""; - const QString timeout_markup_end = ""; - const QString success_markup_begin = ""; - const QString success_markup_end = ""; + const QString err_markup_begin = QLatin1String (""); + const QString err_markup_end = QLatin1String (""); + const QString timeout_markup_begin = QLatin1String (""); + const QString timeout_markup_end = QLatin1String (""); + const QString success_markup_begin = QLatin1String (""); + const QString success_markup_end = QLatin1String (""); // hostname - str += inf.st.isBackup ? "" : ""; + str += inf.st.isBackup ? QLatin1String ("") : QLatin1String (""); char * host = NULL; int port = 0; tr_urlParse (inf.st.announce.toUtf8().constData(), -1, NULL, &host, &port, NULL); - str += QString::fromLatin1 ("%1:%2").arg (host).arg (port); + str += QString::fromLatin1 ("%1:%2").arg (QString::fromUtf8 (host)).arg (port); tr_free (host); - if (!key.isEmpty()) str += " - " + key; - str += inf.st.isBackup ? "" : ""; + if (!key.isEmpty()) str += QLatin1String (" - ") + key; + str += inf.st.isBackup ? QLatin1String ("") : QLatin1String (""); // announce & scrape info if (!inf.st.isBackup) @@ -196,7 +196,7 @@ TrackerDelegate::getText (const TrackerInfo& inf) const if (inf.st.hasAnnounced && inf.st.announceState != TR_TRACKER_INACTIVE) { const QString tstr (timeToStringRounded (now - inf.st.lastAnnounceTime)); - str += "
\n"; + str += QLatin1String ("
\n"); if (inf.st.lastAnnounceSucceeded) { //: %1 and %2 are replaced with HTML markup, %3 is duration @@ -227,27 +227,27 @@ TrackerDelegate::getText (const TrackerInfo& inf) const switch (inf.st.announceState) { case TR_TRACKER_INACTIVE: - str += "
\n"; + str += QLatin1String ("
\n"); str += tr ("No updates scheduled"); break; case TR_TRACKER_WAITING: { const QString tstr (timeToStringRounded (inf.st.nextAnnounceTime - now)); - str += "
\n"; + str += QLatin1String ("
\n"); //: %1 is duration str += tr ("Asking for more peers in %1").arg (tstr); break; } case TR_TRACKER_QUEUED: - str += "
\n"; + str += QLatin1String ("
\n"); str += tr ("Queued to ask for more peers"); break; case TR_TRACKER_ACTIVE: { const QString tstr (timeToStringRounded (now - inf.st.lastAnnounceStartTime)); - str += "
\n"; + str += QLatin1String ("
\n"); //: %1 is duration str += tr ("Asking for more peers now... %1").arg (tstr); break; @@ -258,7 +258,7 @@ TrackerDelegate::getText (const TrackerInfo& inf) const { if (inf.st.hasScraped) { - str += "
\n"; + str += QLatin1String ("
\n"); const QString tstr (timeToStringRounded (now - inf.st.lastScrapeTime)); if (inf.st.lastScrapeSucceeded) { @@ -304,7 +304,7 @@ TrackerDelegate::getText (const TrackerInfo& inf) const case TR_TRACKER_WAITING: { - str += "
\n"; + str += QLatin1String ("
\n"); const QString tstr (timeToStringRounded (inf.st.nextScrapeTime - now)); //: %1 is duration str += tr ("Asking for peer counts in %1").arg (tstr); @@ -313,14 +313,14 @@ TrackerDelegate::getText (const TrackerInfo& inf) const case TR_TRACKER_QUEUED: { - str += "
\n"; + str += QLatin1String ("
\n"); str += tr ("Queued to ask for peer counts"); break; } case TR_TRACKER_ACTIVE: { - str += "
\n"; + str += QLatin1String ("
\n"); const QString tstr (timeToStringRounded (now - inf.st.lastScrapeStartTime)); //: %1 is duration str += tr ("Asking for peer counts now... %1").arg (tstr);