summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-04-29 00:10:33 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-04-29 21:00:32 +0900
commitde4a08d56a71d42d90f40100dbf082b84535df40 (patch)
treed75a2b03ce299931cff221916adc7a2a9cc38995
parentf48c8f677c4aa52463ea86cc14a42de525e89e0f (diff)
downloadtqt3-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.cpp51
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;
+ }
}
}