File qt3-trinity-improve-grabbing.patch of Package qt3

From bc1b1fed7dda5d3143e1fc9f6a38783ff8389f4d Mon Sep 17 00:00:00 2001
From: Michele Calgaro <michele.calgaro@yahoo.it>
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 <michele.calgaro@yahoo.it>
---
 src/kernel/qwidget_x11.cpp | 51 +++++++++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 23 deletions(-)

diff --git a/src/kernel/qwidget_x11.cpp b/src/kernel/qwidget_x11.cpp
index 1eb4bcb..54c37e6 100644
--- a/src/kernel/qwidget_x11.cpp
+++ b/src/kernel/qwidget_x11.cpp
@@ -1487,28 +1487,31 @@ void QWidget::grabMouse()
 void QWidget::grabMouse( const QCursor &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(), qt_x_time );
+	        XGrabPointer( x11Display(), winId(), False,
+		    (uint)(ButtonPressMask | ButtonReleaseMask |
+		    PointerMotionMask | EnterWindowMask | LeaveWindowMask),
+		    GrabModeAsync, GrabModeAsync,
+		    None, cursor.handle(), qt_x_time );
 #if defined(QT_CHECK_STATE)
-	if ( status ) {
-	    const char *s =
-		status == GrabNotViewable ? "\"GrabNotViewable\"" :
-		status == AlreadyGrabbed  ? "\"AlreadyGrabbed\"" :
-		status == GrabFrozen      ? "\"GrabFrozen\"" :
-		status == GrabInvalidTime ? "\"GrabInvalidTime\"" :
-					    "<?>";
-	    qWarning( "Grabbing the mouse failed with %s", s );
-	}
+	    if ( status ) {
+	        const char *s =
+		    status == GrabNotViewable ? "\"GrabNotViewable\"" :
+		    status == AlreadyGrabbed  ? "\"AlreadyGrabbed\"" :
+		    status == GrabFrozen      ? "\"GrabFrozen\"" :
+		    status == GrabInvalidTime ? "\"GrabInvalidTime\"" :
+						"<?>";
+	        qWarning( "Grabbing the mouse failed with %s", s );
+	    }
 #endif
-	mouseGrb = this;
+	    mouseGrb = this;
+	}
     }
 }
 
@@ -1548,11 +1551,13 @@ void QWidget::releaseMouse()
 void QWidget::grabKeyboard()
 {
     if ( !qt_nograb() ) {
-	if ( keyboardGrb )
-	    keyboardGrb->releaseKeyboard();
-	XGrabKeyboard( x11Display(), winid, False, GrabModeAsync, GrabModeAsync,
-		       qt_x_time );
-	keyboardGrb = this;
+	if ( keyboardGrb != this ) {
+	    if ( keyboardGrb ) {
+		keyboardGrb->releaseKeyboard();
+	    }
+	    XGrabKeyboard( x11Display(), winid, False, GrabModeAsync, GrabModeAsync, qt_x_time );
+	    keyboardGrb = this;
+	}
     }
 }
 
-- 
cgit v1.2.1

openSUSE Build Service is sponsored by