diff options
author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-03-27 15:22:29 (GMT) |
---|---|---|
committer | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2009-03-27 16:05:36 (GMT) |
commit | 00644eefacdd5bbf61efc4a1d2d3b29c686b11e7 (patch) | |
tree | 165cdc3bdcbb14fade3b4080d03d650736efdabb /src/gui/kernel/qapplication_x11.cpp | |
parent | 136f9766f6629a3e82609cf51346e4811bcc47ae (diff) | |
download | Qt-00644eefacdd5bbf61efc4a1d2d3b29c686b11e7.zip Qt-00644eefacdd5bbf61efc4a1d2d3b29c686b11e7.tar.gz Qt-00644eefacdd5bbf61efc4a1d2d3b29c686b11e7.tar.bz2 |
QDesktopWidget::resized wasn't emitted properly on X11.
When the size of one of the screen changes but the geometry of the
whole desktop hasn't been changed the resized() signal wasn't emitted.
The patch by Lubos Lunak also adds emitting of a signal whenever the
screen is turned on or off.
Task-number: 226048
Reviewed-by: Brad
Diffstat (limited to 'src/gui/kernel/qapplication_x11.cpp')
-rw-r--r-- | src/gui/kernel/qapplication_x11.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 1df442f..6babda9 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -3351,15 +3351,24 @@ int QApplication::x11ProcessEvent(XEvent* event) // update the size for desktop widget int scr = X11->ptrXRRRootToScreen(X11->display, event->xany.window); - QWidget *w = desktop()->screen(scr); + QDesktopWidget *desktop = QApplication::desktop(); + QWidget *w = desktop->screen(scr); QSize oldSize(w->size()); w->data->crect.setWidth(DisplayWidth(X11->display, scr)); w->data->crect.setHeight(DisplayHeight(X11->display, scr)); - if (w->size() != oldSize) { - QResizeEvent e(w->size(), oldSize); - QApplication::sendEvent(w, &e); - emit desktop()->resized(scr); - } + QVarLengthArray<QRect> oldSizes(desktop->numScreens()); + for (int i = 0; i < desktop->numScreens(); ++i) + oldSizes[i] = desktop->screenGeometry(i); + QResizeEvent e(w->size(), oldSize); + QApplication::sendEvent(w, &e); + for (int i = 0; i < qMin(oldSizes.count(), desktop->numScreens()); ++i) { + if (oldSizes[i] != desktop->screenGeometry(i)) + emit desktop->resized(i); + } + for (int i = oldSizes.count(); i < desktop->numScreens(); ++i) + emit desktop->resized(i); // added + for (int i = desktop->numScreens(); i < oldSizes.count(); ++i) + emit desktop->resized(i); // removed } #endif // QT_NO_XRANDR |