Revert "Implement automatic mouse grabbing on mouse button press."
This reverts commit 6b5bbc531b
.
Autograbbing mouse shouldn't be done in crossplatform code, as
X11 does this automatically. Windows needs platform specific
solution.
Task-number: QTBUG-26962
Task-number: QTBUG-27039
Task-number: QTBUG-23699
Change-Id: I911df92c4a34deb50b729f50681497046657948b
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
This commit is contained in:
parent
1da928abba
commit
75cd2dec71
@ -3135,8 +3135,6 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
|
||||
d->toolTipGlobalPos = mouse->globalPos();
|
||||
d->toolTipWakeUp.start(d->toolTipFallAsleep.isActive()?20:700, this);
|
||||
}
|
||||
|
||||
d->handleAutomaticMouseGrab(w, mouse);
|
||||
}
|
||||
|
||||
bool eventAccepted = mouse->isAccepted();
|
||||
|
@ -166,7 +166,6 @@ public:
|
||||
void openPopup(QWidget *popup);
|
||||
static void setFocusWidget(QWidget *focus, Qt::FocusReason reason);
|
||||
static QWidget *focusNextPrevChild_helper(QWidget *toplevel, bool next);
|
||||
void handleAutomaticMouseGrab(QWidget *widget, QMouseEvent *e);
|
||||
|
||||
#ifndef QT_NO_SESSIONMANAGER
|
||||
QSessionManager *session_manager;
|
||||
|
@ -72,8 +72,7 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
static QString appFont;
|
||||
static bool popupGrabOk = false;
|
||||
static QPointer<QWidget> autoGrabber;
|
||||
static bool popupGrabOk;
|
||||
extern QWidget *qt_button_down;
|
||||
extern QWidget *qt_popup_down;
|
||||
extern bool qt_replay_popup_mouse_event;
|
||||
@ -142,28 +141,6 @@ void QApplicationPrivate::notifyActiveWindowChange(QWindow *previous)
|
||||
QApplication::setActiveWindow(tlw);
|
||||
}
|
||||
|
||||
void QApplicationPrivate::handleAutomaticMouseGrab(QWidget *widget, QMouseEvent *e)
|
||||
{
|
||||
// Grab the mouse automatically for current window when any button is pressed,
|
||||
// unless there is an active mousegrabber or mouse is being grabbed for a popup.
|
||||
if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease) {
|
||||
if (e->buttons() == Qt::NoButton) {
|
||||
// No buttons remain pressed, so release the grab unless grab has been acquired
|
||||
// for some other reason in the meantime.
|
||||
if (autoGrabber && !QWidget::mouseGrabber() && !popupGrabOk)
|
||||
qt_widget_private(autoGrabber)->stealMouseGrab(false);
|
||||
autoGrabber = 0;
|
||||
} else {
|
||||
// Some buttons are pressed, grab mouse input for current window,
|
||||
// unless there is already an active grab.
|
||||
if (!autoGrabber && !QWidget::mouseGrabber() && !popupGrabOk) {
|
||||
autoGrabber = widget->window();
|
||||
qt_widget_private(autoGrabber)->stealMouseGrab(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void ungrabKeyboardForPopup(QWidget *popup)
|
||||
{
|
||||
if (QWidget::keyboardGrabber())
|
||||
@ -185,9 +162,6 @@ static void grabForPopup(QWidget *popup)
|
||||
Q_ASSERT(popup->testAttribute(Qt::WA_WState_Created));
|
||||
popupGrabOk = qt_widget_private(popup)->stealKeyboardGrab(true);
|
||||
if (popupGrabOk) {
|
||||
if (autoGrabber)
|
||||
qt_widget_private(autoGrabber)->stealMouseGrab(false);
|
||||
autoGrabber = 0;
|
||||
popupGrabOk = qt_widget_private(popup)->stealMouseGrab(true);
|
||||
if (!popupGrabOk) {
|
||||
// transfer grab back to the keyboard grabber if any
|
||||
|
@ -1792,6 +1792,9 @@ void tst_QGraphicsWidget::updateFocusChainWhenChildDie()
|
||||
QVERIFY(w);
|
||||
QTest::mouseMove(view.viewport());
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0);
|
||||
#ifdef Q_OS_MAC
|
||||
QEXPECT_FAIL("", "QTBUG-23699", Continue);
|
||||
#endif
|
||||
QTRY_COMPARE(qApp->activeWindow(), static_cast<QWidget *>(&view));
|
||||
QTRY_COMPARE(scene.focusItem(), static_cast<QGraphicsItem *>(w));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user