Feed external geometry changes to Qt
So that Qt responds correctly when window managers make geometry changes. Note: Older versions of screen, such as the screen from the QNX 6.6.0 4036 patch, don't produce SIZE/POSITION property events. Change-Id: I7e1e5982a2cbd3f57d468b43869af8558c6d50e7 Reviewed-by: Dan Cape <dcape@qnx.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>bb10
parent
5ea238cda6
commit
01c12a5c1a
|
|
@ -591,6 +591,10 @@ void QQnxScreenEventHandler::handlePropertyEvent(screen_event_t event)
|
|||
case SCREEN_PROPERTY_FOCUS:
|
||||
handleKeyboardFocusPropertyEvent(window);
|
||||
break;
|
||||
case SCREEN_PROPERTY_SIZE:
|
||||
case SCREEN_PROPERTY_POSITION:
|
||||
handleGeometryPropertyEvent(window);
|
||||
break;
|
||||
default:
|
||||
// event ignored
|
||||
qScreenEventDebug() << "Ignore property event for property: " << property;
|
||||
|
|
@ -617,6 +621,28 @@ void QQnxScreenEventHandler::handleKeyboardFocusPropertyEvent(screen_window_t wi
|
|||
m_focusLostTimer = startTimer(50);
|
||||
}
|
||||
|
||||
void QQnxScreenEventHandler::handleGeometryPropertyEvent(screen_window_t window)
|
||||
{
|
||||
int pos[2];
|
||||
if (screen_get_window_property_iv(window, SCREEN_PROPERTY_POSITION, pos) != 0) {
|
||||
qFatal("QQnx: failed to query window property, errno=%d", errno);
|
||||
}
|
||||
|
||||
int size[2];
|
||||
if (screen_get_window_property_iv(window, SCREEN_PROPERTY_SIZE, size) != 0) {
|
||||
qFatal("QQnx: failed to query window property, errno=%d", errno);
|
||||
}
|
||||
|
||||
QRect rect(pos[0], pos[1], size[0], size[1]);
|
||||
QWindow *qtWindow = QQnxIntegration::window(window);
|
||||
if (qtWindow) {
|
||||
qtWindow->setGeometry(rect);
|
||||
QWindowSystemInterface::handleGeometryChange(qtWindow, rect);
|
||||
}
|
||||
|
||||
qScreenEventDebug() << qtWindow << "moved to" << rect;
|
||||
}
|
||||
|
||||
void QQnxScreenEventHandler::timerEvent(QTimerEvent *event)
|
||||
{
|
||||
if (event->timerId() == m_focusLostTimer) {
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ private:
|
|||
void handleDisplayEvent(screen_event_t event);
|
||||
void handlePropertyEvent(screen_event_t event);
|
||||
void handleKeyboardFocusPropertyEvent(screen_window_t window);
|
||||
void handleGeometryPropertyEvent(screen_window_t window);
|
||||
|
||||
private:
|
||||
enum {
|
||||
|
|
|
|||
Loading…
Reference in New Issue