Extend widget grab test.

- Add enter/leave logging.
- Add button to enforce native widgets.
- Make mouse event logging more verbose.

Task-number: QTBUG-27800

Change-Id: I23160244bef6cb0b8d505cbf118cf12d91621fe7
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
This commit is contained in:
Friedemann Kleint 2012-11-07 10:04:53 +01:00 committed by The Qt Project
parent c072ee1277
commit f09d434987

View File

@ -73,17 +73,20 @@ private slots:
void delayedMouseWindowGrab();
void keyboardGrabToggled(bool);
void grabKeyboardWindowToggled(bool);
void forceNativeWidgets();
private:
void toggleMouseWidgetGrab(QWidget *w, bool on);
void toggleKeyboardWidgetGrab(QWidget *w, bool on);
int m_mouseEventCount;
int m_enterLeaveEventCount;
QPlainTextEdit *m_logEdit;
QCheckBox *m_grabMouseCheckBox;
QCheckBox *m_grabMouseWindowCheckBox;
QCheckBox *m_grabKeyboardCheckBox;
QCheckBox *m_grabKeyboardWindowCheckBox;
QPushButton *m_forceNativeButton;
QString m_lastMouseMoveEvent;
};
@ -119,11 +122,13 @@ static const char testCasesC[] =
MainWindow::MainWindow()
: m_mouseEventCount(0)
, m_enterLeaveEventCount(0)
, m_logEdit(new QPlainTextEdit(this))
, m_grabMouseCheckBox(new QCheckBox(QLatin1String("Grab Mouse")))
, m_grabMouseWindowCheckBox(new QCheckBox(QLatin1String("Grab Mouse Window Ctrl+W")))
, m_grabKeyboardCheckBox(new QCheckBox(QLatin1String("Grab Keyboard")))
, m_grabKeyboardWindowCheckBox(new QCheckBox(QLatin1String("Grab Keyboard Window")))
, m_forceNativeButton(new QPushButton(QLatin1String("Force native widgets")))
{
setObjectName(QLatin1String("MainWindow"));
setMinimumWidth(800);
@ -141,6 +146,7 @@ MainWindow::MainWindow()
connect(clearLog, SIGNAL(triggered()), m_logEdit, SLOT(clear()));
QWidget *w = new QWidget(this);
w->setObjectName(QLatin1String("CentralWidget"));
QVBoxLayout *layout = new QVBoxLayout(w);
QPlainTextEdit *instructions = new QPlainTextEdit(this);
instructions->setObjectName(QLatin1String("InstructionsEdit"));
@ -204,6 +210,11 @@ MainWindow::MainWindow()
popupMenuButton->setMenu(popupMenu);
controlLayout->addWidget(popupMenuButton, row, 1);
row++;
m_forceNativeButton->setObjectName("ForceNativeWidgetsButton");
controlLayout->addWidget(m_forceNativeButton, row, 0);
connect(m_forceNativeButton, SIGNAL(clicked()), this, SLOT(forceNativeWidgets()));
row++;
QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setObjectName(QLatin1String("LineEdit"));
@ -221,13 +232,37 @@ bool MainWindow::eventFilter(QObject *o, QEvent *e)
{
if (o->isWidgetType()) {
switch (e->type()) {
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease: {
case QEvent::Enter: {
QString message;
QDebug debug(&message);
debug.nospace() << '#' << m_mouseEventCount++ << " on " << o->objectName()
<< " type " << e->type() << " Mousegrabber "
<< QWidget::mouseGrabber();
debug.nospace() << '#' << m_enterLeaveEventCount++ << " Enter for " << o->objectName();
m_logEdit->appendPlainText(message);
}
break;
case QEvent::Leave: {
QString message;
QDebug debug(&message);
debug.nospace() << '#' << m_enterLeaveEventCount++ << " Leave for " << o->objectName();
m_logEdit->appendPlainText(message);
}
break;
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease: {
const QMouseEvent *me = static_cast<QMouseEvent *>(e);
QString message;
QDebug debug = QDebug(&message).nospace();
debug << '#' << m_mouseEventCount++ << ' ';
if (e->type() == QEvent::MouseButtonPress) {
if (me->buttons() & Qt::LeftButton)
debug << "Left button press";
if (me->buttons() & Qt::MiddleButton)
debug << "Middle button press";
if (me->buttons() & Qt::RightButton)
debug << "Right button press";
} else {
debug << "Button release";
}
debug << " on " << o->objectName() << " Mousegrabber " << QWidget::mouseGrabber();
m_logEdit->appendPlainText(message);
}
break;
@ -324,6 +359,14 @@ void MainWindow::grabKeyboardWindowToggled(bool g)
toggleKeyboardWidgetGrab(this, g);
}
void MainWindow::forceNativeWidgets()
{
m_logEdit->appendPlainText(QString::fromLatin1("Created native widget %1").
arg(m_forceNativeButton->winId()));
m_forceNativeButton->setEnabled(false);
m_forceNativeButton->setText(QLatin1String("Native widgets created"));
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);