From ae1c295495659fb01874ae6af4d0b89a0a2424dc Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 23 Apr 2012 00:34:19 +0200 Subject: Fix opensearch add shortcut handling (at least on every site tested, but opensearch.org itself. Broken?) BUG: 296707 --- src/opensearch/opensearchmanager.cpp | 100 ++++++++++++++++++----------------- src/opensearch/opensearchmanager.h | 4 +- src/opensearch/opensearchreader.cpp | 1 + src/urlbar/urlbar.cpp | 3 +- src/urlbar/webshortcutwidget.cpp | 9 ++-- src/urlbar/webshortcutwidget.h | 14 ++++- src/webtab.cpp | 2 +- src/webtab.h | 12 ++--- 8 files changed, 79 insertions(+), 66 deletions(-) diff --git a/src/opensearch/opensearchmanager.cpp b/src/opensearch/opensearchmanager.cpp index 04e687f3..c315f9c8 100644 --- a/src/opensearch/opensearchmanager.cpp +++ b/src/opensearch/opensearchmanager.cpp @@ -115,9 +115,8 @@ bool OpenSearchManager::isSuggestionAvailable() void OpenSearchManager::addOpenSearchEngine(const KUrl &url, const QString &title, const QString &shortcut) { - Q_UNUSED(title); - m_shortcut = shortcut; + m_title = trimmedEngineName(title); if (m_state != IDLE) { @@ -171,67 +170,49 @@ void OpenSearchManager::dataReceived(KIO::Job *job, const QByteArray &data) void OpenSearchManager::jobFinished(KJob *job) { - // Do NOT parse if job had same errors or the typed string is empty - if (job->error() || _typedText.isEmpty()) - { - emit suggestionsReceived(_typedText, ResponseList()); - m_state = IDLE; - return; // just silently return - } - - if (m_state == REQ_SUGGESTION) - { - ResponseList suggestionsList; - if (isSuggestionAvailable()) - { - suggestionsList = m_activeEngine->parseSuggestion(_typedText, m_jobData); - } - emit suggestionsReceived(_typedText, suggestionsList); - idleJob(); - return; - } - - if (m_state == REQ_DESCRIPTION) + if (!job->error() && m_state == REQ_DESCRIPTION) { OpenSearchReader reader; OpenSearchEngine *engine = reader.read(m_jobData); if (engine) { - m_engineCache.insert(engine->name(), engine); - m_engines.insert(m_jobUrl, trimmedEngineName(engine->name())); + m_engineCache.insert(m_title, engine); + m_engines.insert(m_jobUrl, m_shortcut); saveEngines(); QString path; - if (engine->providesSuggestions()) //save opensearch description only if it provides suggestions + if (engine->providesSuggestions()) { + // save opensearch description only if it provides suggestions OpenSearchWriter writer; path = KGlobal::dirs()->findResource("data", "rekonq/opensearch/"); QFile file(path + trimmedEngineName(engine->name()) + ".xml"); writer.write(&file, engine); - } - QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); - m_currentJob = NULL; - - path = KGlobal::mainComponent().dirs()->saveLocation("services", "searchproviders/"); - KConfig _service(path + trimmedEngineName(engine->name()) + ".desktop", KConfig::SimpleConfig); - KConfigGroup service(&_service, "Desktop Entry"); - service.writeEntry("Type", "Service"); - service.writeEntry("ServiceTypes", "SearchProvider"); - service.writeEntry("Name", engine->name()); - service.writeEntry("Query", searchUrl); - service.writeEntry("Keys", m_shortcut); - // TODO charset - service.writeEntry("Charset", "" /* provider->charset() */); - // we might be overwriting a hidden entry - service.writeEntry("Hidden", false); - service.sync(); - - // Update filters in running applications... - QDBusMessage msg = QDBusMessage::createSignal("/", "org.kde.KUriFilterPlugin", "configure"); - QDBusConnection::sessionBus().send(msg); - - emit openSearchEngineAdded(engine->name(), searchUrl, m_shortcut); + // save desktop file here + QString searchUrl = OpenSearchEngine::parseTemplate("\\{@}", engine->searchUrlTemplate()); + m_currentJob = NULL; + + path = KGlobal::mainComponent().dirs()->saveLocation("services", "searchproviders/"); + KConfig _service(path + m_title + ".desktop", KConfig::SimpleConfig); + KConfigGroup service(&_service, "Desktop Entry"); + service.writeEntry("Type", "Service"); + service.writeEntry("ServiceTypes", "SearchProvider"); + service.writeEntry("Name", m_title); + service.writeEntry("Query", searchUrl); + service.writeEntry("Keys", m_shortcut); + // TODO charset + service.writeEntry("Charset", "" /* provider->charset() */); + // we might be overwriting a hidden entry + service.writeEntry("Hidden", false); + service.sync(); + + // Update filters in running applications... + QDBusMessage msg = QDBusMessage::createSignal("/", "org.kde.KUriFilterPlugin", "configure"); + QDBusConnection::sessionBus().send(msg); + + emit openSearchEngineAdded(engine->name()); + } } else { @@ -239,6 +220,27 @@ void OpenSearchManager::jobFinished(KJob *job) } idleJob(); + return; + } + + // Do NOT parse if job had same errors or the typed string is empty + if (job->error() || _typedText.isEmpty()) + { + emit suggestionsReceived(_typedText, ResponseList()); + m_state = IDLE; + return; // just silently return + } + + if (m_state == REQ_SUGGESTION) + { + ResponseList suggestionsList; + if (isSuggestionAvailable()) + { + suggestionsList = m_activeEngine->parseSuggestion(_typedText, m_jobData); + } + emit suggestionsReceived(_typedText, suggestionsList); + idleJob(); + return; } } diff --git a/src/opensearch/opensearchmanager.h b/src/opensearch/opensearchmanager.h index a72e4e20..3f99a06e 100644 --- a/src/opensearch/opensearchmanager.h +++ b/src/opensearch/opensearchmanager.h @@ -97,7 +97,7 @@ private Q_SLOTS: Q_SIGNALS: void suggestionsReceived(const QString &text, const ResponseList &suggestion); - void openSearchEngineAdded(const QString &name, const QString &searchUrl, const QString &fileName); + void openSearchEngineAdded(const QString &name); private: QString trimmedEngineName(const QString &engineName) const; @@ -117,7 +117,9 @@ private: KUrl m_jobUrl; QString _typedText; + QString m_shortcut; + QString m_title; }; #endif // OPENSEARCHMANAGER_H diff --git a/src/opensearch/opensearchreader.cpp b/src/opensearch/opensearchreader.cpp index 897fca29..a4f43b7a 100644 --- a/src/opensearch/opensearchreader.cpp +++ b/src/opensearch/opensearchreader.cpp @@ -83,6 +83,7 @@ OpenSearchEngine *OpenSearchReader::read() || namespaceUri() != QL1S("http://a9.com/-/spec/opensearch/1.1/") ) { + kDebug() << "The file is not an OpenSearch 1.1 file: " << name(); raiseError(i18n("The file is not an OpenSearch 1.1 file.")); return engine; } diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index b796224b..1a8410a3 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -136,8 +136,7 @@ UrlBar::UrlBar(QWidget *parent) connect(_tab->view(), SIGNAL(iconChanged()), this, SLOT(refreshFavicon())); // search icon - connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString,QString,QString)), - this, SLOT(updateRightIcons())); + connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString)), this, SLOT(updateRightIcons())); // bookmark icon connect(rApp->bookmarkManager(), SIGNAL(bookmarksUpdated()), this, SLOT(updateRightIcons())); diff --git a/src/urlbar/webshortcutwidget.cpp b/src/urlbar/webshortcutwidget.cpp index 409d0b32..c6dc3b79 100644 --- a/src/urlbar/webshortcutwidget.cpp +++ b/src/urlbar/webshortcutwidget.cpp @@ -4,6 +4,7 @@ * * Copyright (C) 2009 by Fredy Yanardi * Copyright (C) 2010-2011 by Lionel Chauvin +* Copyright (C) 2012 by Andrea Diamantini * * * This program is free software; you can redistribute it and/or @@ -27,7 +28,7 @@ // Self Includes #include "webshortcutwidget.h" -#include "rekonq_defines.h" +#include "webshortcutwidget.moc" // KDE Includes #include @@ -113,6 +114,8 @@ void WebShortcutWidget::show(const KUrl &url, const QString &openSearchName, con void WebShortcutWidget::accept() { emit webShortcutSet(m_url, m_nameLineEdit->text(), m_wsLineEdit->text()); + + // close widget (and destroy it) close(); } @@ -158,7 +161,3 @@ void WebShortcutWidget::shortcutsChanged(const QString& newShorthands) } } } - -#include "webshortcutwidget.moc" - - diff --git a/src/urlbar/webshortcutwidget.h b/src/urlbar/webshortcutwidget.h index bc072f47..d1291714 100644 --- a/src/urlbar/webshortcutwidget.h +++ b/src/urlbar/webshortcutwidget.h @@ -4,6 +4,7 @@ * * Copyright (C) 2009 by Fredy Yanardi * Copyright (C) 2010-2011 by Lionel Chauvin +* Copyright (C) 2012 by Andrea Diamantini * * * This program is free software; you can redistribute it and/or @@ -28,15 +29,24 @@ #ifndef WEBSHORTCUTWIDGET_H #define WEBSHORTCUTWIDGET_H -#include + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes #include #include +// Qt Includes +#include + +// Forward Declarations class QLabel; class QLineEdit; class QPushButton; -class WebShortcutWidget : public QMenu + +class REKONQ_TESTS_EXPORT WebShortcutWidget : public QMenu { Q_OBJECT public: diff --git a/src/webtab.cpp b/src/webtab.cpp index 1519d833..e2ffe0d5 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -330,7 +330,7 @@ void WebTab::showSearchEngine(const QPoint &pos) connect(widget, SIGNAL(webShortcutSet(KUrl,QString,QString)), rApp->opensearchManager(), SLOT(addOpenSearchEngine(KUrl,QString,QString))); - connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString,QString,QString)), + connect(rApp->opensearchManager(), SIGNAL(openSearchEngineAdded(QString)), this, SLOT(openSearchEngineAdded())); widget->show(extractOpensearchUrl(e), title, pos); diff --git a/src/webtab.h b/src/webtab.h index e9805846..6d5a79b4 100644 --- a/src/webtab.h +++ b/src/webtab.h @@ -33,21 +33,21 @@ #include "rekonq_defines.h" // Local Includes -#include "webpage.h" #include "webview.h" // KDE Includes #include // Qt Includes -#include +#include // Forward Declarations -class UrlBar; -class PreviewSelectorBar; -class WalletBar; class NotificationBar; +class PreviewSelectorBar; class QPoint; +class UrlBar; +class WalletBar; +class WebPage; class REKONQ_TESTS_EXPORT WebTab : public QWidget @@ -102,7 +102,7 @@ private Q_SLOTS: void showRSSInfo(const QPoint &pos); void showSearchEngine(const QPoint &pos); void openSearchEngineAdded(); - + void showMessageBar(); void loadFinished(); -- cgit v1.2.1