[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src/traverso Interface.cpp Interface.h
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src/traverso Interface.cpp Interface.h |
Date: |
Thu, 06 Dec 2007 20:51:59 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 07/12/06 20:51:59
Modified files:
src/traverso : Interface.cpp Interface.h
Log message:
* use an event filter to catch key release events on context menus, and
forward them to the InputEngine
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.cpp?cvsroot=traverso&r1=1.116&r2=1.117
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/Interface.h?cvsroot=traverso&r1=1.49&r2=1.50
Patches:
Index: Interface.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.cpp,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -b -r1.116 -r1.117
--- Interface.cpp 5 Dec 2007 21:20:05 -0000 1.116
+++ Interface.cpp 6 Dec 2007 20:51:59 -0000 1.117
@@ -361,6 +361,28 @@
e->ignore();
}
+bool Interface::eventFilter(QObject * obj, QEvent * event)
+{
+ QMenu* menu = qobject_cast<QMenu*>(obj);
+
+ // If the installed filter was for a QMenu, we need to
+ // delegate key releases to the InputEngine, e.g. a hold
+ // action would never finish if we release the hold key
+ // on the open Menu, resulting in weird behavior!
+ if (menu) {
+ if (event->type() == QEvent::KeyRelease) {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+ ie().catch_key_release(keyEvent);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+}
+
+
void Interface::changeEvent(QEvent *event)
{
switch (event->type()) {
@@ -783,8 +805,6 @@
QMenu* Interface::create_context_menu(QObject* item, QList<MenuData >*
menulist)
{
- QMenu* menu = new QMenu(this);
-
QList<MenuData > list;
if (item) {
list = ie().create_menudata_for( item );
@@ -797,7 +817,6 @@
return 0;
}
-
qSort(list.begin(), list.end(), MenuData::smaller);
@@ -810,6 +829,9 @@
if (name == "Song") name = "Sheet"; // FIXME!!!
+ QMenu* menu = new QMenu(this);
+ menu->installEventFilter(this);
+
QAction* menuAction = menu->addAction(name);
QFont font(themer()->get_font("ContextMenu:fontscale:actions"));
font.setBold(true);
Index: Interface.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/Interface.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- Interface.h 5 Dec 2007 21:20:05 -0000 1.49
+++ Interface.h 6 Dec 2007 20:51:59 -0000 1.50
@@ -94,6 +94,7 @@
void closeEvent ( QCloseEvent * event );
QSize sizeHint () const;
void changeEvent(QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *ev);
private:
QStackedWidget* centerAreaWidget;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src/traverso Interface.cpp Interface.h,
Remon Sijrier <=