diff options
author | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2010-04-19 17:13:20 (GMT) |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dietrich-de@nokia.com> | 2010-04-20 09:49:16 (GMT) |
commit | 434d2312b63090cfd2ba7e0f3728b5b225bcaeec (patch) | |
tree | 934dd144a1b99d1da4bbc07981a7ca9003640317 | |
parent | 67ffe10585bc683cd160cef95fef55e8301a6ab5 (diff) | |
download | Qt-434d2312b63090cfd2ba7e0f3728b5b225bcaeec.zip Qt-434d2312b63090cfd2ba7e0f3728b5b225bcaeec.tar.gz Qt-434d2312b63090cfd2ba7e0f3728b5b225bcaeec.tar.bz2 |
QDialog: user-moved dialog would not show on the same place after hide
The Qt::WA_Moved was not being set during the move event as notified
by the window manager. This is a behavior change for 4.7, but we think
it's more user friendly than the previous behavior.
Reviewed-by: mbm
Task-number: QTBUG-9991
-rw-r--r-- | src/gui/dialogs/qdialog.cpp | 14 | ||||
-rw-r--r-- | src/gui/dialogs/qdialog.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwidget.cpp | 6 |
3 files changed, 11 insertions, 11 deletions
diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index a6bd78a..e4f45ba 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -393,7 +393,6 @@ void QDialogPrivate::resetModalitySetByOpen() resetModalityTo = -1; } -#if defined(Q_WS_WINCE) || defined(Q_WS_S60) #ifdef Q_WS_WINCE_WM void QDialogPrivate::_q_doneAction() { @@ -408,12 +407,12 @@ void QDialogPrivate::_q_doneAction() bool QDialog::event(QEvent *e) { bool result = QWidget::event(e); -#ifdef Q_WS_WINCE +#if defined(Q_WS_WINCE) if (e->type() == QEvent::OkRequest) { accept(); result = true; - } -#else + } else +#elif defined(Q_WS_S60) if ((e->type() == QEvent::StyleChange) || (e->type() == QEvent::Resize )) { if (!testAttribute(Qt::WA_Moved)) { Qt::WindowStates state = windowState(); @@ -422,11 +421,14 @@ bool QDialog::event(QEvent *e) if (state != windowState()) setWindowState(state); } - } + } else #endif + if (e->type() == QEvent::Move) { + setAttribute(Qt::WA_Moved, true); // as explicit as the user wants it to be + } + return result; } -#endif /*! Returns the modal dialog's result code, \c Accepted or \c Rejected. diff --git a/src/gui/dialogs/qdialog.h b/src/gui/dialogs/qdialog.h index 777256a..7ab0cb6 100644 --- a/src/gui/dialogs/qdialog.h +++ b/src/gui/dialogs/qdialog.h @@ -107,9 +107,7 @@ public Q_SLOTS: protected: QDialog(QDialogPrivate &, QWidget *parent, Qt::WindowFlags f = 0); -#if defined(Q_WS_WINCE) || defined(Q_WS_S60) bool event(QEvent *e); -#endif void keyPressEvent(QKeyEvent *); void closeEvent(QCloseEvent *); void showEvent(QShowEvent *); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 10fa4b9..046bc7f 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -7307,9 +7307,9 @@ void QWidgetPrivate::show_helper() setVisible(false). - \note If you are working with QDialog or its subclasses and you invoke - the show() function after this function, the dialog will be displayed in - its original position. + \note Since Qt 4.7, when calling hide() and then show() on QDialog + derived widgets will show on the previous (as in "Where the user moved it to") + position. \sa hideEvent(), isHidden(), show(), setVisible(), isVisible(), close() */ |