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:
Friedemann Kleint 2012-09-06 14:37:59 +02:00 committed by Qt by Nokia
parent 1da928abba
commit 75cd2dec71
4 changed files with 4 additions and 30 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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

View File

@ -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));
}