Introducing the PlatformPanel event type.
This event can be used by any platform plugin to implement special application panels/overlayed menus. Currently used by QNX only. This replaces sending fake Qt::Key_Menu presses in the QNX plugin. Qt::Key_Menu is already used when invoking context menus with the keyboard. Change-Id: I9c8f1743fd147a07c11883323800017376915ae1 Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com> Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>bb10
parent
c79f0f0fba
commit
9695df4d44
|
|
@ -187,6 +187,7 @@ QT_BEGIN_NAMESPACE
|
|||
\value PaletteChange Palette of the widget changed.
|
||||
\value ParentAboutToChange The widget parent is about to change.
|
||||
\value ParentChange The widget parent has changed.
|
||||
\value PlatformPanel A platform specific panel has been requested.
|
||||
\value Polish The widget is polished.
|
||||
\value PolishRequest The widget should be polished.
|
||||
\value QueryWhatsThis The widget should accept the event if it has "What's This?" help.
|
||||
|
|
|
|||
|
|
@ -277,6 +277,8 @@ public:
|
|||
|
||||
SockClose = 211, // socket closed
|
||||
|
||||
PlatformPanel = 212,
|
||||
|
||||
// 512 reserved for Qt Jambi's MetaCall event
|
||||
// 513 reserved for Qt Jambi's DeleteOnMainThread event
|
||||
|
||||
|
|
|
|||
|
|
@ -1203,6 +1203,10 @@ void QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePriv
|
|||
QGuiApplicationPrivate::processTabletLeaveProximityEvent(
|
||||
static_cast<QWindowSystemInterfacePrivate::TabletLeaveProximityEvent *>(e));
|
||||
break;
|
||||
case QWindowSystemInterfacePrivate::PlatformPanel:
|
||||
QGuiApplicationPrivate::processPlatformPanelEvent(
|
||||
static_cast<QWindowSystemInterfacePrivate::PlatformPanelEvent *>(e));
|
||||
break;
|
||||
default:
|
||||
qWarning() << "Unknown user input event type:" << e->type;
|
||||
break;
|
||||
|
|
@ -1617,6 +1621,20 @@ void QGuiApplicationPrivate::processTabletLeaveProximityEvent(QWindowSystemInter
|
|||
#endif
|
||||
}
|
||||
|
||||
void QGuiApplicationPrivate::processPlatformPanelEvent(QWindowSystemInterfacePrivate::PlatformPanelEvent *e)
|
||||
{
|
||||
if (!e->window)
|
||||
return;
|
||||
|
||||
if (e->window->d_func()->blockedByModalWindow) {
|
||||
// a modal window is blocking this window, don't allow events through
|
||||
return;
|
||||
}
|
||||
|
||||
QEvent ev(QEvent::PlatformPanel);
|
||||
QGuiApplication::sendSpontaneousEvent(e->window.data(), &ev);
|
||||
}
|
||||
|
||||
Q_GUI_EXPORT uint qHash(const QGuiApplicationPrivate::ActiveTouchPointsKey &k)
|
||||
{
|
||||
return qHash(k.device) + k.touchPointId;
|
||||
|
|
|
|||
|
|
@ -137,6 +137,8 @@ public:
|
|||
static void processTabletEnterProximityEvent(QWindowSystemInterfacePrivate::TabletEnterProximityEvent *e);
|
||||
static void processTabletLeaveProximityEvent(QWindowSystemInterfacePrivate::TabletLeaveProximityEvent *e);
|
||||
|
||||
static void processPlatformPanelEvent(QWindowSystemInterfacePrivate::PlatformPanelEvent *e);
|
||||
|
||||
#ifndef QT_NO_DRAGANDDROP
|
||||
static QPlatformDragQtResponse processDrag(QWindow *w, const QMimeData *dropData, const QPoint &p, Qt::DropActions supportedActions);
|
||||
static QPlatformDropQtResponse processDrop(QWindow *w, const QMimeData *dropData, const QPoint &p, Qt::DropActions supportedActions);
|
||||
|
|
|
|||
|
|
@ -604,6 +604,13 @@ void QWindowSystemInterface::handleTabletLeaveProximityEvent(int device, int poi
|
|||
handleTabletLeaveProximityEvent(time, device, pointerType, uid);
|
||||
}
|
||||
|
||||
void QWindowSystemInterface::handlePlatformPanelEvent(QWindow *w)
|
||||
{
|
||||
QWindowSystemInterfacePrivate::PlatformPanelEvent *e =
|
||||
new QWindowSystemInterfacePrivate::PlatformPanelEvent(w);
|
||||
QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
|
||||
}
|
||||
|
||||
Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF & local, const QPointF & global, Qt::MouseButtons b, Qt::KeyboardModifiers mods = Qt::NoModifier) {
|
||||
QWindowSystemInterface::handleMouseEvent(w, local, global, b, mods);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,6 +176,7 @@ public:
|
|||
static void handleTabletLeaveProximityEvent(ulong timestamp, int device, int pointerType, qint64 uid);
|
||||
static void handleTabletLeaveProximityEvent(int device, int pointerType, qint64 uid);
|
||||
|
||||
static void handlePlatformPanelEvent(QWindow *w);
|
||||
|
||||
// For event dispatcher implementations
|
||||
static bool sendWindowSystemEvents(QEventLoop::ProcessEventsFlags flags);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ public:
|
|||
FileOpen,
|
||||
Tablet,
|
||||
TabletEnterProximity,
|
||||
TabletLeaveProximity
|
||||
TabletLeaveProximity,
|
||||
PlatformPanel
|
||||
};
|
||||
|
||||
class WindowSystemEvent {
|
||||
|
|
@ -325,6 +326,13 @@ public:
|
|||
qint64 uid;
|
||||
};
|
||||
|
||||
class PlatformPanelEvent : public WindowSystemEvent {
|
||||
public:
|
||||
explicit PlatformPanelEvent(QWindow *w)
|
||||
: WindowSystemEvent(PlatformPanel), window(w) { }
|
||||
QPointer<QWindow> window;
|
||||
};
|
||||
|
||||
class WindowSystemEventList {
|
||||
QList<WindowSystemEvent *> impl;
|
||||
mutable QMutex mutex;
|
||||
|
|
|
|||
|
|
@ -75,11 +75,16 @@ void QQnxNavigatorEventHandler::handleOrientationChange(int angle)
|
|||
|
||||
void QQnxNavigatorEventHandler::handleSwipeDown()
|
||||
{
|
||||
// simulate menu key press
|
||||
qNavigatorEventHandlerDebug() << Q_FUNC_INFO;
|
||||
QWindow *w = QGuiApplication::focusWindow();
|
||||
QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyPress, Qt::Key_Menu, Qt::NoModifier);
|
||||
QWindowSystemInterface::handleKeyEvent(w, QEvent::KeyRelease, Qt::Key_Menu, Qt::NoModifier);
|
||||
|
||||
if (w) {
|
||||
// Get the top level window that is ancestor of the focus window
|
||||
while (QWindow *parent = w->parent())
|
||||
w = parent;
|
||||
|
||||
QWindowSystemInterface::handlePlatformPanelEvent(w);
|
||||
}
|
||||
}
|
||||
|
||||
void QQnxNavigatorEventHandler::handleExit()
|
||||
|
|
|
|||
Loading…
Reference in New Issue