d66aa35254
Handle some mouse events explicitly when a wxQtScrollArea is set as "mouse captured". The issue arises in that the QScrollArea has two methods: event() and viewportEvent(). Normally a "QAbstractScrollAreaFilter" is set up by Qt which routes any events to the viewportEvent() method. And the normal event() method throws mouse events away (for reasons I'm not aware of - but it is what it is). If a wx window with a scroll area (e.g. wxRichTextCtrl) sets capture, the wxQtScrollArea (QScroll-derived) gets set as the direct "mouse grabber", and all events then bypass the filter and are sent directly to the "event" method, which throws them away. The typical result is that the window setting capture no longer gets mouse events, it keeps capture since it's looking for a mouse up that never comes, and the app more or less locks up since all mouse events are being effectively discarded. This change catches any event that comes in via the event() method and, when the mouse is captured by the widget, forwards it on to the viewportEvent method instead, performing what the filter would do via the normal event routing. It doesn't forward on "mouse press" events because the initial event that causes the capture ends up being fed back again, resulting in a "captured twice" error. The underlying reason I can see for this "being fed back again" is that, for some inexplicable reason, the wxRichTextCtrl "skips" the event even though it has actually processed it and taken capture. That means this solution isn't 100%, but it does fix the 99%+ cases where the capture is only gotten to redirect mouse moves and button ups. Perhaps an alternative solution might be to stop grabbing the mouse in wxQtScrollArea, but this would require more changes. Closes https://github.com/wxWidgets/wxWidgets/pull/1346 |
||
---|---|---|
.github | ||
3rdparty | ||
art | ||
build | ||
demos | ||
distrib | ||
docs | ||
include | ||
interface | ||
lib | ||
locale | ||
misc | ||
samples | ||
src | ||
tests | ||
utils | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.travis.yml | ||
acinclude.m4 | ||
aclocal.m4 | ||
appveyor.yml | ||
autoconf_inc.m4 | ||
autogen.sh | ||
CMakeLists.txt | ||
config.guess | ||
config.sub | ||
configure | ||
configure.in | ||
descrip.mms | ||
install-sh | ||
Makefile.in | ||
mkinstalldirs | ||
README-GIT.md | ||
README.md | ||
regen | ||
setup.h_vms | ||
setup.h.in | ||
version-script.in | ||
wx-config-inplace.in | ||
wx-config.in | ||
wxwidgets.props | ||
wxwin.m4 |
About
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.
wxWidgets allows you to write native-looking GUI applications for all the major desktop platforms and also helps with abstracting the differences in the non-GUI aspects between them. It is free for the use in both open source and commercial applications, comes with the full, easy to read and modify, source and extensive documentation and a collection of more than a hundred examples. You can learn more about wxWidgets at https://www.wxwidgets.org/ and read its documentation online at https://docs.wxwidgets.org/
Platforms
This version of wxWidgets supports the following primary platforms:
- Windows XP, Vista, 7, 8 and 10 (32/64 bits).
- Most Unix variants using the GTK+ toolkit (version 2.6 or newer or 3.x).
- OS X (10.7 or newer) using Cocoa (32/64 bits).
Most popular C++ compilers are supported including but not limited to:
- Microsoft Visual C++ 2003 or later (up to 2019).
- g++ 3.4 or later, including MinGW/MinGW-64/TDM under Windows.
- Clang under OS X and Linux.
- Intel icc compiler.
- Oracle (ex-Sun) aCC.
Licence
wxWidgets licence is a modified version of LGPL explicitly allowing not distributing the sources of an application using the library even in the case of static linking.
Building
For building the library, please see platform-specific documentation under
docs/<port>
directory, e.g. here are the instructions for
wxGTK, wxMSW and
wxOSX.
If you're building the sources checked out from Git, and not from a released version, please see these additional Git-specific notes.
Further information
If you are looking for community support, you can get it from
- Mailing Lists
- Discussion Forums
- #wxwidgets IRC channel
- Stack Overflow
(tag your questions with
wxwidgets
) - And you can report bugs at https://trac.wxwidgets.org/newticket
Commercial support is also available.
Finally, keep in mind that wxWidgets is an open source project collaboratively developed by its users and your contributions to it are always welcome. Please check our guidelines if you'd like to do it.
Have fun!
The wxWidgets Team.