[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kdeui/widgets
From: Rafael Fernández López <ereslibre () kde ! org>
Date: 2008-04-30 22:50:10
Message-ID: 1209595810.498359.19213.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 802873 by ereslibre:
Prevent the title of the KMenu from being clicked, since it is a QToolButton really. \
We install an event filter for this purpose that will discard every event except \
Paint, and keyboard events (what does accept keyboard navigation on the menu itself)
M +52 -18 kmenu.cpp
--- trunk/KDE/kdelibs/kdeui/widgets/kmenu.cpp #802872:802873
@@ -21,6 +21,7 @@
#include "kmenu.h"
#include "khbox.h"
+#include <QtCore/QObject>
#include <QtCore/QPointer>
#include <QtCore/QTimer>
#include <QtGui/QApplication>
@@ -40,25 +41,9 @@
class KMenu::KMenuPrivate
{
public:
- KMenuPrivate (KMenu *_parent)
- : parent(_parent)
- , noMatches(false)
- , shortcuts(false)
- , autoExec(false)
- , lastHitAction(0L)
- , mouseButtons(Qt::NoButton)
- , keyboardModifiers(Qt::NoModifier)
- , ctxMenu(0)
- , highlightedAction(0)
- {
- resetKeyboardVars();
- }
+ KMenuPrivate (KMenu *_parent);
+ ~KMenuPrivate ();
- ~KMenuPrivate ()
- {
- delete ctxMenu;
- }
-
void resetKeyboardVars(bool noMatches = false);
void actionHovered(QAction* action);
void showCtxMenu(const QPoint &pos);
@@ -82,9 +67,57 @@
// support for RMB menus on menus
QMenu* ctxMenu;
QPointer<QAction> highlightedAction;
+
+ class EventSniffer;
+ EventSniffer *eventSniffer;
};
+class KMenu::KMenuPrivate::EventSniffer
+ : public QObject
+{
+public:
+ EventSniffer(QObject *parent = 0)
+ : QObject(parent) { }
+ ~EventSniffer() { }
+
+ bool eventFilter(QObject *object, QEvent *event)
+ {
+ Q_UNUSED(object);
+
+ if (event->type() == QEvent::Paint ||
+ event->type() == QEvent::KeyPress ||
+ event->type() == QEvent::KeyRelease) {
+ return false;
+ }
+
+ event->accept();
+ return true;
+ }
+};
+
+KMenu::KMenuPrivate::KMenuPrivate (KMenu *_parent)
+ : parent(_parent)
+ , noMatches(false)
+ , shortcuts(false)
+ , autoExec(false)
+ , lastHitAction(0L)
+ , mouseButtons(Qt::NoButton)
+ , keyboardModifiers(Qt::NoModifier)
+ , ctxMenu(0)
+ , highlightedAction(0)
+ , eventSniffer(new EventSniffer)
+{
+ resetKeyboardVars();
+}
+
+KMenu::KMenuPrivate::~KMenuPrivate ()
+{
+ delete ctxMenu;
+ delete eventSniffer;
+}
+
+
/**
* custom variant type for QAction::data of kmenu context menus
* @author Joseph Wenninger <jowenn@kde.org>
@@ -143,6 +176,7 @@
QWidgetAction *action = new QWidgetAction(this);
QToolButton *titleButton = new QToolButton(this);
+ titleButton->installEventFilter(d->eventSniffer);
titleButton->setDefaultAction(buttonAction);
titleButton->setDown(true); // prevent hover style changes in some styles
titleButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic