aboutsummaryrefslogtreecommitdiff
path: root/x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch
diff options
context:
space:
mode:
Diffstat (limited to 'x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch')
-rw-r--r--x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch b/x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch
new file mode 100644
index 000000000000..d26279a3f19c
--- /dev/null
+++ b/x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch
@@ -0,0 +1,59 @@
+qt-bugs@ issue : 49417
+bugs.kde.org number : 74778
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+ Hello,
+
+ please consider applying the two attached QPopupMenu patches fixing KDE bugs
+ #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719,
+ http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard
+ navigation in popup menus being very uncomfortable because of being affected
+ by mouse position despite mouse not being used at all.
+
+ [... #58719 ... ]
+
+ - ignoremousepos.patch - (#74778) - use keyboard to open some popup which
+ doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu
+ key with some file selected in Konqueror). If the mouse is positioned in the
+ area where the popup shows, the random entry happening to be at the cursor
+ position becomes highlighted.
+ The patch fixes this by ignoring mouse events that happen at mouse position
+ which was current when the popup was shown, i.e. all mouse move events that
+ actually aren't triggered by mouse move are ignored. I first wanted to ignore
+ only the very first mouse move event (which should be caused by EnterNotify
+ for the popup) but I realized that Qt's event handling causes the popup to
+ possibly get more than just one initial move event, caused by LeaveNotify
+ events for normal widgets being transformed to mouse move events for the
+ popup, so I have no better idea how to solve this problem.
+
+--- src/widgets/qpopupmenu.cpp.sav 2004-05-25 17:48:21.000000000 +0200
++++ src/widgets/qpopupmenu.cpp 2004-05-25 17:57:28.981809096 +0200
+@@ -254,6 +254,7 @@ public:
+ QSize calcSize;
+ QRegion mouseMoveBuffer;
+ uint hasmouse : 1;
++ QPoint ignoremousepos;
+ };
+
+ static QPopupMenu* active_popup_menu = 0;
+@@ -1354,6 +1355,7 @@ void QPopupMenu::show()
+ popupActive = -1;
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
++ d->ignoremousepos = QCursor::pos();
+ }
+
+ /*!
+@@ -1701,6 +1703,11 @@ void QPopupMenu::mouseReleaseEvent( QMou
+
+ void QPopupMenu::mouseMoveEvent( QMouseEvent *e )
+ {
++ if( e->globalPos() == d->ignoremousepos ) {
++ return;
++ }
++ d->ignoremousepos = QPoint();
++
+ motion++;
+
+ if ( parentMenu && parentMenu->isPopupMenu ) {