diff options
-rw-r--r-- | src/mainview.cpp | 13 | ||||
-rw-r--r-- | src/mainwindow.cpp | 53 | ||||
-rw-r--r-- | src/mainwindow.h | 16 | ||||
-rw-r--r-- | src/previewimage.cpp | 2 | ||||
-rw-r--r-- | src/tabbar.cpp | 13 | ||||
-rw-r--r-- | src/tabbar.h | 1 | ||||
-rw-r--r-- | src/webview.cpp | 16 | ||||
-rw-r--r-- | src/webview.h | 4 |
8 files changed, 65 insertions, 53 deletions
diff --git a/src/mainview.cpp b/src/mainview.cpp index 6d282e0c..0956e3ff 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -383,8 +383,15 @@ void MainView::slotCloneTab(int index) index = currentIndex(); if (index < 0 || index >= count()) return; - WebView *tab = newWebView(); - tab->setUrl(webView(index)->url()); + + WebView *tab = newWebView(); + KUrl url = webView(index)->url(); + + // workaround against bug in webkit: + // only set url if it is not empty + // otherwise the current working directory will be used + if (!url.isEmpty()) + tab->setUrl(url); updateTabBar(); } @@ -418,7 +425,7 @@ void MainView::slotCloseTab(int index) hasFocus = tab->hasFocus(); //store close tab except homepage - if (!tab->url().prettyUrl().startsWith("rekonq:") && !tab->url().isEmpty()) + if (!tab->url().prettyUrl().startsWith( QLatin1String("rekonq:") ) && !tab->url().isEmpty()) { QString title = tab->title(); QString url = tab->url().prettyUrl(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 275f64eb..39ec18e3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -87,11 +87,11 @@ #include <QtGui/QPrinter> #include <QtGui/QPrintDialog> #include <QtGui/QPrintPreviewDialog> +#include <QtGui/QFontMetrics> #include <QtWebKit/QWebHistory> - MainWindow::MainWindow() : KMainWindow() , m_view(new MainView(this)) @@ -101,7 +101,6 @@ MainWindow::MainWindow() , m_mainBar( new KToolBar( QString("MainToolBar"), this, Qt::TopToolBarArea, true, false, false) ) , m_bmBar( new KToolBar( QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, false) ) , m_ac( new KActionCollection(this) ) - , m_flickeringZone(false) { // enable window size "auto-save" setAutoSaveSettings(); @@ -960,39 +959,41 @@ void MainWindow::notifyMessage(const QString &msg, Rekonq::Notify status) break; } - // useful values - int pageHeight = m_view->currentWebView()->page()->viewportSize().height(); - int labelHeight = KGlobalSettings::generalFont().pointSize()*2 + 7; - bool scrollbarIsVisible = m_view->currentWebView()->page()->currentFrame()->scrollBarMaximum(Qt::Horizontal); - int scrollbarSize = 0; - if (scrollbarIsVisible) - { - //TODO: detect QStyle size - scrollbarSize = 17; - } - + int margin = 4; + // setting the popup m_popup->setFrameShape(QFrame::NoFrame); QLabel *label = new QLabel(msg); - label->setMaximumWidth(width()-8); + label->setMaximumWidth(width()-2*margin); m_popup->setLineWidth(0); m_popup->setView(label); m_popup->setFixedSize(0, 0); m_popup->layout()->setAlignment(Qt::AlignTop); - m_popup->layout()->setMargin(4); + m_popup->layout()->setMargin(margin); - // setting popus in bottom-(left/right) position - int x = geometry().x(); - int y; - if(m_flickeringZone) + // useful values + QSize labelSize(label->fontMetrics().width(msg)+2*margin, label->fontMetrics().height()+2*margin); + bool scrollbarIsVisible = m_view->currentWebView()->page()->currentFrame()->scrollBarMaximum(Qt::Horizontal); + int scrollbarSize = 0; + if (scrollbarIsVisible) { - y = m_view->currentWebView()->mapToGlobal(QPoint(0,0)).y(); + //TODO: detect QStyle size + scrollbarSize = 17; } - else + QPoint webViewOrigin = m_view->currentWebView()->mapToGlobal(QPoint(0,0)); + int bottomLeftY=webViewOrigin.y() + m_view->currentWebView()->page()->viewportSize().height() - labelSize.height() - scrollbarSize; + + // setting popup in bottom-left position + int x = geometry().x(); + int y = bottomLeftY; + + QPoint mousePos = m_view->currentWebView()->mapToGlobal(m_view->currentWebView()->mousePos()); + if(QRect(webViewOrigin.x(),bottomLeftY,labelSize.width(),labelSize.height()).contains(mousePos)) { - y = m_view->currentWebView()->mapToGlobal(QPoint(0,pageHeight)).y() - labelHeight - scrollbarSize; + // setting popup above the mouse + y = bottomLeftY - labelSize.height(); } - + QPoint p(x,y); m_popup->show(p); @@ -1123,9 +1124,3 @@ bool MainWindow::homePage(const KUrl &url) } return false; } - - -void MainWindow::setFlickeringZone(bool b) -{ - m_flickeringZone = b; -} diff --git a/src/mainwindow.h b/src/mainwindow.h index 41687e60..7c42e58f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -69,11 +69,9 @@ public: QAction *actionByName(const QString name); virtual QSize sizeHint() const; virtual KActionCollection *actionCollection () const; - + bool homePage(const KUrl &url = KUrl("rekonq:home")); - void setFlickeringZone(bool b); - private: void setupActions(); void setupTools(); @@ -97,16 +95,16 @@ public slots: void notifyMessage(const QString &msg, Rekonq::Notify status = Rekonq::Info); void printRequested(QWebFrame *frame = 0); - - + + signals: // switching tabs void ctrlTabPressed(); void shiftCtrlTabPressed(); - + protected: bool queryClose(); - + /** * Filters (SHIFT + ) CTRL + TAB events and emit (shift)ctrlTabPressed() * to make switch tab @@ -120,7 +118,7 @@ private slots: void slotBrowserLoading(bool); void slotUpdateActions(); void slotUpdateWindowTitle(const QString &title = QString()); - + // history related void slotOpenPrevious(); void slotOpenNext(); @@ -172,8 +170,6 @@ private: QPointer<KPassivePopup> m_popup; KActionCollection *m_ac; - - bool m_flickeringZone; }; #endif // MAINWINDOW_H diff --git a/src/previewimage.cpp b/src/previewimage.cpp index 99969893..df3a3471 100644 --- a/src/previewimage.cpp +++ b/src/previewimage.cpp @@ -167,7 +167,7 @@ void PreviewImage::snapFinished() // update url (for added thumbs) QStringList urls = ReKonfig::previewUrls(); - // stripTrailingSlash to be sure to get the same string for same adress + // stripTrailingSlash to be sure to get the same string for same address urls.replace(m_index, ws->snapUrl().toString(QUrl::StripTrailingSlash)); names.replace(m_index, ws->snapTitle()); diff --git a/src/tabbar.cpp b/src/tabbar.cpp index bde1e63e..ac050191 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -268,6 +268,19 @@ void TabBar::leaveEvent(QEvent *event) KTabBar::leaveEvent(event); } +void TabBar::mousePressEvent(QMouseEvent *event) +{ + // just close tab on middle mouse click + if (event->button() == Qt::MidButton) + { + int index = tabAt(event->pos()); + emit closeTab(index); + return; + } + + KTabBar::mousePressEvent(event); +} + void TabBar::updateNewTabButton() { diff --git a/src/tabbar.h b/src/tabbar.h index 580021c4..57b78628 100644 --- a/src/tabbar.h +++ b/src/tabbar.h @@ -79,6 +79,7 @@ protected: virtual QSize tabSizeHint(int index) const; virtual void mouseMoveEvent(QMouseEvent *event); virtual void leaveEvent(QEvent *event); + virtual void mousePressEvent(QMouseEvent *event); private slots: void cloneTab(); diff --git a/src/webview.cpp b/src/webview.cpp index 7efded7f..edd8d9f6 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -63,6 +63,7 @@ WebView::WebView(QWidget* parent) , m_scrollDirection(WebView::NoScroll) , m_scrollSpeedVertical(0) , m_scrollSpeedHorizontal(0) + , m_mousePos(QPoint(0,0)) { setPage(m_page); @@ -451,22 +452,19 @@ void WebView::mousePressEvent(QMouseEvent *event) void WebView::mouseMoveEvent(QMouseEvent *event) { - QPoint p = event->pos(); - QSize s = size(); - int x = s.width() / 2; - int y = s.height() - 30; // quite reasonable value, without performing requests, cause of speed + m_mousePos = event->pos(); - if(p.x() <= x && p.y() >= y ) - Application::instance()->mainWindow()->setFlickeringZone(true); - else - Application::instance()->mainWindow()->setFlickeringZone(false); - if( url().protocol() != "rekonq" ) { QWebView::mouseMoveEvent(event); } } +QPoint WebView::mousePos() +{ + return m_mousePos; +} + void WebView::wheelEvent(QWheelEvent *event) { diff --git a/src/webview.h b/src/webview.h index d3f58f2e..5331d4cf 100644 --- a/src/webview.h +++ b/src/webview.h @@ -62,7 +62,8 @@ public: KUrl url() const; QString lastStatusBarText() const; int progress(); - + QPoint mousePos(); + protected: void contextMenuEvent(QContextMenuEvent *event); void mousePressEvent(QMouseEvent *event); @@ -94,6 +95,7 @@ private: int m_scrollDirection; int m_scrollSpeedVertical; int m_scrollSpeedHorizontal; + QPoint m_mousePos; }; #endif |