summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/application.cpp39
-rw-r--r--src/application.h9
-rw-r--r--src/bookmarks/bookmarkprovider.cpp4
-rw-r--r--src/bookmarks/bookmarkstreemodel.cpp5
-rw-r--r--src/history/historymodels.cpp3
-rw-r--r--src/iconmanager.cpp154
-rw-r--r--src/iconmanager.h61
-rw-r--r--src/mainview.cpp6
-rw-r--r--src/mainwindow.cpp5
-rw-r--r--src/protocolhandler.cpp1
-rw-r--r--src/search/searchengine.cpp10
-rw-r--r--src/tabbar.cpp3
-rw-r--r--src/urlbar/listitem.cpp18
-rw-r--r--src/urlbar/listitem.h2
-rw-r--r--src/urlbar/rsswidget.cpp3
-rw-r--r--src/urlbar/urlbar.cpp19
-rw-r--r--src/urlbar/urlbar.h2
-rw-r--r--src/webicon.cpp74
-rw-r--r--src/webicon.h58
-rw-r--r--src/webpage.cpp22
-rw-r--r--src/webpage.h1
-rw-r--r--src/webtab.cpp6
-rw-r--r--src/webview.cpp3
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);