summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/designer/src/designer/qdesigner_actions.cpp7
-rw-r--r--src/designer/src/designer/qdesigner_appearanceoptions.cpp2
-rw-r--r--src/designer/src/designer/qdesigner_appearanceoptions.h8
-rw-r--r--src/designer/src/designer/qdesigner_workbench.cpp24
-rw-r--r--src/designer/src/designer/qdesigner_workbench.h3
5 files changed, 33 insertions, 11 deletions
diff --git a/src/designer/src/designer/qdesigner_actions.cpp b/src/designer/src/designer/qdesigner_actions.cpp
index 0b020453b..87039d5e9 100644
--- a/src/designer/src/designer/qdesigner_actions.cpp
+++ b/src/designer/src/designer/qdesigner_actions.cpp
@@ -1294,8 +1294,11 @@ bool QDesignerActions::ensureBackupDirectories() {
void QDesignerActions::showPreferencesDialog()
{
- PreferencesDialog preferencesDialog(workbench()->core(), m_core->topLevel());
- preferencesDialog.exec();
+ {
+ PreferencesDialog preferencesDialog(workbench()->core(), m_core->topLevel());
+ preferencesDialog.exec();
+ } // Make sure the preference dialog is destroyed before switching UI modes.
+ m_workbench->applyUiSettings();
}
void QDesignerActions::showAppFontDialog()
diff --git a/src/designer/src/designer/qdesigner_appearanceoptions.cpp b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
index 58bda38de..40c9c0923 100644
--- a/src/designer/src/designer/qdesigner_appearanceoptions.cpp
+++ b/src/designer/src/designer/qdesigner_appearanceoptions.cpp
@@ -153,8 +153,8 @@ void QDesignerAppearanceOptionsPage::apply()
if (newOptions != m_initialOptions) {
QDesignerSettings settings(m_core);
newOptions.toSettings(settings);
- QTimer::singleShot(0, this, SIGNAL(settingsChangedDelayed()));
m_initialOptions = newOptions;
+ emit settingsChanged();
}
}
}
diff --git a/src/designer/src/designer/qdesigner_appearanceoptions.h b/src/designer/src/designer/qdesigner_appearanceoptions.h
index af85c16d9..ac2ccd951 100644
--- a/src/designer/src/designer/qdesigner_appearanceoptions.h
+++ b/src/designer/src/designer/qdesigner_appearanceoptions.h
@@ -105,11 +105,7 @@ private:
UIMode m_initialUIMode;
};
-/* The options page for appearance options. Emits a Timer-0 delayed changed
- * signal to allow the preferences dialog to close (and be deleted) before a
- * possible switch from docked mode to top-level mode happens. (The switch
- * would delete the main window, which the preference dialog is a child of
- * -> BOOM) */
+/* The options page for appearance options. */
class QDesignerAppearanceOptionsPage : public QObject, public QDesignerOptionsPageInterface
{
@@ -124,7 +120,7 @@ public:
virtual void finish();
signals:
- void settingsChangedDelayed();
+ void settingsChanged();
private:
QDesignerFormEditorInterface *m_core;
diff --git a/src/designer/src/designer/qdesigner_workbench.cpp b/src/designer/src/designer/qdesigner_workbench.cpp
index cbb1e83e8..5202a8006 100644
--- a/src/designer/src/designer/qdesigner_workbench.cpp
+++ b/src/designer/src/designer/qdesigner_workbench.cpp
@@ -182,7 +182,8 @@ QDesignerWorkbench::QDesignerWorkbench() :
m_globalMenuBar(new QMenuBar),
m_mode(NeutralMode),
m_dockedMainWindow(0),
- m_state(StateInitializing)
+ m_state(StateInitializing),
+ m_uiSettingsChanged(false)
{
QDesignerSettings settings(m_core);
@@ -246,7 +247,7 @@ QDesignerWorkbench::QDesignerWorkbench() :
{ // Add application specific options pages
QDesignerAppearanceOptionsPage *appearanceOptions = new QDesignerAppearanceOptionsPage(m_core);
- connect(appearanceOptions, SIGNAL(settingsChangedDelayed()), this, SLOT(restoreUISettings()));
+ connect(appearanceOptions, SIGNAL(settingsChanged()), this, SLOT(notifyUISettingsChanged()));
QList<QDesignerOptionsPageInterface*> optionsPages = m_core->optionsPages();
optionsPages.push_front(appearanceOptions);
m_core->setOptionsPages(optionsPages);
@@ -1061,6 +1062,25 @@ void QDesignerWorkbench::setFormWindowMinimized(QDesignerFormWindow *fw, bool mi
}
}
+/* Applies UI mode changes using Timer-0 delayed signal
+ * signal to make sure the preferences dialog is closed and destroyed
+ * before a possible switch from docked mode to top-level mode happens.
+ * (The switch deletes the main window, which the preference dialog is
+ * a child of -> BOOM) */
+
+void QDesignerWorkbench::applyUiSettings()
+{
+ if (m_uiSettingsChanged) {
+ m_uiSettingsChanged = false;
+ QTimer::singleShot(0, this, SLOT(restoreUISettings()));
+ }
+}
+
+void QDesignerWorkbench::notifyUISettingsChanged()
+{
+ m_uiSettingsChanged = true;
+}
+
void QDesignerWorkbench::restoreUISettings()
{
UIMode mode = QDesignerSettings(m_core).uiMode();
diff --git a/src/designer/src/designer/qdesigner_workbench.h b/src/designer/src/designer/qdesigner_workbench.h
index 7f41180da..cd5581d49 100644
--- a/src/designer/src/designer/qdesigner_workbench.h
+++ b/src/designer/src/designer/qdesigner_workbench.h
@@ -116,6 +116,7 @@ public:
bool handleClose();
bool readInBackup();
void updateBackup(QDesignerFormWindowInterface* fwi);
+ void applyUiSettings();
signals:
void modeChanged(UIMode mode);
@@ -140,6 +141,7 @@ private slots:
void minimizationStateChanged(QDesignerFormWindowInterface *formWindow, bool minimized);
void restoreUISettings();
+ void notifyUISettingsChanged();
void slotFileDropped(const QString &f);
private:
@@ -205,6 +207,7 @@ private:
enum State { StateInitializing, StateUp, StateClosing };
State m_state;
+ bool m_uiSettingsChanged; // UI mode changed in preference dialog, trigger delayed slot.
};
QT_END_NAMESPACE