Implemented enter / leave events for QWidget.
This commit is contained in:
parent
4e69052efc
commit
dc0f9f02a5
@ -664,22 +664,18 @@ void QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGuiApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *)
|
void QGuiApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e)
|
||||||
{
|
{
|
||||||
// QGuiApplicationPrivate::dispatchEnterLeave(e->enter.data(),0);
|
// QGuiApplicationPrivate::dispatchEnterLeave(e->enter.data(),0);
|
||||||
// qt_last_mouse_receiver = e->enter.data();
|
// qt_last_mouse_receiver = e->enter.data();
|
||||||
|
QEvent event(QEvent::Enter);
|
||||||
|
QApplication::sendSpontaneousEvent(e->enter.data(), &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGuiApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *)
|
void QGuiApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e)
|
||||||
{
|
{
|
||||||
// QGuiApplicationPrivate::dispatchEnterLeave(0,qt_last_mouse_receiver);
|
QEvent event(QEvent::Leave);
|
||||||
|
QApplication::sendSpontaneousEvent(e->leave.data(), &event);
|
||||||
#if 0
|
|
||||||
if (e->leave.data() && !e->leave.data()->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen
|
|
||||||
QGuiApplicationPrivate::dispatchEnterLeave(0, e->leave.data());
|
|
||||||
#endif
|
|
||||||
qt_last_mouse_receiver = 0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *)
|
void QGuiApplicationPrivate::processActivatedEvent(QWindowSystemInterfacePrivate::ActivatedWindowEvent *)
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
#include "qwidgetwindow_qpa_p.h"
|
#include "qwidgetwindow_qpa_p.h"
|
||||||
|
|
||||||
#include "private/qwidget_p.h"
|
#include "private/qwidget_p.h"
|
||||||
|
#include "private/qapplication_p.h"
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -57,6 +58,11 @@ bool QWidgetWindow::event(QEvent *event)
|
|||||||
handleCloseEvent(static_cast<QCloseEvent *>(event));
|
handleCloseEvent(static_cast<QCloseEvent *>(event));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case QEvent::Enter:
|
||||||
|
case QEvent::Leave:
|
||||||
|
handleEnterLeaveEvent(event);
|
||||||
|
return true;
|
||||||
|
|
||||||
case QEvent::KeyPress:
|
case QEvent::KeyPress:
|
||||||
case QEvent::KeyRelease:
|
case QEvent::KeyRelease:
|
||||||
handleKeyEvent(static_cast<QKeyEvent *>(event));
|
handleKeyEvent(static_cast<QKeyEvent *>(event));
|
||||||
@ -88,6 +94,20 @@ bool QWidgetWindow::event(QEvent *event)
|
|||||||
return m_widget->event(event) || QWindow::event(event);
|
return m_widget->event(event) || QWindow::event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPointer<QWidget> qt_last_mouse_receiver = 0;
|
||||||
|
|
||||||
|
void QWidgetWindow::handleEnterLeaveEvent(QEvent *event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::Leave) {
|
||||||
|
QApplicationPrivate::dispatchEnterLeave(0, m_widget);
|
||||||
|
qt_last_mouse_receiver = 0;
|
||||||
|
} else {
|
||||||
|
QApplicationPrivate::dispatchEnterLeave(m_widget, 0);
|
||||||
|
qt_last_mouse_receiver = m_widget;
|
||||||
|
printf("Enter event: %p\n", m_widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
// which child should have it?
|
// which child should have it?
|
||||||
@ -106,6 +126,11 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
|||||||
|
|
||||||
QPoint mapped = widget->mapFrom(m_widget, event->pos());
|
QPoint mapped = widget->mapFrom(m_widget, event->pos());
|
||||||
|
|
||||||
|
if (widget != qt_last_mouse_receiver) {
|
||||||
|
QApplicationPrivate::dispatchEnterLeave(widget, qt_last_mouse_receiver);
|
||||||
|
qt_last_mouse_receiver = widget;
|
||||||
|
}
|
||||||
|
|
||||||
QMouseEvent translated(event->type(), mapped, event->globalPos(), event->button(), event->buttons(), event->modifiers());
|
QMouseEvent translated(event->type(), mapped, event->globalPos(), event->button(), event->buttons(), event->modifiers());
|
||||||
QGuiApplication::sendSpontaneousEvent(widget, &translated);
|
QGuiApplication::sendSpontaneousEvent(widget, &translated);
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ protected:
|
|||||||
bool event(QEvent *);
|
bool event(QEvent *);
|
||||||
|
|
||||||
void handleCloseEvent(QCloseEvent *);
|
void handleCloseEvent(QCloseEvent *);
|
||||||
|
void handleEnterLeaveEvent(QEvent *);
|
||||||
void handleKeyEvent(QKeyEvent *);
|
void handleKeyEvent(QKeyEvent *);
|
||||||
void handleMouseEvent(QMouseEvent *);
|
void handleMouseEvent(QMouseEvent *);
|
||||||
void handleMoveEvent(QMoveEvent *);
|
void handleMoveEvent(QMoveEvent *);
|
||||||
|
Loading…
Reference in New Issue
Block a user