diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/adblock/adblockmanager.cpp | 30 | ||||
-rw-r--r-- | src/adblock/adblockmanager.h | 2 | ||||
-rw-r--r-- | src/bookmarks/bookmarksmanager.cpp | 50 | ||||
-rw-r--r-- | src/bookmarks/bookmarksmanager.h | 4 | ||||
-rw-r--r-- | src/mainview.cpp | 28 | ||||
-rw-r--r-- | src/mainview.h | 2 | ||||
-rw-r--r-- | src/mainwindow.cpp | 8 | ||||
-rw-r--r-- | src/networkaccessmanager.cpp | 17 | ||||
-rw-r--r-- | src/networkaccessmanager.h | 6 | ||||
-rw-r--r-- | src/settings/adblockwidget.cpp | 2 | ||||
-rw-r--r-- | src/urlbar/completionwidget.cpp | 23 | ||||
-rw-r--r-- | src/urlbar/completionwidget.h | 5 | ||||
-rw-r--r-- | src/urlbar/lineedit.cpp | 2 | ||||
-rw-r--r-- | src/urlbar/listitem.cpp | 3 | ||||
-rw-r--r-- | src/urlbar/listitem.h | 2 | ||||
-rw-r--r-- | src/urlbar/urlbar.cpp | 115 | ||||
-rw-r--r-- | src/urlbar/urlbar.h | 19 | ||||
-rw-r--r-- | src/urlbar/urlresolver.cpp | 51 | ||||
-rw-r--r-- | src/urlbar/urlresolver.h | 1 | ||||
-rw-r--r-- | src/webview.cpp | 88 | ||||
-rw-r--r-- | src/webview.h | 10 |
21 files changed, 311 insertions, 157 deletions
diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index 71412d5d..0a139bdc 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -148,7 +148,7 @@ void AdBlockManager::loadRules(const QStringList &rules) } -QNetworkReply *AdBlockManager::block(const QNetworkRequest &request) +QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *page) { if (!_isAdblockEnabled) return 0; @@ -179,6 +179,20 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request) kDebug() << "****ADBLOCK: BLACK RULE Matched: ***********"; kDebug() << "Filter exp: " << filter.pattern(); kDebug() << "UrlString: " << urlString; + + QWebElement document = page->mainFrame()->documentElement(); + QWebElementCollection elements = document.findAll("*"); + foreach (QWebElement el, elements) + { + if(filter.match( el.attribute("src") ) ) + { + kDebug() << "MATCHES ATTRIBUTE!!!!!"; + el.setStyleProperty(QLatin1String("visibility"), QLatin1String("hidden")); + el.setStyleProperty(QLatin1String("width"), QLatin1String("0")); + el.setStyleProperty(QLatin1String("height"), QLatin1String("0")); + } + } + AdBlockNetworkReply *reply = new AdBlockNetworkReply(request, urlString, this); return reply; } @@ -199,17 +213,21 @@ void AdBlockManager::applyHidingRules(WebPage *page) if (!_isHideAdsEnabled) return; + + QWebElement document = page->mainFrame()->documentElement(); + // HIDE RULES foreach(const QString &filter, _hideList) { - QWebElement document = page->mainFrame()->documentElement(); QWebElementCollection elements = document.findAll(filter); - foreach (QWebElement element, elements) + foreach (QWebElement el, elements) { - kDebug() << "Hide element: " << element.localName(); - element.setStyleProperty(QLatin1String("visibility"), QLatin1String("hidden")); - element.removeFromDocument(); + if(el.isNull()) + continue; + kDebug() << "Hide element: " << el.localName(); + el.setStyleProperty(QLatin1String("visibility"), QLatin1String("hidden")); + el.removeFromDocument(); } } } diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index c0bd2b70..9b1cc915 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -131,7 +131,7 @@ public: AdBlockManager(QObject *parent = 0); ~AdBlockManager(); - QNetworkReply *block(const QNetworkRequest &request); + QNetworkReply *block(const QNetworkRequest &request, WebPage *page); void applyHidingRules(WebPage *page); void addSubscription(const QString &title, const QString &location); diff --git a/src/bookmarks/bookmarksmanager.cpp b/src/bookmarks/bookmarksmanager.cpp index 89e39ef8..9c3201e6 100644 --- a/src/bookmarks/bookmarksmanager.cpp +++ b/src/bookmarks/bookmarksmanager.cpp @@ -294,7 +294,7 @@ KAction *BookmarkProvider::fillBookmarkBar(const KBookmark &bookmark) } else { - m_completion->addItem(bookmark.url().path()); + m_completion->addItem(bookmark.url().url()); return new KBookmarkAction(bookmark, m_owner, this); } } @@ -309,3 +309,51 @@ KCompletion *BookmarkProvider::completionObject() const { return m_completion; } + + + + + +QString BookmarkProvider::titleForBookmarkUrl(QString url) +{ + QString title = ""; + KBookmarkGroup bookGroup = Application::bookmarkProvider()->rootGroup(); + if (bookGroup.isNull()) + { + return title; + } + + KBookmark bookmark = bookGroup.first(); + while (!bookmark.isNull() && title.isEmpty()) + { + title = titleForBookmarkUrl(bookmark, url); + bookmark = bookGroup.next(bookmark); + } + + return title; +} + + +QString BookmarkProvider::titleForBookmarkUrl(const KBookmark &bookmark, QString url) +{ + QString title = ""; + if (bookmark.isGroup()) + { + KBookmarkGroup group = bookmark.toGroup(); + KBookmark bm = group.first(); + while (!bm.isNull() && title.isEmpty()) + { + title = titleForBookmarkUrl(bm, url); // it is .bookfolder + bm = group.next(bm); + } + } + else if(!bookmark.isSeparator() && bookmark.url()==url) + { + title = bookmark.fullText(); + } + + return title; +} + + + diff --git a/src/bookmarks/bookmarksmanager.h b/src/bookmarks/bookmarksmanager.h index 18ff3ef0..ace06e95 100644 --- a/src/bookmarks/bookmarksmanager.h +++ b/src/bookmarks/bookmarksmanager.h @@ -219,6 +219,8 @@ public: */ KCompletion *completionObject() const; + QString titleForBookmarkUrl(QString url); + signals: /** * @short This signal is emitted when an url has to be loaded @@ -245,8 +247,10 @@ public slots: */ void slotBookmarksChanged(const QString &group, const QString &caller); + private: KAction *fillBookmarkBar(const KBookmark &bookmark); + QString titleForBookmarkUrl(const KBookmark &bookmark, QString url); KBookmarkManager *m_manager; BookmarkOwner *m_owner; diff --git a/src/mainview.cpp b/src/mainview.cpp index 6643becb..a00325fb 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -275,41 +275,31 @@ void MainView::currentChanged(int index) m_currentTabIndex = index; if (oldTab) - { - // disconnecting webview from urlbar - disconnect(oldTab->view(), SIGNAL(loadProgress(int)), urlBar(), SLOT(updateProgress(int))); - disconnect(oldTab->view(), SIGNAL(loadFinished(bool)), urlBar(), SLOT(loadFinished(bool))); - disconnect(oldTab->view(), SIGNAL(urlChanged(const QUrl &)), urlBar(), SLOT(setUrl(const QUrl &))); - + { // disconnecting webpage from mainview disconnect(oldTab->page(), SIGNAL(statusBarMessage(const QString&)), this, SIGNAL(showStatusBarMessage(const QString&))); disconnect(oldTab->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)), this, SIGNAL(linkHovered(const QString&))); } - - // connecting webview with urlbar - connect(tab->view(), SIGNAL(loadProgress(int)), urlBar(), SLOT(updateProgress(int))); - connect(tab->view(), SIGNAL(loadFinished(bool)), urlBar(), SLOT(loadFinished(bool))); - connect(tab->view(), SIGNAL(urlChanged(const QUrl &)), urlBar(), SLOT(setUrl(const QUrl &))); connect(tab->page(), SIGNAL(statusBarMessage(const QString&)), this, SIGNAL(showStatusBarMessage(const QString&))); connect(tab->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)), this, SIGNAL(linkHovered(const QString&))); - emit setCurrentTitle(tab->view()->title()); - urlBar()->setUrl(tab->view()->url()); - urlBar()->setProgress(tab->progress()); - + emit currentTitle(tab->view()->title()); + urlBar()->setCurrentTab(tab); + // clean up "status bar" emit showStatusBarMessage( QString() ); // notify UI to eventually switch stop/reload button - if(urlBar()->isLoading()) - emit browserTabLoading(true); - else + int progr = tab->progress(); + if(progr == 0) emit browserTabLoading(false); + else + emit browserTabLoading(true); // update zoom slider if(!Application::instance()->mainWindowList().isEmpty()) @@ -613,7 +603,7 @@ void MainView::webViewTitleChanged(const QString &title) } if (currentIndex() == index) { - emit setCurrentTitle(tabTitle); + emit currentTitle(tabTitle); } Application::historyManager()->updateHistoryEntry(view->url(), tabTitle); } diff --git a/src/mainview.h b/src/mainview.h index 061ad1aa..fc10c2d9 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -105,7 +105,7 @@ signals: void lastTabClosed(); // current tab signals - void setCurrentTitle(const QString &url); + void currentTitle(const QString &url); void showStatusBarMessage(const QString &message, Rekonq::Notify status = Rekonq::Info); void linkHovered(const QString &link); void browserTabLoading(bool); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6efd58ed..6701ea2e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -215,7 +215,7 @@ void MainWindow::postLaunch() connect(m_view, SIGNAL(linkHovered(const QString&)), this, SLOT(notifyMessage(const QString&))); // --------- connect signals and slots - connect(m_view, SIGNAL(setCurrentTitle(const QString &)), this, SLOT(updateWindowTitle(const QString &))); + connect(m_view, SIGNAL(currentTitle(const QString &)), this, SLOT(updateWindowTitle(const QString &))); connect(m_view, SIGNAL(printRequested(QWebFrame *)), this, SLOT(printRequested(QWebFrame *))); // (shift +) ctrl + tab switching @@ -751,7 +751,7 @@ void MainWindow::privateBrowsing(bool enable) if (button == KMessageBox::Continue) { settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - m_view->urlBar()->setBackgroundColor(Qt::lightGray); // palette().color(QPalette::Active, QPalette::Background)); + m_view->urlBar()->setPrivateMode(true); } else { @@ -761,8 +761,8 @@ void MainWindow::privateBrowsing(bool enable) else { settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); - m_view->urlBar()->setBackgroundColor(palette().color(QPalette::Active, QPalette::Base)); - + m_view->urlBar()->setPrivateMode(false); + m_lastSearch.clear(); m_view->clear(); m_view->reloadAllTabs(); diff --git a/src/networkaccessmanager.cpp b/src/networkaccessmanager.cpp index 77597cef..99337206 100644 --- a/src/networkaccessmanager.cpp +++ b/src/networkaccessmanager.cpp @@ -32,10 +32,15 @@ // Local Includes #include "application.h" #include "adblockmanager.h" +#include "webpage.h" + +// KDE Includes #include <KDebug> + NetworkAccessManager::NetworkAccessManager(QObject *parent) : AccessManager(parent) + , _parentPage( qobject_cast<WebPage *>(parent) ) { } @@ -48,16 +53,16 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, const QNetworkR { case QNetworkAccessManager::HeadOperation: kDebug() << "HEAD OPERATION"; - if(outgoingData) - { - QByteArray outgoingDataByteArray = outgoingData->peek(1024 * 1024); - kDebug() << outgoingDataByteArray; - } +// if(outgoingData) +// { +// QByteArray outgoingDataByteArray = outgoingData->peek(1024 * 1024); +// kDebug() << outgoingDataByteArray; +// } break; case QNetworkAccessManager::GetOperation: kDebug() << "GET OPERATION"; - reply = Application::adblockManager()->block(req); + reply = Application::adblockManager()->block(req, _parentPage); if (reply) return reply; break; diff --git a/src/networkaccessmanager.h b/src/networkaccessmanager.h index 5e55c1e6..352f67d6 100644 --- a/src/networkaccessmanager.h +++ b/src/networkaccessmanager.h @@ -31,6 +31,7 @@ // Local Includes #include "rekonqprivate_export.h" +#include "webpage.h" // KDE Includes #include <kio/accessmanager.h> @@ -44,10 +45,13 @@ class REKONQ_TESTS_EXPORT NetworkAccessManager : public AccessManager Q_OBJECT public: - NetworkAccessManager(QObject *parent = 0); + NetworkAccessManager(QObject *parent); protected: virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData = 0); + +private: + WebPage *_parentPage; }; #endif // NETWORKACCESSMANAGER_H diff --git a/src/settings/adblockwidget.cpp b/src/settings/adblockwidget.cpp index 39df2c36..2f431c1e 100644 --- a/src/settings/adblockwidget.cpp +++ b/src/settings/adblockwidget.cpp @@ -166,7 +166,7 @@ void AdBlockWidget::save() n = listWidget->count(); for(int i = 0; i < n; ++i) { - QListWidgetItem *item = listWidget->takeItem(i); + QListWidgetItem *item = listWidget->item(i); localRules << item->text(); } localGroup.writeEntry( "local-rules" , localRules ); diff --git a/src/urlbar/completionwidget.cpp b/src/urlbar/completionwidget.cpp index 42abcb73..3a54f890 100644 --- a/src/urlbar/completionwidget.cpp +++ b/src/urlbar/completionwidget.cpp @@ -72,7 +72,7 @@ void CompletionWidget::insertSearchList(const UrlSearchList &list) { UrlSearchItem item = list.at(i); ListItem *suggestion = new ListItem(item); - connect(suggestion, SIGNAL(itemClicked(ListItem *)), this, SLOT(itemChosen(ListItem *))); + connect(suggestion, SIGNAL(itemClicked(ListItem *, Qt::MouseButton)), this, SLOT(itemChosen(ListItem *, Qt::MouseButton))); suggestion->setObjectName( QString::number(i) ); layout()->addWidget( suggestion ); } @@ -82,7 +82,14 @@ void CompletionWidget::insertSearchList(const UrlSearchList &list) void CompletionWidget::sizeAndPosition() { // size - setFixedHeight(layout()->count() * 44 ); + int h = 34; + ListItem *widget; + for(int i = 0; i < layout()->count(); ++i) + { + widget = findChild<ListItem *>( QString::number(i) ); + h = qMax(widget->sizeHint().height(), h); + } + setFixedHeight(layout()->count() * (h + 10) ); setFixedWidth( _parent->width() ); // position @@ -206,9 +213,10 @@ bool CompletionWidget::eventFilter( QObject *o, QEvent *e ) } break; + case Qt::Key_Enter: case Qt::Key_Return: hide(); - emit chosenUrl(currentUrl().url()); + emit chosenUrl(currentUrl().url(), Rekonq::CurrentTab); ev->accept(); return true; break; @@ -235,8 +243,11 @@ void CompletionWidget::setVisible( bool visible ) } -void CompletionWidget::itemChosen(ListItem *item) +void CompletionWidget::itemChosen(ListItem *item, Qt::MouseButton button) { - emit chosenUrl(_list.at(layout()->indexOf(item)).url); + if(button == Qt::MidButton) + emit chosenUrl(_list.at(layout()->indexOf(item)).url, Rekonq::NewCurrentTab); + else + emit chosenUrl(_list.at(layout()->indexOf(item)).url, Rekonq::CurrentTab); hide(); -}
\ No newline at end of file +} diff --git a/src/urlbar/completionwidget.h b/src/urlbar/completionwidget.h index 7b474bd8..64d33189 100644 --- a/src/urlbar/completionwidget.h +++ b/src/urlbar/completionwidget.h @@ -29,6 +29,7 @@ // Local Includes +#include "application.h" #include "urlresolver.h" #include "listitem.h" @@ -60,10 +61,10 @@ public: KUrl currentUrl(); private slots: - void itemChosen(ListItem *item); + void itemChosen(ListItem *item, Qt::MouseButton = Qt::LeftButton); signals: - void chosenUrl(const QString&); + void chosenUrl(const QString&, Rekonq::OpenType); private: void sizeAndPosition(); diff --git a/src/urlbar/lineedit.cpp b/src/urlbar/lineedit.cpp index f3c93e8e..ac92b858 100644 --- a/src/urlbar/lineedit.cpp +++ b/src/urlbar/lineedit.cpp @@ -42,7 +42,7 @@ LineEdit::LineEdit(QWidget* parent) setMinimumWidth(200); setFocusPolicy(Qt::WheelFocus); setHandleSignals(true); - setClearButtonShown(true); + setClearButtonShown(false); } diff --git a/src/urlbar/listitem.cpp b/src/urlbar/listitem.cpp index 92951cb7..d9837c7e 100644 --- a/src/urlbar/listitem.cpp +++ b/src/urlbar/listitem.cpp @@ -44,6 +44,7 @@ #include <QPixmap> #include <QStylePainter> #include <QFile> +#include <QMouseEvent> ListItem::ListItem(const UrlSearchItem &item, QWidget *parent) : QWidget(parent), @@ -167,7 +168,7 @@ void ListItem::leaveEvent(QEvent *e) void ListItem::mousePressEvent(QMouseEvent *e) { - emit itemClicked(this); + emit itemClicked(this, e->button()); QWidget::mousePressEvent(e); } diff --git a/src/urlbar/listitem.h b/src/urlbar/listitem.h index 6aa3f1e9..ac476d4b 100644 --- a/src/urlbar/listitem.h +++ b/src/urlbar/listitem.h @@ -44,7 +44,7 @@ public: void deactivate(); signals: - void itemClicked(ListItem *item); + void itemClicked(ListItem *item, Qt::MouseButton); protected: virtual void paintEvent(QPaintEvent *event); diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index 54a0a02d..a04d6534 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -50,14 +50,13 @@ #include <QTimer> #include <QVBoxLayout> -QColor UrlBar::s_defaultBaseColor; - UrlBar::UrlBar(QWidget *parent) : KComboBox(true, parent) , m_lineEdit(new LineEdit) - , m_progress(0) , m_box(new CompletionWidget(this)) + , _tab(0) + , _privateMode(false) { //cosmetic setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); @@ -72,11 +71,6 @@ UrlBar::UrlBar(QWidget *parent) p.setColor(QPalette::Base, Qt::transparent); m_lineEdit->setPalette(p); - if (!s_defaultBaseColor.isValid()) - { - s_defaultBaseColor = palette().color(QPalette::Base); - } - setLineEdit(m_lineEdit); // clear the URL bar @@ -85,7 +79,7 @@ UrlBar::UrlBar(QWidget *parent) connect(this, SIGNAL(returnPressed(const QString&)), SLOT(activated(const QString&))); installEventFilter(m_box); - connect(m_box, SIGNAL(chosenUrl(const QString&)), SLOT(activated(const QString&))); + connect(m_box, SIGNAL(chosenUrl(const QString&, Rekonq::OpenType)), SLOT(activated(const QString&, Rekonq::OpenType))); } @@ -123,13 +117,6 @@ void UrlBar::setUrl(const QUrl& url) } -void UrlBar::setProgress(int progress) -{ - m_progress = progress; - update(); -} - - void UrlBar::updateUrl() { // Don't change my typed url... @@ -171,7 +158,7 @@ void UrlBar::updateUrl() } -void UrlBar::activated(const QString& urlString) +void UrlBar::activated(const QString& urlString, Rekonq::OpenType type) { disconnect(this, SIGNAL(editTextChanged(const QString &)), this, SLOT(suggestUrls(const QString &))); @@ -180,30 +167,25 @@ void UrlBar::activated(const QString& urlString) clearFocus(); setUrl(urlString); - Application::instance()->loadUrl(m_currentUrl); -} - - -void UrlBar::loadFinished(bool) -{ - // reset progress bar after small delay - m_progress = 0; - QTimer::singleShot(200, this, SLOT(update())); -} - - -void UrlBar::updateProgress(int progress) -{ - m_progress = progress; - update(); + Application::instance()->loadUrl(m_currentUrl, type); } void UrlBar::paintEvent(QPaintEvent *event) { + QColor backgroundColor; + if( _privateMode ) + { + backgroundColor = QColor(192, 192, 192); // gray + } + else + { + backgroundColor = Application::palette().color(QPalette::Base); + } + // set background color of UrlBar QPalette p = palette(); - p.setColor(QPalette::Base, s_defaultBaseColor); + p.setColor(QPalette::Base, backgroundColor); setPalette(p); KComboBox::paintEvent(event); @@ -221,11 +203,20 @@ void UrlBar::paintEvent(QPaintEvent *event) { loadingColor = QColor(116, 192, 250); } - painter.setBrush(generateGradient(loadingColor, height())); + int progr = _tab->progress(); + + backgroundColor.setAlpha(0); + backgroundColor.setAlpha(200); + QLinearGradient gradient(0, 0, width(), height() ); + gradient.setColorAt(0, loadingColor); + gradient.setColorAt(((double)progr)/100, backgroundColor); + + painter.setBrush( gradient ); painter.setPen(Qt::transparent); + QRect backgroundRect = m_lineEdit->frameGeometry(); - int mid = backgroundRect.width() * m_progress / 100; + int mid = backgroundRect.width() * progr / 100; QRect progressRect(backgroundRect.x(), backgroundRect.y(), mid, backgroundRect.height()); painter.drawRect(progressRect); painter.end(); @@ -239,41 +230,8 @@ QSize UrlBar::sizeHint() const } -QLinearGradient UrlBar::generateGradient(const QColor &color, int height) -{ - QColor base = s_defaultBaseColor; - base.setAlpha(0); - QColor barColor = color; - barColor.setAlpha(200); - QLinearGradient gradient(0, 0, 0, height); - gradient.setColorAt(0, base); - gradient.setColorAt(0.25, barColor.lighter(120)); - gradient.setColorAt(0.5, barColor); - gradient.setColorAt(0.75, barColor.lighter(120)); - gradient.setColorAt(1, base); - return gradient; -} - - -void UrlBar::setBackgroundColor(QColor c) -{ - s_defaultBaseColor = c; - update(); -} - - -bool UrlBar::isLoading() -{ - if(m_progress == 0) - { - return false; - } - return true; -} - void UrlBar::keyPressEvent(QKeyEvent *event) { - // this handles the Modifiers + Return key combinations QString currentText = m_lineEdit->text().trimmed(); if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) @@ -338,3 +296,22 @@ void UrlBar::focusInEvent(QFocusEvent *event) KComboBox::focusInEvent(event); } + + +void UrlBar::setCurrentTab(WebTab *tab) +{ + if(_tab) + disconnect(_tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(setUrl(const QUrl &))); + _tab = tab; + connect(_tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(setUrl(const QUrl &))); + + // update it now (the first time) + setUrl( _tab->url() ); + update(); +} + + +void UrlBar::setPrivateMode(bool on) +{ + _privateMode = on; +} diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index ef53d63a..991b9038 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -34,6 +34,7 @@ // Local Includes #include "lineedit.h" #include "completionwidget.h" +#include "webtab.h" // KDE Includes #include <KUrl> @@ -59,18 +60,16 @@ public: void selectAll() const; KUrl url() const; QSize sizeHint() const; - void setBackgroundColor(QColor); - bool isLoading(); - void setProgress(int progress); + void setCurrentTab(WebTab *); + void setPrivateMode(bool on); + public slots: void setUrl(const QUrl &url); - void updateProgress(int progress); void updateUrl(); private slots: - void activated(const QString& url); - void loadFinished(bool); + void activated(const QString& url, Rekonq::OpenType = Rekonq::CurrentTab); void suggestUrls(const QString &editedText); protected: @@ -79,17 +78,13 @@ protected: virtual void focusInEvent(QFocusEvent *event); private: - static QLinearGradient generateGradient(const QColor &color, int height); - - static QColor s_defaultBaseColor; - LineEdit *m_lineEdit; KUrl m_currentUrl; - int m_progress; CompletionWidget *m_box; - KUrl m_suggestedUrl; + WebTab *_tab; + bool _privateMode; }; #endif diff --git a/src/urlbar/urlresolver.cpp b/src/urlbar/urlresolver.cpp index b2bf50af..cb61ad95 100644 --- a/src/urlbar/urlresolver.cpp +++ b/src/urlbar/urlresolver.cpp @@ -70,8 +70,17 @@ UrlSearchList UrlResolver::orderedSearchItems() UrlSearchList list; - list << qurlFromUserInputResolution(); - list << webSearchesResolution(); + if(isHttp()) + { + list << qurlFromUserInputResolution(); + list << webSearchesResolution(); + } + else + { + list << webSearchesResolution(); + list << qurlFromUserInputResolution(); + } + int firstResults = list.count(); int checkPoint = 9 - firstResults; @@ -93,6 +102,21 @@ UrlSearchList UrlResolver::orderedSearchItems() } +bool UrlResolver::isHttp() +{ + QString r = "[\\d\\w-.]+\\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|"\ + "c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|"\ + "h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|"\ + "m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|"\ + "s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|"\ + "y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|"\ + "pro)"; + + return (QRegExp(r, Qt::CaseInsensitive).indexIn(_urlString) != -1) + || _urlString.startsWith("http:") + || _urlString.startsWith("https:"); +} + ////////////////////////////////////////////////////////////////////////// // PRIVATE ENGINES @@ -108,10 +132,12 @@ UrlSearchList UrlResolver::qurlFromUserInputResolution() { QByteArray ba = urlFromUserInput.toEncoded(); if(!ba.isEmpty()) - { - QString str(ba); - UrlSearchItem it(str); - list << it; + { + QString gUrl = QString(ba); + QString gTitle = i18n("Browse"); + UrlSearchItem gItem(gUrl, gTitle, QString("") ); + list << gItem; + } } @@ -125,7 +151,7 @@ UrlSearchList UrlResolver::webSearchesResolution() UrlSearchList list; QString url1 = _urlString; - if(KUrl(url1).isRelative() && !url1.contains('.')) + if(KUrl(url1).isRelative()) { // KUriFilter has the worst performance possible here and let this trick unusable QString gUrl = QString("http://www.google.com/search?q=%1&ie=UTF-8&oe=UTF-8").arg(url1); @@ -133,10 +159,10 @@ UrlSearchList UrlResolver::webSearchesResolution() UrlSearchItem gItem(gUrl, gTitle, QString("http://www.google.com") ); list << gItem; - QString wUrl = QString("http://en.wikipedia.org/wiki/Special:Search?search=%1&go=Go").arg(url1); - QString wTitle = i18n("Search Wikipedia for ") + url1; - UrlSearchItem wItem(wUrl, wTitle, QString("http://wikipedia.org") ); - list << wItem; +// QString wUrl = QString("http://en.wikipedia.org/wiki/Special:Search?search=%1&go=Go").arg(url1); +// QString wTitle = i18n("Search Wikipedia for ") + url1; +// UrlSearchItem wItem(wUrl, wTitle, QString("http://wikipedia.org") ); +// list << wItem; } return list; @@ -169,9 +195,10 @@ UrlSearchList UrlResolver::bookmarksResolution() QStringList bookmarkResults = bookmarkCompletion->substringCompletion(_urlString); Q_FOREACH(const QString &s, bookmarkResults) { - UrlSearchItem it( s, QString(), QString("rating") ); + UrlSearchItem it( s, Application::bookmarkProvider()->titleForBookmarkUrl(s), QString("rating") ); list << it; } + return list; } diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h index 0a880150..4231aaab 100644 --- a/src/urlbar/urlresolver.h +++ b/src/urlbar/urlresolver.h @@ -67,6 +67,7 @@ private: UrlSearchList historyResolution(); UrlSearchList qurlFromUserInputResolution(); UrlSearchList bookmarksResolution(); + bool isHttp(); }; #endif // URL_RESOLVER_H diff --git a/src/webview.cpp b/src/webview.cpp index 80d44d10..294b7c85 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -62,7 +62,10 @@ WebView::WebView(QWidget* parent) : KWebView(parent, false) - , m_mousePos( QPoint(0,0) ) + , _mousePos( QPoint(0,0) ) + , _scrollTimer( new QTimer(this) ) + , _VScrollSpeed(0) + , _HScrollSpeed(0) { WebPage *page = new WebPage(this); setPage(page); @@ -80,6 +83,10 @@ WebView::WebView(QWidget* parent) // loadUrl signal connect(this, SIGNAL(loadUrl(const KUrl &, const Rekonq::OpenType &)), Application::instance(), SLOT(loadUrl(const KUrl &, const Rekonq::OpenType &))); + + // scrolling timer + connect(_scrollTimer, SIGNAL(timeout()), this, SLOT(scrollFrameChanged())); + _scrollTimer->setInterval(50); } @@ -330,7 +337,7 @@ void WebView::mousePressEvent(QMouseEvent *event) void WebView::mouseMoveEvent(QMouseEvent *event) { - m_mousePos = event->pos(); + _mousePos = event->pos(); if (Application::instance()->mainWindow()->isFullScreen()) { if (event->pos().y()>=0 && event->pos().y()<=4) @@ -348,7 +355,7 @@ void WebView::mouseMoveEvent(QMouseEvent *event) QPoint WebView::mousePos() { - return m_mousePos; + return _mousePos; } @@ -404,16 +411,61 @@ void WebView::openLinkInNewTab() void WebView::keyPressEvent(QKeyEvent *event) { - if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C)) + if ( event->modifiers() == Qt::ControlModifier ) { - triggerPageAction(KWebPage::Copy); - return; - } + if ( event->key() == Qt::Key_C ) + { + triggerPageAction(KWebPage::Copy); + return; + } - if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A)) + if ( event->key() == Qt::Key_A ) + { + triggerPageAction(KWebPage::SelectAll); + return; + } + } + + if ( event->modifiers() == Qt::ShiftModifier ) { - triggerPageAction(KWebPage::SelectAll); - return; + kDebug() << "scrolling.."; + if( event->key() == Qt::Key_Up ) + { + _VScrollSpeed -= 1; + _scrollTimer->start(); + return; + } + + if( event->key() == Qt::Key_Down ) + { + _VScrollSpeed += 1; + _scrollTimer->start(); + return; + } + + if( event->key() == Qt::Key_Right ) + { + _HScrollSpeed += 1; + _scrollTimer->start(); + return; + } + + if( event->key() == Qt::Key_Left ) + { + _HScrollSpeed -= 1; + _scrollTimer->start(); + return; + } + + if(_scrollTimer->isActive()) + { + _scrollTimer->stop(); + } + else + { + if(_VScrollSpeed || _HScrollSpeed) + _scrollTimer->start(); + } } KWebView::keyPressEvent(event); @@ -433,3 +485,19 @@ void WebView::loadUrlInNewTab(const KUrl &url) { emit loadUrl(url, Rekonq::SettingOpenTab); } + + +void WebView::scrollFrameChanged() +{ + // do the scrolling + page()->currentFrame()->scroll( _HScrollSpeed, _VScrollSpeed ); + + // check if we reached the end + int y = page()->currentFrame()->scrollPosition().y(); + if (y == 0 || y == page()->currentFrame()->scrollBarMaximum(Qt::Vertical)) + _VScrollSpeed = 0; + + int x = page()->currentFrame()->scrollPosition().x(); + if (x == 0 || x == page()->currentFrame()->scrollBarMaximum(Qt::Horizontal)) + _HScrollSpeed = 0; +} diff --git a/src/webview.h b/src/webview.h index b0700e8f..59105267 100644 --- a/src/webview.h +++ b/src/webview.h @@ -30,8 +30,6 @@ // Local Includes #include "rekonqprivate_export.h" - -// Local Includes #include "application.h" // KDE Includes @@ -70,11 +68,17 @@ private slots: void viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); void inspect(); + void scrollFrameChanged(); + signals: void loadUrl(const KUrl &, const Rekonq::OpenType &); private: - QPoint m_mousePos; + QPoint _mousePos; + + QTimer *_scrollTimer; + int _VScrollSpeed; + int _HScrollSpeed; }; #endif |