diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/application.cpp | 39 | ||||
| -rw-r--r-- | src/application.h | 9 | ||||
| -rw-r--r-- | src/bookmarks/bookmarkprovider.cpp | 4 | ||||
| -rw-r--r-- | src/bookmarks/bookmarkstreemodel.cpp | 5 | ||||
| -rw-r--r-- | src/history/historymodels.cpp | 3 | ||||
| -rw-r--r-- | src/iconmanager.cpp | 154 | ||||
| -rw-r--r-- | src/iconmanager.h | 61 | ||||
| -rw-r--r-- | src/mainview.cpp | 6 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 5 | ||||
| -rw-r--r-- | src/protocolhandler.cpp | 1 | ||||
| -rw-r--r-- | src/search/searchengine.cpp | 10 | ||||
| -rw-r--r-- | src/tabbar.cpp | 3 | ||||
| -rw-r--r-- | src/urlbar/listitem.cpp | 18 | ||||
| -rw-r--r-- | src/urlbar/listitem.h | 2 | ||||
| -rw-r--r-- | src/urlbar/rsswidget.cpp | 3 | ||||
| -rw-r--r-- | src/urlbar/urlbar.cpp | 19 | ||||
| -rw-r--r-- | src/urlbar/urlbar.h | 2 | ||||
| -rw-r--r-- | src/webicon.cpp | 74 | ||||
| -rw-r--r-- | src/webicon.h | 58 | ||||
| -rw-r--r-- | src/webpage.cpp | 22 | ||||
| -rw-r--r-- | src/webpage.h | 1 | ||||
| -rw-r--r-- | src/webtab.cpp | 6 | ||||
| -rw-r--r-- | src/webview.cpp | 3 | 
24 files changed, 439 insertions, 73 deletions
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 03c1e062..95995183 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,7 +11,7 @@ SET( rekonq_KDEINIT_SRCS      clicktoflash.cpp      filterurljob.cpp      findbar.cpp -    zoombar.cpp +    iconmanager.cpp      mainview.cpp      mainwindow.cpp      networkaccessmanager.cpp @@ -22,6 +22,7 @@ SET( rekonq_KDEINIT_SRCS      sessionmanager.cpp      tabbar.cpp      walletbar.cpp +    webicon.cpp      webinspectorpanel.cpp      webpage.cpp      webpluginfactory.cpp @@ -29,6 +30,7 @@ SET( rekonq_KDEINIT_SRCS      websnap.cpp      webview.cpp      webtab.cpp +    zoombar.cpp      #----------------------------------------      history/autosaver.cpp      history/historymanager.cpp diff --git a/src/application.cpp b/src/application.cpp index df4c3d51..d66e290f 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -43,6 +43,7 @@  #include "sessionmanager.h"  #include "adblockmanager.h"  #include "opensearchmanager.h" +#include "iconmanager.h"  #include "webview.h"  #include "filterurljob.h"  #include "tabbar.h" @@ -66,6 +67,7 @@ QWeakPointer<BookmarkProvider> Application::s_bookmarkProvider;  QWeakPointer<SessionManager> Application::s_sessionManager;  QWeakPointer<AdBlockManager> Application::s_adblockManager;  QWeakPointer<OpenSearchManager> Application::s_opensearchManager; +QWeakPointer<IconManager> Application::s_iconManager;  Application::Application() @@ -250,10 +252,6 @@ void Application::postLaunch()      setWindowIcon(KIcon("rekonq")); -    // set Icon Database Path to store "favicons" associated with web sites -    QString directory = KStandardDirs::locateLocal("cache" , "" , true); -    QWebSettings::setIconDatabasePath(directory); -      Application::historyManager();      Application::sessionManager(); @@ -331,38 +329,13 @@ OpenSearchManager *Application::opensearchManager()  } -KIcon Application::icon(const KUrl &url) +IconManager *Application::iconManager()  { -    // avoid infinite loop at startup -    if (Application::instance()->mainWindowList().isEmpty()) -        return KIcon("text-html"); - -    // first things first.. -    if (url.isEmpty()) -        return KIcon("text-html"); - -    QByteArray encodedUrl = url.toEncoded(); -    // rekonq icons.. -    if (encodedUrl == QByteArray("about:home")) -        return KIcon("go-home"); -    if (encodedUrl == QByteArray("about:closedTabs")) -        return KIcon("tab-close"); -    if (encodedUrl == QByteArray("about:history")) -        return KIcon("view-history"); -    if (encodedUrl == QByteArray("about:bookmarks")) -        return KIcon("bookmarks"); -    if (encodedUrl == QByteArray("about:favorites")) -        return KIcon("emblem-favorite"); -    if (encodedUrl == QByteArray("about:downloads")) -        return KIcon("download"); - -    KIcon icon = KIcon(QWebSettings::iconForUrl(url)); -    if (icon.isNull()) +    if (s_iconManager.isNull())      { -        kDebug() << "null icon"; -        icon = KIcon("text-html"); +        s_iconManager = new IconManager(instance());      } -    return icon; +    return s_iconManager.data();  } diff --git a/src/application.h b/src/application.h index a08d883c..26f5cf74 100644 --- a/src/application.h +++ b/src/application.h @@ -52,6 +52,7 @@ class HistoryManager;  class MainWindow;  class SessionManager;  class AdBlockManager; +class IconManager;  class WebView; @@ -107,14 +108,13 @@ public:      MainWindow *newMainWindow(bool withTab = true);      MainWindowList mainWindowList(); -    static KIcon icon(const KUrl &url); -      static HistoryManager *historyManager();      static BookmarkProvider *bookmarkProvider();      static SessionManager *sessionManager();      static AdBlockManager *adblockManager();      static OpenSearchManager *opensearchManager(); - +    static IconManager *iconManager(); +          // DOWNLOADS MANAGEMENT METHODS      void addDownload(const QString &srcUrl, const QString &destUrl);      DownloadList downloads(); @@ -152,7 +152,8 @@ private:      static QWeakPointer<SessionManager> s_sessionManager;      static QWeakPointer<AdBlockManager> s_adblockManager;      static QWeakPointer<OpenSearchManager> s_opensearchManager; - +    static QWeakPointer<IconManager> s_iconManager; +          MainWindowList m_mainWindows;  }; diff --git a/src/bookmarks/bookmarkprovider.cpp b/src/bookmarks/bookmarkprovider.cpp index ec02ed31..3459108d 100644 --- a/src/bookmarks/bookmarkprovider.cpp +++ b/src/bookmarks/bookmarkprovider.cpp @@ -39,6 +39,7 @@  // KDE Includes  #include <KActionCollection>  #include <KStandardDirs> +#include <KMimeType>  // Qt Includes  #include <QtCore/QFile> @@ -230,7 +231,8 @@ void BookmarkProvider::fillBookmarkBar(BookmarkToolBar *toolBar)  void BookmarkProvider::slotAddBookmark()  { -    rootGroup().addBookmark(bookmarkOwner()->currentTitle(), bookmarkOwner()->currentUrl()); +    QString url = bookmarkOwner()->currentUrl(); +    rootGroup().addBookmark(bookmarkOwner()->currentTitle(), url, KMimeType::favIconForUrl( KUrl(url) ) );      bookmarkManager()->emitChanged();  } diff --git a/src/bookmarks/bookmarkstreemodel.cpp b/src/bookmarks/bookmarkstreemodel.cpp index ee19daf1..ba106ca5 100644 --- a/src/bookmarks/bookmarkstreemodel.cpp +++ b/src/bookmarks/bookmarkstreemodel.cpp @@ -62,8 +62,11 @@ QVariant BtmItem::data(int role) const          return m_kbm.text();      if (role == Qt::DecorationRole) +    { +        kDebug() << "BOOKMARK ICON: " << m_kbm.icon();          return KIcon(m_kbm.icon()); - +    } +          if (role == Qt::UserRole)          return m_kbm.url(); diff --git a/src/history/historymodels.cpp b/src/history/historymodels.cpp index 9da755c5..a820db0f 100644 --- a/src/history/historymodels.cpp +++ b/src/history/historymodels.cpp @@ -35,6 +35,7 @@  // Local Includes  #include "application.h" +#include "iconmanager.h"  // KDE Includes  #include <KStandardDirs> @@ -144,7 +145,7 @@ QVariant HistoryModel::data(const QModelIndex &index, int role) const      case Qt::DecorationRole:          if (index.column() == 0)          { -            return Application::icon(item.url); +            return Application::iconManager()->iconForUrl(item.url);          }      case Qt::ToolTipRole:          QString tooltip = ""; diff --git a/src/iconmanager.cpp b/src/iconmanager.cpp new file mode 100644 index 00000000..694af6a5 --- /dev/null +++ b/src/iconmanager.cpp @@ -0,0 +1,154 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "iconmanager.h" +#include "iconmanager.moc" + +// Local Includes +#include "application.h" +#include "webicon.h" + +// KDE Includes +#include <kmimetype.h> +#include <KStandardDirs> + +// Qt Includes +#include <QDBusInterface> +#include <QDBusReply> +#include <QWebElement> +#include <QWebFrame> +#include <QAction> + + +IconManager::IconManager(QObject *parent) +    : QObject(parent) +{ +} + + +IconManager::~IconManager() +{ +} + + +KIcon IconManager::iconForUrl(const KUrl &url) +{ +    // first things first.. avoid infinite loop at startup +    if (url.isEmpty() || Application::instance()->mainWindowList().isEmpty()) +        return KIcon("text-html"); + +    QByteArray encodedUrl = url.toEncoded(); +    // rekonq icons.. +    if (encodedUrl == QByteArray("about:home")) +        return KIcon("go-home"); +    if (encodedUrl == QByteArray("about:closedTabs")) +        return KIcon("tab-close"); +    if (encodedUrl == QByteArray("about:history")) +        return KIcon("view-history"); +    if (encodedUrl == QByteArray("about:bookmarks")) +        return KIcon("bookmarks"); +    if (encodedUrl == QByteArray("about:favorites")) +        return KIcon("emblem-favorite"); +    if (encodedUrl == QByteArray("about:downloads")) +        return KIcon("download"); + +    QString i = KMimeType::favIconForUrl(url); +    QString faviconDir = KStandardDirs::locateLocal("cache" , "" , true); +    if(!i.isEmpty()) +    { +        return KIcon(faviconDir + i); +    } +    kDebug() << "Icon NOT Found. returning text-html one"; +     +    return KIcon("text-html"); +} + + +void IconManager::provideIcon(QWebPage *page, const KUrl &url, bool notify) +{ +    if(url.scheme() == QL1S("about")) +    { +        kDebug() << "URL: " << url << ". about scheme. Aborting..."; +        return; +    } +    QUrl u(url.url()); +    QString rootUrlString = u.toString(  QUrl::RemovePassword  +                                       | QUrl::RemoveUserInfo  +                                       | QUrl::RemovePath  +                                       | QUrl::RemoveQuery  +                                       | QUrl::StripTrailingSlash); +     +    // check if icon exists +    if(!KMimeType::favIconForUrl(url).isEmpty()) +    { +        kDebug() << "icon JUST present. Aborting..."; +        if(notify) +            emit iconChanged(); +        return; +    } +     +    // find ico url +    KUrl iconUrl(rootUrlString + QL1S("/favicon.ico")); +     +    QWebElement root = page->mainFrame()->documentElement(); +    QWebElement e = root.findFirst(QL1S("link[rel~=\"icon\"]")); +    QString relUrlString = e.attribute(QL1S("href")); +    if(relUrlString.isEmpty()) +    { +        e = root.findFirst(QL1S("link[rel~=\"shortcut icon\"]")); +        relUrlString = e.attribute(QL1S("href")); +    } +     +    if(!relUrlString.isEmpty()) +    {  +        iconUrl = relUrlString.startsWith("http") +                ? KUrl(relUrlString)  +                : KUrl(rootUrlString + relUrlString) ; +    } +     +    kDebug() << "ICON URL: " << iconUrl; +     +    QString faviconDir = KStandardDirs::locateLocal("cache" , "favicons/" , true); +     +    int r = rootUrlString.indexOf(':'); +    kDebug() << rootUrlString; +    kDebug() << r; +     +    KUrl destUrl(faviconDir + rootUrlString.mid(r+3) + ".png"); +    kDebug() << "DEST URL: " << destUrl; +     +    // download icon +    KIO::Job *job = KIO::file_copy(iconUrl, destUrl, -1, KIO::HideProgressInfo); +    if(notify) +        connect(job, SIGNAL(result(KJob*)), this, SIGNAL(iconChanged())); +} + + +void IconManager::downloadIconFromUrl(const KUrl &url) +{ +    new WebIcon(url, this); +} diff --git a/src/iconmanager.h b/src/iconmanager.h new file mode 100644 index 00000000..794e61bd --- /dev/null +++ b/src/iconmanager.h @@ -0,0 +1,61 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef ICON_MANAGER_H +#define ICON_MANAGER_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes +#include <KUrl> +#include <KIcon> +#include <KIO/Job> + +// Qt Includes +#include <QWebPage> + + +class REKONQ_TESTS_EXPORT IconManager : public QObject +{ +    Q_OBJECT +     +public: +    IconManager(QObject *parent = 0);     +    virtual ~IconManager(); + +    KIcon iconForUrl(const KUrl &url); +     +    void provideIcon(QWebPage *page, const KUrl &url, bool notify = true); + +    void downloadIconFromUrl(const KUrl &url); +     +Q_SIGNALS: +    void iconChanged(); +}; + + +#endif // ICON_MANAGER_H diff --git a/src/mainview.cpp b/src/mainview.cpp index dc759c9e..75d98b39 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -38,6 +38,7 @@  #include "tabbar.h"  #include "urlbar.h"  #include "sessionmanager.h" +#include "iconmanager.h"  // KDE Includes  #include <KUrl> @@ -322,7 +323,6 @@ WebTab *MainView::newWebTab(bool focused)      // connecting webview with mainview      connect(tab->view(), SIGNAL(loadStarted()), this, SLOT(webViewLoadStarted()));      connect(tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(webViewLoadFinished(bool))); -    connect(tab->view(), SIGNAL(iconChanged()), this, SLOT(webViewIconChanged()));      connect(tab->view(), SIGNAL(titleChanged(const QString &)), this, SLOT(webViewTitleChanged(const QString &)));      connect(tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(webViewUrlChanged(const QUrl &))); @@ -576,7 +576,7 @@ void MainView::webViewIconChanged()      int index = indexOf(view->parentWidget());      if (-1 != index)      { -        KIcon icon = Application::icon(view->url()); +        KIcon icon = Application::iconManager()->iconForUrl(view->url());          QLabel *label = animatedLoading(index, false);          QMovie *movie = label->movie();          delete movie; @@ -725,7 +725,7 @@ void MainView::detachTab(int index, MainWindow *toWindow)              w = Application::instance()->newMainWindow(false);          else              w = toWindow; -        w->mainView()->addTab(tab, Application::icon(u), label); +        w->mainView()->addTab(tab, Application::iconManager()->iconForUrl(u), label);          w->mainView()->widgetBar()->insertWidget(0, bar);          w->mainView()->updateTabBar();      } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 44cc6d59..5bacb699 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -50,6 +50,7 @@  #include "tabbar.h"  #include "adblockmanager.h"  #include "analyzerpanel.h" +#include "iconmanager.h"  // Ui Includes  #include "ui_cleardata.h" @@ -1233,7 +1234,7 @@ void MainWindow::aboutToShowBackMenu()          QWebHistoryItem item = history->currentItem();          KAction *action = new KAction(this);          action->setData(listCount + offset++); -        KIcon icon = Application::icon(item.url()); +        KIcon icon = Application::iconManager()->iconForUrl(item.url());          action->setIcon(icon);          action->setText(item.title());          m_historyBackMenu->addAction(action); @@ -1244,7 +1245,7 @@ void MainWindow::aboutToShowBackMenu()          QWebHistoryItem item = historyList.at(i);          KAction *action = new KAction(this);          action->setData(i + offset); -        KIcon icon = Application::icon(item.url()); +        KIcon icon = Application::iconManager()->iconForUrl(item.url());          action->setIcon(icon);          action->setText(item.title());          m_historyBackMenu->addAction(action); diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp index 5cc09f44..d52433bc 100644 --- a/src/protocolhandler.cpp +++ b/src/protocolhandler.cpp @@ -108,6 +108,7 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra                  return false;          } +        kDebug() << "EVALUATING JAVASCRIPT...";          QVariant result = frame->evaluateJavaScript(scriptSource);          return true;      } diff --git a/src/search/searchengine.cpp b/src/search/searchengine.cpp index 7065d55f..38f063a4 100644 --- a/src/search/searchengine.cpp +++ b/src/search/searchengine.cpp @@ -27,6 +27,8 @@  //local includes  #include "searchengine.h" +#include "application.h" +#include "iconmanager.h"  // Auto Includes  #include "rekonq.h" @@ -59,7 +61,13 @@ void SearchEngine::reload()      {          service = KService::serviceByDesktopPath(QString("searchproviders/%1.desktop").arg(engine));          if (service) -                favorites << service; +        { +            QUrl url = service->property("Query").toUrl(); +            kDebug() << "ENGINE URL: " << url; +            Application::iconManager()->downloadIconFromUrl(url); +             +            favorites << service; +        }      }      m_favorites = favorites; diff --git a/src/tabbar.cpp b/src/tabbar.cpp index 98243e71..f4da2e54 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -39,6 +39,7 @@  #include "webtab.h"  #include "websnap.h"  #include "mainview.h" +#include "iconmanager.h"  // KDE Includes  #include <KShortcut> @@ -379,7 +380,7 @@ void TabBar::setupHistoryActions()      foreach (const HistoryItem &item, mv->recentlyClosedTabs())      { -        KAction *a = new KAction(Application::icon(item.url), item.title, this); +        KAction *a = new KAction(Application::iconManager()->iconForUrl(item.url), item.title, this);          a->setData(item.url);          connect(a, SIGNAL(triggered()), mv, SLOT(openClosedTab()));          am->addAction(a); diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index 5bd2253f..6c09f9a5 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -37,6 +37,7 @@  #include "websnap.h"  #include "completionwidget.h"  #include "searchengine.h" +#include "iconmanager.h"  // KDE Includes  #include <KIcon> @@ -187,12 +188,20 @@ QLabel *TypeIconLabel::getIcon(QString icon)  IconLabel::IconLabel(const QString &icon, QWidget *parent)          : QLabel(parent)  { -    QPixmap pixmapIcon = Application::icon(KUrl(icon)).pixmap(16); +    QPixmap pixmapIcon = Application::iconManager()->iconForUrl(KUrl(icon)).pixmap(16);      setFixedSize(16, 16);      setPixmap(pixmapIcon);  } +IconLabel::IconLabel(const KIcon &icon, QWidget *parent) +    : QLabel(parent) +{ +    QPixmap pixmapIcon = icon.pixmap(16); +    setFixedSize(16, 16); +    setPixmap(pixmapIcon); +} +  // --------------------------------------------------------------- @@ -294,7 +303,8 @@ SearchListItem::SearchListItem(const UrlSearchItem &item, const QString &text, Q      m_url = SearchEngine::buildQuery(engine, query); -    m_iconLabel = new IconLabel("edit-find", this); //TODO: get the default engine icon (will be easy in KDE SC 4.5) +    KIcon icon = Application::iconManager()->iconForUrl( SearchEngine::defaultEngine()->property("Query").toUrl() ); +    m_iconLabel = new IconLabel(icon, this); //TODO: get the default engine icon (will be easy in KDE SC 4.5)      m_titleLabel = new TextLabel(searchItemTitle(engine->name(), query), query, this);      m_engineBar = new EngineBar(engine, parent); @@ -328,7 +338,7 @@ QString SearchListItem::searchItemTitle(QString engine, QString text)  void SearchListItem::changeSearchEngine(KService::Ptr engine)  {      m_titleLabel->setText(searchItemTitle(engine->name(), m_text)); -    m_iconLabel->setPixmap(Application::icon(KUrl(engine->property("Query").toString())).pixmap(16)); +    m_iconLabel->setPixmap( Application::iconManager()->iconForUrl(KUrl(engine->property("Query").toString())).pixmap(16) );      m_url = SearchEngine::buildQuery(engine, m_text);      qobject_cast<CompletionWidget *>(parent())->setSearchEngine(engine);  } @@ -371,7 +381,7 @@ KAction *EngineBar::newEngineAction(KService::Ptr engine, KService::Ptr selected      KUrl url = KUrl( u.toString( QUrl::RemovePath | QUrl::RemoveQuery ) );      kDebug() << "Engine NAME: " << engine->name() << " URL: " << url; -    KAction *a = new KAction(Application::icon(url), engine->name(), this); +    KAction *a = new KAction(Application::iconManager()->iconForUrl(url), engine->name(), this);      a->setCheckable(true);      if (engine->desktopEntryName() == selectedEngine->desktopEntryName()) a->setChecked(true);      a->setData(engine->entryPath()); diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index 06a02b80..37b22f47 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -37,6 +37,7 @@  // KDE Includes  #include <KToolBar>  #include <KService> +#include <KIcon>  // Qt Includes  #include <QWidget> @@ -107,6 +108,7 @@ class IconLabel : public QLabel  public:      explicit IconLabel(const QString &icon, QWidget *parent = 0); +    explicit IconLabel(const KIcon &icon, QWidget *parent = 0);  }; diff --git a/src/urlbar/rsswidget.cpp b/src/urlbar/rsswidget.cpp index 6cd63b95..25587502 100644 --- a/src/urlbar/rsswidget.cpp +++ b/src/urlbar/rsswidget.cpp @@ -33,6 +33,7 @@  #include "mainwindow.h"  #include "webtab.h"  #include "webview.h" +#include "iconmanager.h"  // KDE Includes  #include <KLocalizedString> @@ -75,7 +76,7 @@ RSSWidget::RSSWidget(const QMap< KUrl, QString > &map, QWidget *parent)      m_agregators->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);      m_agregators->addItem(KIcon("akregator"), QString("Akregator")); -    m_agregators->addItem(Application::icon(KUrl("http://google.com/reader")), i18n("Google Reader")); +    m_agregators->addItem(Application::iconManager()->iconForUrl(KUrl("http://google.com/reader")), i18n("Google Reader"));      layout->addRow(agregator, m_agregators); diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index 65c0a213..0b966b74 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -43,6 +43,7 @@  #include "completionwidget.h"  #include "bookmarkprovider.h"  #include "bookmarkwidget.h" +#include "iconmanager.h"  // KDE Includes  #include <KBookmarkManager> @@ -110,7 +111,8 @@ UrlBar::UrlBar(QWidget *parent)      connect(_tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(setQUrl(const QUrl &)));      connect(_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(loadFinished()));      connect(_tab->view(), SIGNAL(loadStarted()), this, SLOT(clearRightIcons())); - +    connect(_tab->view(), SIGNAL(iconChanged()), this, SLOT(refreshFavicon())); +          // bookmark icon      connect(Application::bookmarkProvider()->bookmarkManager(), SIGNAL(changed(const QString &, const QString &)), this, SLOT(onBookmarksChanged())); @@ -145,7 +147,7 @@ void UrlBar::setQUrl(const QUrl& url)          clearFocus();          KLineEdit::setUrl(url);          setCursorPosition(0); -        _icon->setIcon(Application::icon(url)); +        refreshFavicon();      }  } @@ -494,3 +496,16 @@ void UrlBar::suggest()      if(!_box.isNull())          _box.data()->suggestUrls( text() );  } + + +void UrlBar::refreshFavicon() +{ +    kDebug() << "------------------ REFRESH ME!!! -------------"; +//     if( u.scheme() == QL1S("about") ) +//     { +//         kDebug() << "ABOUT SCHEME..."; +//         return; +//     } +     +    _icon->setIcon(Application::iconManager()->iconForUrl(_tab->view()->url())); +} diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index 8808661b..6e05ea7e 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -108,6 +108,8 @@ private slots:      void showBookmarkInfo(const QPoint &pos);      void onBookmarksChanged(); +    void refreshFavicon(); +      protected:      void paintEvent(QPaintEvent *event);      void keyPressEvent(QKeyEvent *event); diff --git a/src/webicon.cpp b/src/webicon.cpp new file mode 100644 index 00000000..2aa35a41 --- /dev/null +++ b/src/webicon.cpp @@ -0,0 +1,74 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +// Self Includes +#include "webicon.h" +#include "webicon.moc" + +// Local Includes +#include "application.h" +#include "iconmanager.h" + +// Qt Includes +#include <QtCore/QTimer> +#include <QtGui/QAction> +#include <QtWebKit/QWebFrame> +#include <QtWebKit/QWebSettings> + + +WebIcon::WebIcon(const KUrl& url, QObject *parent) +        : QObject(parent) +        , m_url(url) +{ +    m_page.settings()->setAttribute(QWebSettings::PluginsEnabled, false); +    m_page.settings()->setAttribute(QWebSettings::JavascriptEnabled, false); +    m_page.settings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); +     +    connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveIcon(bool))); +    QTimer::singleShot(0, this, SLOT(load())); +} + + +WebIcon::~WebIcon() +{ +    m_page.action(QWebPage::Stop)->trigger(); +    m_page.deleteLater(); +} + + +void WebIcon::load() +{ +    m_page.mainFrame()->load(m_url); +} + + +void WebIcon::saveIcon(bool b) +{ +    if(b) +        Application::iconManager()->provideIcon(&m_page, m_url, false); +     +    this->deleteLater(); +} diff --git a/src/webicon.h b/src/webicon.h new file mode 100644 index 00000000..d8b20e10 --- /dev/null +++ b/src/webicon.h @@ -0,0 +1,58 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program.  If not, see <http://www.gnu.org/licenses/>. +* +* ============================================================ */ + + +#ifndef WEB_ICON_H +#define WEB_ICON_H + +// Rekonq Includes +#include "rekonq_defines.h" + +// KDE Includes +#include <KUrl> +#include <KIcon> + +// Qt Includes +#include <QWebPage> + + +class REKONQ_TESTS_EXPORT WebIcon : public QObject +{ +    Q_OBJECT + +public: +    explicit WebIcon(const KUrl &url, QObject *parent = 0); +    ~WebIcon(); + +private slots: +    void load(); +    void saveIcon(bool); + +private: +    QWebPage m_page; +    KUrl m_url; +}; + +#endif //WEB_ICON_H diff --git a/src/webpage.cpp b/src/webpage.cpp index 9167c96d..fbccbbe5 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -46,7 +46,7 @@  #include "networkaccessmanager.h"  #include "adblockmanager.h"  #include "urlbar.h" -//#include "websnap.h" +#include "iconmanager.h"  #include "sslinfodialog_p.h" @@ -212,9 +212,12 @@ WebPage::WebPage(QWidget *parent)      // ----- last stuffs      connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(manageNetworkErrors(QNetworkReply*)));      connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); +    connect(this, SIGNAL(loadStarted()), this, SLOT(loadStarted()));      // protocol handler signals      connect(&_protHandler, SIGNAL(downloadUrl(const KUrl &)), this, SLOT(downloadUrl(const KUrl &))); +     +    connect(Application::iconManager(), SIGNAL(iconChanged()), mainFrame(), SIGNAL(iconChanged()));  } @@ -473,10 +476,17 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply)  } +void WebPage::loadStarted() +{ +    Application::iconManager()->provideIcon(this, _loadingUrl); +} + +  void WebPage::loadFinished(bool ok)  {      Q_UNUSED(ok); +          Application::adblockManager()->applyHidingRules(this);      QStringList list = ReKonfig::walletBlackList(); @@ -488,16 +498,6 @@ void WebPage::loadFinished(bool ok)      {          wallet()->fillFormData(mainFrame());      } - -/* this dead code is for try WebSnap::renderVisiblePagePreview() -    if (ok) -    {         -        QPixmap preview = WebSnap::renderVisiblePagePreview(*this); -        QString path = WebSnap::imagePathFromUrl(mainFrame()->url().toString()); -        QFile::remove(path); -        preview.save(path); -    } -*/  } diff --git a/src/webpage.h b/src/webpage.h index f3d201c2..f9f4d9bf 100644 --- a/src/webpage.h +++ b/src/webpage.h @@ -83,6 +83,7 @@ private slots:      void handleUnsupportedContent(QNetworkReply *reply);      void manageNetworkErrors(QNetworkReply *reply);      void loadFinished(bool); +    void loadStarted();      void showSSLInfo(QPoint);      void updateImage(bool ok); diff --git a/src/webtab.cpp b/src/webtab.cpp index d5c5b478..2826123d 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -133,12 +133,6 @@ void WebTab::updateProgress(int p)  void WebTab::loadFinished(bool)  {      m_progress = 0; -    if(_walletBar.isNull()) -    { -        kDebug() << "OK, it's null"; -    } -    else -        kDebug() << "NO, it's NOT null";  } diff --git a/src/webview.cpp b/src/webview.cpp index 49ca66df..2c800036 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -39,6 +39,7 @@  #include "bookmarkprovider.h"  #include "searchengine.h"  #include "websnap.h" +#include "iconmanager.h"  // KDE Includes  #include <KService> @@ -203,7 +204,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event)          foreach(KService::Ptr engine, SearchEngine::favorites())          {              a = new KAction(engine->name(), this); -            a->setIcon(Application::icon(SearchEngine::buildQuery(engine, ""))); +            a->setIcon(Application::iconManager()->iconForUrl(SearchEngine::buildQuery(engine, "")));              a->setData(engine->entryPath());              connect(a, SIGNAL(triggered(bool)), this, SLOT(search()));              searchMenu->addAction(a); | 
