1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

[Menus] Menus are not closed when opening links with middle mouse button

It is the same behaviour as in Konqueror
Closes #1165
This commit is contained in:
nowrep 2014-02-10 21:34:46 +01:00
parent 0b8b969535
commit 28091f4957
9 changed files with 30 additions and 7 deletions

View File

@ -1,5 +1,7 @@
Version 1.7.0 Version 1.7.0
* development version * development version
* completely rewritten bookmarks (including multi-level folders support)
* menus are not closed when opening links with middle mouse button
* added support for window.onload event * added support for window.onload event
* added support for external.AddSearchProvider js function * added support for external.AddSearchProvider js function

View File

@ -123,8 +123,10 @@ NavigationBar::NavigationBar(QupZilla* mainClass)
setButtonIconSize(m_buttonAddTab); setButtonIconSize(m_buttonAddTab);
m_menuBack = new Menu(this); m_menuBack = new Menu(this);
m_menuBack->setCloseOnMiddleClick(true);
m_buttonBack->setMenu(m_menuBack); m_buttonBack->setMenu(m_menuBack);
m_menuForward = new Menu(this); m_menuForward = new Menu(this);
m_menuForward->setCloseOnMiddleClick(true);
m_buttonNext->setMenu(m_menuForward); m_buttonNext->setMenu(m_menuForward);
#ifndef Q_OS_MAC #ifndef Q_OS_MAC

View File

@ -355,11 +355,6 @@ void MacMenuReceiver::bookmarkPage()
callSlot("bookmarkPage"); callSlot("bookmarkPage");
} }
void MacMenuReceiver::loadFolderBookmarks(Menu* menu)
{
callSlot("loadFolderBookmarks", false, Q_ARG(Menu*, menu));
}
void MacMenuReceiver::closeTab() void MacMenuReceiver::closeTab()
{ {
callSlot("closeTab"); callSlot("closeTab");

View File

@ -137,7 +137,6 @@ private slots:
void loadActionUrl(QObject* obj = 0); void loadActionUrl(QObject* obj = 0);
void loadActionUrlInNewTab(QObject* obj = 0); void loadActionUrlInNewTab(QObject* obj = 0);
void loadActionUrlInNewNotSelectedTab(QObject* obj = 0); void loadActionUrlInNewNotSelectedTab(QObject* obj = 0);
void loadFolderBookmarks(Menu* menu);
void closeTab(); void closeTab();
void restoreClosedTab(QObject* obj = 0); void restoreClosedTab(QObject* obj = 0);

View File

@ -32,6 +32,7 @@ PopupWebView::PopupWebView(QWidget* parent)
, m_page(0) , m_page(0)
, m_menu(new Menu(this)) , m_menu(new Menu(this))
{ {
m_menu->setCloseOnMiddleClick(true);
} }
void PopupWebView::setWebPage(PopupWebPage* page) void PopupWebView::setWebPage(PopupWebPage* page)

View File

@ -22,14 +22,26 @@
Menu::Menu(QWidget* parent) Menu::Menu(QWidget* parent)
: QMenu(parent) : QMenu(parent)
, m_closeOnMiddleClick(false)
{ {
} }
Menu::Menu(const QString &title, QWidget* parent) Menu::Menu(const QString &title, QWidget* parent)
: QMenu(title, parent) : QMenu(title, parent)
, m_closeOnMiddleClick(false)
{ {
} }
bool Menu::closeOnMiddleClick() const
{
return m_closeOnMiddleClick;
}
void Menu::setCloseOnMiddleClick(bool close)
{
m_closeOnMiddleClick = close;
}
void Menu::mouseReleaseEvent(QMouseEvent* e) void Menu::mouseReleaseEvent(QMouseEvent* e)
{ {
QAction* qact = activeAction(); QAction* qact = activeAction();
@ -59,7 +71,9 @@ void Menu::mouseReleaseEvent(QMouseEvent* e)
e->accept(); e->accept();
} }
else if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) { else if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) {
closeAllMenus(); if ((e->button() == Qt::MiddleButton && m_closeOnMiddleClick) || e->button() != Qt::MiddleButton) {
closeAllMenus();
}
act->emitCtrlTriggered(); act->emitCtrlTriggered();
e->accept(); e->accept();
} }

View File

@ -32,6 +32,10 @@ public:
explicit Menu(QWidget* parent = 0); explicit Menu(QWidget* parent = 0);
explicit Menu(const QString &title, QWidget* parent = 0); explicit Menu(const QString &title, QWidget* parent = 0);
// Default is false, menu will NOT be closed on middle click
bool closeOnMiddleClick() const;
void setCloseOnMiddleClick(bool close);
signals: signals:
void menuMiddleClicked(Menu*); void menuMiddleClicked(Menu*);
@ -42,6 +46,8 @@ private:
void keyPressEvent(QKeyEvent* e); void keyPressEvent(QKeyEvent* e);
void closeAllMenus(); void closeAllMenus();
bool m_closeOnMiddleClick;
}; };
class QT_QUPZILLA_EXPORT Action : public QAction class QT_QUPZILLA_EXPORT Action : public QAction

View File

@ -44,6 +44,8 @@ TabbedWebView::TabbedWebView(QupZilla* mainClass, WebTab* webTab)
, m_menu(new Menu(this)) , m_menu(new Menu(this))
, m_mouseTrack(false) , m_mouseTrack(false)
{ {
m_menu->setCloseOnMiddleClick(true);
connect(this, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted())); connect(this, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted()));
connect(this, SIGNAL(loadProgress(int)), this, SLOT(loadProgress(int))); connect(this, SIGNAL(loadProgress(int)), this, SLOT(loadProgress(int)));
connect(this, SIGNAL(loadFinished(bool)), this, SLOT(slotLoadFinished())); connect(this, SIGNAL(loadFinished(bool)), this, SLOT(slotLoadFinished()));

View File

@ -930,6 +930,7 @@ void WebView::createPageContextMenu(QMenu* menu, const QPoint &pos)
if (frameAtPos && page()->mainFrame() != frameAtPos) { if (frameAtPos && page()->mainFrame() != frameAtPos) {
m_clickedFrame = frameAtPos; m_clickedFrame = frameAtPos;
Menu* frameMenu = new Menu(tr("This frame")); Menu* frameMenu = new Menu(tr("This frame"));
frameMenu->setCloseOnMiddleClick(true);
frameMenu->addAction(tr("Show &only this frame"), this, SLOT(loadClickedFrame())); frameMenu->addAction(tr("Show &only this frame"), this, SLOT(loadClickedFrame()));
Action* act = new Action(QIcon::fromTheme("tab-new", QIcon(":/icons/menu/tab-new.png")), tr("Show this frame in new &tab")); Action* act = new Action(QIcon::fromTheme("tab-new", QIcon(":/icons/menu/tab-new.png")), tr("Show this frame in new &tab"));
connect(act, SIGNAL(triggered()), this, SLOT(loadClickedFrameInNewTab())); connect(act, SIGNAL(triggered()), this, SLOT(loadClickedFrameInNewTab()));
@ -1088,6 +1089,7 @@ void WebView::createSelectedTextContextMenu(QMenu* menu, const QWebHitTestResult
// Search with ... // Search with ...
Menu* swMenu = new Menu(tr("Search with..."), menu); Menu* swMenu = new Menu(tr("Search with..."), menu);
swMenu->setCloseOnMiddleClick(true);
SearchEnginesManager* searchManager = mApp->searchEnginesManager(); SearchEnginesManager* searchManager = mApp->searchEnginesManager();
foreach (const SearchEngine &en, searchManager->allEngines()) { foreach (const SearchEngine &en, searchManager->allEngines()) {
Action* act = new Action(en.icon, en.name); Action* act = new Action(en.icon, en.name);