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