From f0869718763cd6d04c9b225db8966df08ddaef44 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Wed, 29 Apr 2020 00:10:33 +0900 Subject: Improved code for keyboard and mouse grabbing and releasing to avoid unnecessary actions. This relates loosely to bug 2955. Signed-off-by: Michele Calgaro --- src/kernel/qwidget_x11.cpp | 51 +++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 23 deletions(-) (limited to 'src/kernel/qwidget_x11.cpp') diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp index f842595d5..31185921a 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; + } } } -- cgit v1.2.1