mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
Show toolbar context menu only when clicking on the toolbar
Previsouly it was on the whole application window, except on disabled toolbar buttons. Fix for bug #11949
This commit is contained in:
parent
5542ccd3f9
commit
f25253f89a
@ -34,6 +34,7 @@
|
||||
#include "LayoutBox.h"
|
||||
#include "LyX.h"
|
||||
#include "LyXRC.h"
|
||||
#include "Menus.h"
|
||||
#include "qt_helpers.h"
|
||||
#include "Session.h"
|
||||
#include "Text.h"
|
||||
@ -70,6 +71,9 @@ 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.
|
||||
@ -123,6 +127,24 @@ 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;
|
||||
|
@ -177,6 +177,8 @@ private:
|
||||
void fill();
|
||||
///
|
||||
void showEvent(QShowEvent *);
|
||||
///
|
||||
bool eventFilter(QObject * obj, QEvent * ev);
|
||||
|
||||
///
|
||||
QList<Action *> actions_;
|
||||
|
@ -677,11 +677,6 @@ 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);
|
||||
@ -3788,13 +3783,6 @@ 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)
|
||||
|
@ -260,9 +260,6 @@ 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);
|
||||
|
Loading…
Reference in New Issue
Block a user