diff --git a/src/searchengine/searchengine.cpp b/src/searchengine/searchengine.cpp
index fca7318df..cd287afe2 100644
--- a/src/searchengine/searchengine.cpp
+++ b/src/searchengine/searchengine.cpp
@@ -148,7 +148,8 @@ void SearchEngine::tab_changed(int t)
{//when we switch from a tab that is not empty to another that is empty the download button
//doesn't have to be available
if (t>-1) {//-1 = no more tab
- if (all_tab.at(tabWidget->currentIndex())->getCurrentSearchListModel()->rowCount()) {
+ currentSearchTab = all_tab.at(tabWidget->currentIndex());
+ if (currentSearchTab->getCurrentSearchListModel()->rowCount()) {
download_button->setEnabled(true);
goToDescBtn->setEnabled(true);
}
@@ -156,6 +157,7 @@ void SearchEngine::tab_changed(int t)
download_button->setEnabled(false);
goToDescBtn->setEnabled(false);
}
+ search_status->setText(currentSearchTab->status);
}
}
@@ -194,6 +196,7 @@ void SearchEngine::on_search_button_clicked() {
search_button->setText(tr("Search"));
return;
}
+ allTabsSetActiveState(false);
}
searchProcess->waitForFinished();
// Reload environment variables (proxy)
@@ -207,6 +210,7 @@ void SearchEngine::on_search_button_clicked() {
}
// Tab Addition
currentSearchTab = new SearchTab(this);
+ activeSearchTab = currentSearchTab;
connect(currentSearchTab->header(), SIGNAL(sectionResized(int, int, int)), this, SLOT(saveResultsColumnsWidth()));
all_tab.append(currentSearchTab);
QString tabName = pattern;
@@ -278,7 +282,8 @@ void SearchEngine::downloadTorrent(QString engine_url, QString torrent_url) {
void SearchEngine::searchStarted() {
// Update SearchEngine widgets
- search_status->setText(tr("Searching..."));
+ activeSearchTab->status = tr("Searching...");
+ search_status->setText(activeSearchTab->status);
search_status->repaint();
search_button->setText(tr("Stop"));
}
@@ -298,8 +303,8 @@ void SearchEngine::readSearchOutput() {
foreach (const QByteArray &line, lines_list) {
appendSearchResult(QString::fromUtf8(line));
}
- if (currentSearchTab)
- currentSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):"));
+ if (activeSearchTab)
+ activeSearchTab->getCurrentLabel()->setText(tr("Results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):"));
}
void SearchEngine::downloadFinished(int exitcode, QProcess::ExitStatus) {
@@ -412,7 +417,7 @@ void SearchEngine::updateNova() {
// Slot called when search is Finished
// Search can be finished for 3 reasons :
// Error | Stopped by user | Finished normally
-void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) {
+void SearchEngine::searchFinished(int exitcode, QProcess::ExitStatus) {
if (searchTimeout->isActive()) {
searchTimeout->stop();
}
@@ -422,24 +427,28 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) {
}
if (exitcode) {
#ifdef Q_OS_WIN
- search_status->setText(tr("Search aborted"));
+ activeSearchTab->status = tr("Search aborted");
#else
- search_status->setText(tr("An error occurred during search..."));
+ activeSearchTab->status = tr("An error occurred during search...");
#endif
- }else{
+ } else {
if (search_stopped) {
- search_status->setText(tr("Search aborted"));
- }else{
+ activeSearchTab->status = tr("Search aborted");
+ } else {
if (no_search_results) {
- search_status->setText(tr("Search returned no results"));
- }else{
- search_status->setText(tr("Search has finished"));
+ activeSearchTab->status = tr("Search returned no results");
+ } else {
+ activeSearchTab->status = tr("Search has finished");
}
}
}
- if (currentSearchTab)
- currentSearchTab->getCurrentLabel()->setText(tr("Results", "i.e: Search results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):"));
+ if (activeSearchTab)
+ if (currentSearchTab == activeSearchTab) search_status->setText(activeSearchTab->status);
+ activeSearchTab->getCurrentLabel()->setText(tr("Results", "i.e: Search results")+QString::fromUtf8(" (")+QString::number(nb_search_results)+QString::fromUtf8("):"));
+ activeSearchTab->isActive = false;
+ activeSearchTab = 0;
+
search_button->setText(tr("Search"));
}
@@ -447,7 +456,7 @@ void SearchEngine::searchFinished(int exitcode,QProcess::ExitStatus) {
// Line is in the following form :
// file url | file name | file size | nb seeds | nb leechers | Search engine url
void SearchEngine::appendSearchResult(const QString &line) {
- if (!currentSearchTab) {
+ if (!activeSearchTab) {
if (searchProcess->state() != QProcess::NotRunning) {
searchProcess->terminate();
}
@@ -462,9 +471,9 @@ void SearchEngine::appendSearchResult(const QString &line) {
if (nb_fields < NB_PLUGIN_COLUMNS-1) { //-1 because desc_link is optional
return;
}
- Q_ASSERT(currentSearchTab);
+ Q_ASSERT(activeSearchTab);
// Add item to search result list
- QStandardItemModel* cur_model = currentSearchTab->getCurrentSearchListModel();
+ QStandardItemModel* cur_model = activeSearchTab->getCurrentSearchListModel();
Q_ASSERT(cur_model);
int row = cur_model->rowCount();
cur_model->insertRow(row);
@@ -498,8 +507,9 @@ void SearchEngine::appendSearchResult(const QString &line) {
}
void SearchEngine::closeTab(int index) {
- if (index == tabWidget->indexOf(currentSearchTab)) {
- qDebug("Deleted current search Tab");
+ // Search is run for active tab so if user decided to close it, then stop search
+ if (activeSearchTab && index == tabWidget->indexOf(activeSearchTab)) {
+ qDebug("Closed active search Tab");
if (searchProcess->state() != QProcess::NotRunning) {
searchProcess->terminate();
}
@@ -507,7 +517,8 @@ void SearchEngine::closeTab(int index) {
searchTimeout->stop();
}
search_stopped = true;
- currentSearchTab = 0;
+ if (currentSearchTab == activeSearchTab) currentSearchTab = 0;
+ activeSearchTab = 0;
}
delete all_tab.takeAt(index);
if (!all_tab.size()) {
@@ -544,3 +555,10 @@ void SearchEngine::on_goToDescBtn_clicked()
}
}
}
+
+inline void SearchEngine::allTabsSetActiveState(bool newState)
+{
+ foreach(SearchTab *tab, all_tab) {
+ tab->isActive = newState;
+ }
+}
diff --git a/src/searchengine/searchengine.h b/src/searchengine/searchengine.h
index 3724769ac..861ff8f39 100644
--- a/src/searchengine/searchengine.h
+++ b/src/searchengine/searchengine.h
@@ -121,10 +121,12 @@ private:
unsigned long nb_search_results;
SupportedEngines *supported_engines;
QTimer *searchTimeout;
- QPointer currentSearchTab;
+ QPointer currentSearchTab; // Selected tab
+ QPointer activeSearchTab; // Tab with running search
QList > all_tab; // To store all tabs
const SearchCategories full_cat_names;
MainWindow *mp_mainWindow;
+ inline void allTabsSetActiveState(bool);
};
#endif
diff --git a/src/searchengine/searchtab.cpp b/src/searchengine/searchtab.cpp
index b63dd436b..2ddf645b3 100644
--- a/src/searchengine/searchtab.cpp
+++ b/src/searchengine/searchtab.cpp
@@ -48,6 +48,8 @@ SearchTab::SearchTab(SearchEngine *parent) : QWidget(), parent(parent)
resultsBrowser->setSelectionMode(QAbstractItemView::ExtendedSelection);
box->addWidget(results_lbl);
box->addWidget(resultsBrowser);
+ // New tab is created with new search
+ isActive = true;
setLayout(box);
// Set Search results list model
diff --git a/src/searchengine/searchtab.h b/src/searchengine/searchtab.h
index 1eb859efb..7a8f27a64 100644
--- a/src/searchengine/searchtab.h
+++ b/src/searchengine/searchtab.h
@@ -71,6 +71,8 @@ public:
QTreeView * getCurrentTreeView();
void setRowColor(int row, QString color);
QHeaderView* header() const;
+ bool isActive;
+ QString status;
};
#endif