[LyX/master] Revert "Show toolbar context menu only when clicking on the toolbar"

Jean-Marc Lasgouttes lasgouttes at lyx.org
Wed Sep 16 14:27:51 UTC 2020


commit b96b876403ea541ada6d35fd683b599368c8c854
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Wed Sep 16 16:54:33 2020 +0200

    Revert "Show toolbar context menu only when clicking on the toolbar"
    
    Something is wrong.
    
    This reverts commit f25253f89ac121b1981fe26f0b90af9e2bbbe849.
---
 src/frontends/qt/GuiToolbar.cpp |   22 ----------------------
 src/frontends/qt/GuiToolbar.h   |    2 --
 src/frontends/qt/GuiView.cpp    |   12 ++++++++++++
 src/frontends/qt/GuiView.h      |    3 +++
 4 files changed, 15 insertions(+), 24 deletions(-)

diff --git a/src/frontends/qt/GuiToolbar.cpp b/src/frontends/qt/GuiToolbar.cpp
index e80dc48..f58069b 100644
--- a/src/frontends/qt/GuiToolbar.cpp
+++ b/src/frontends/qt/GuiToolbar.cpp
@@ -34,7 +34,6 @@
 #include "LayoutBox.h"
 #include "LyX.h"
 #include "LyXRC.h"
-#include "Menus.h"
 #include "qt_helpers.h"
 #include "Session.h"
 #include "Text.h"
@@ -71,9 +70,6 @@ GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner)
 	setIconSize(owner.iconSize());
 	connect(&owner, SIGNAL(iconSizeChanged(QSize)), this,
 		SLOT(setIconSize(QSize)));
-	// install toolbar filter for context menu including disabled buttons
-	setContextMenuPolicy(Qt::PreventContextMenu);
-	QCoreApplication::instance()->installEventFilter(this);
 
 	// This is used by QMainWindow::restoreState for proper main window state
 	// restoration.
@@ -127,24 +123,6 @@ void GuiToolbar::showEvent(QShowEvent * ev)
 }
 
 
-bool GuiToolbar::eventFilter(QObject * obj, QEvent * ev)
-{
-	if (obj == this || obj->parent() == this) {
-		if (ev->type() == QEvent::ContextMenu) {
-			QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(ev);
-			QMenu * menu = guiApp->menus().menu(toqstr("context-toolbars"), owner_);
-			menu->exec(mouseEvent->globalPos());
-			return true;
-		} else {
-			return false;
-		}
-	} else {
-		// pass the event on to the parent class
-		return QToolBar::eventFilter(obj, ev);
-	}
-}
-
-
 void GuiToolbar::setVisibility(int visibility)
 {
 	visibility_ = visibility;
diff --git a/src/frontends/qt/GuiToolbar.h b/src/frontends/qt/GuiToolbar.h
index bd4ef8f..eccd05a 100644
--- a/src/frontends/qt/GuiToolbar.h
+++ b/src/frontends/qt/GuiToolbar.h
@@ -177,8 +177,6 @@ private:
 	void fill();
 	///
 	void showEvent(QShowEvent *);
-	///
-	bool eventFilter(QObject * obj, QEvent * ev);
 
 	///
 	QList<Action *> actions_;
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 7dd6dbb..948deb9 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -677,6 +677,11 @@ GuiView::GuiView(int id)
 	connect(this, SIGNAL(triggerShowDialog(QString const &, QString const &, Inset *)),
 		SLOT(doShowDialog(QString const &, QString const &, Inset *)));
 
+	// set custom application bars context menu, e.g. tool bar and menu bar
+	setContextMenuPolicy(Qt::CustomContextMenu);
+	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+		SLOT(toolBarPopup(const QPoint &)));
+
 	// Forbid too small unresizable window because it can happen
 	// with some window manager under X11.
 	setMinimumSize(300, 200);
@@ -3783,6 +3788,13 @@ bool GuiView::goToFileRow(string const & argument)
 }
 
 
+void GuiView::toolBarPopup(const QPoint & /*pos*/)
+{
+	QMenu * menu = guiApp->menus().menu(toqstr("context-toolbars"), * this);
+	menu->exec(QCursor::pos());
+}
+
+
 template<class T>
 Buffer::ExportStatus GuiView::GuiViewPrivate::runAndDestroy(const T& func,
 		Buffer const * orig, Buffer * clone, string const & format)
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 1ad534a..d611b39 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -260,6 +260,9 @@ private Q_SLOTS:
 	void updateStatusBarMessage(QString const & str);
 	void clearMessageText();
 
+	///
+	void toolBarPopup(const QPoint &pos);
+
 private:
 	/// Open given child document in current buffer directory.
 	void openChildDocument(std::string const & filename);


More information about the lyx-cvs mailing list