diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-04-29 00:10:33 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-04-29 21:00:32 +0900 |
commit | de4a08d56a71d42d90f40100dbf082b84535df40 (patch) | |
tree | d75a2b03ce299931cff221916adc7a2a9cc38995 | |
parent | f48c8f677c4aa52463ea86cc14a42de525e89e0f (diff) | |
download | tqt3-de4a08d56a71d42d90f40100dbf082b84535df40.tar.gz tqt3-de4a08d56a71d42d90f40100dbf082b84535df40.zip |
Improved code for keyboard and mouse grabbing and releasing to avoid
unnecessary actions. This relates loosely to bug 2955.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit f0869718763cd6d04c9b225db8966df08ddaef44)
-rw-r--r-- | src/kernel/qwidget_x11.cpp | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp index 1258655ea..88a0676df 100644 --- a/src/kernel/qwidget_x11.cpp +++ b/src/kernel/qwidget_x11.cpp @@ -1487,28 +1487,31 @@ void TQWidget::grabMouse() void TQWidget::grabMouse( const TQCursor &cursor ) { if ( !qt_nograb() ) { - if ( mouseGrb ) - mouseGrb->releaseMouse(); + if ( mouseGrb != this ) { + if ( mouseGrb ) { + mouseGrb->releaseMouse(); + } #if defined(QT_CHECK_STATE) - int status = + int status = #endif - XGrabPointer( x11Display(), winId(), False, - (uint)(ButtonPressMask | ButtonReleaseMask | - PointerMotionMask | EnterWindowMask | LeaveWindowMask), - GrabModeAsync, GrabModeAsync, - None, cursor.handle(), tqt_x_time ); + XGrabPointer( x11Display(), winId(), False, + (uint)(ButtonPressMask | ButtonReleaseMask | + PointerMotionMask | EnterWindowMask | LeaveWindowMask), + GrabModeAsync, GrabModeAsync, + None, cursor.handle(), tqt_x_time ); #if defined(QT_CHECK_STATE) - if ( status ) { - const char *s = - status == GrabNotViewable ? "\"GrabNotViewable\"" : - status == AlreadyGrabbed ? "\"AlreadyGrabbed\"" : - status == GrabFrozen ? "\"GrabFrozen\"" : - status == GrabInvalidTime ? "\"GrabInvalidTime\"" : - "<?>"; - tqWarning( "Grabbing the mouse failed with %s", s ); - } + if ( status ) { + const char *s = + status == GrabNotViewable ? "\"GrabNotViewable\"" : + status == AlreadyGrabbed ? "\"AlreadyGrabbed\"" : + status == GrabFrozen ? "\"GrabFrozen\"" : + status == GrabInvalidTime ? "\"GrabInvalidTime\"" : + "<?>"; + tqWarning( "Grabbing the mouse failed with %s", s ); + } #endif - mouseGrb = this; + mouseGrb = this; + } } } @@ -1548,11 +1551,13 @@ void TQWidget::releaseMouse() void TQWidget::grabKeyboard() { if ( !qt_nograb() ) { - if ( keyboardGrb ) - keyboardGrb->releaseKeyboard(); - XGrabKeyboard( x11Display(), winid, False, GrabModeAsync, GrabModeAsync, - tqt_x_time ); - keyboardGrb = this; + if ( keyboardGrb != this ) { + if ( keyboardGrb ) { + keyboardGrb->releaseKeyboard(); + } + XGrabKeyboard( x11Display(), winid, False, GrabModeAsync, GrabModeAsync, tqt_x_time ); + keyboardGrb = this; + } } } |