diff options
Diffstat (limited to 'x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch')
-rw-r--r-- | x11-toolkits/qt33/files/0060-qpopup_ignore_mousepos.patch | 59 |
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 ) { |