diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 3207497f4a1..f03539d1cd7 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -958,13 +958,6 @@ void StringAspect::setExpectedKind(const PathChooser::Kind expectedKind) d->m_pathChooserDisplay->setExpectedKind(expectedKind); } -void StringAspect::setFileDialogOnly(bool requireFileDialog) -{ - d->m_fileDialogOnly = requireFileDialog; - if (d->m_pathChooserDisplay) - d->m_pathChooserDisplay->setFileDialogOnly(requireFileDialog); -} - void StringAspect::setEnvironment(const Environment &env) { d->m_environment = env; @@ -1060,7 +1053,6 @@ void StringAspect::addToLayout(LayoutBuilder &builder) d->m_pathChooserDisplay->setHistoryCompleter(d->m_historyCompleterKey); d->m_pathChooserDisplay->setEnvironment(d->m_environment); d->m_pathChooserDisplay->setBaseDirectory(d->m_baseFileName); - d->m_pathChooserDisplay->setFileDialogOnly(d->m_fileDialogOnly); d->m_pathChooserDisplay->setOpenTerminalHandler(d->m_openTerminal); d->m_pathChooserDisplay->setFilePath(FilePath::fromString(displayedString)); d->updateWidgetFromCheckStatus(this, d->m_pathChooserDisplay.data()); diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 799aadaac2f..ef2f44d80a3 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -298,7 +298,6 @@ public: void setPlaceHolderText(const QString &placeHolderText); void setHistoryCompleter(const QString &historyCompleterKey); void setExpectedKind(const Utils::PathChooser::Kind expectedKind); - void setFileDialogOnly(bool requireFileDialog); void setEnvironment(const Utils::Environment &env); void setBaseFileName(const Utils::FilePath &baseFileName); void setUndoRedoEnabled(bool readOnly); diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp index b59d1af2cb6..18683af8173 100644 --- a/src/libs/utils/pathchooser.cpp +++ b/src/libs/utils/pathchooser.cpp @@ -196,9 +196,6 @@ public: QList m_buttons; MacroExpander *m_macroExpander = globalMacroExpander(); std::function m_openTerminal; - - bool m_isReadOnly = false; - bool m_isFileDialogOnly = false; }; PathChooserPrivate::PathChooserPrivate() @@ -245,10 +242,9 @@ PathChooser::PathChooser(QWidget *parent) : { d->m_hLayout->setContentsMargins(0, 0, 0, 0); - setContextMenuPolicy(Qt::CustomContextMenu); - d->m_lineEdit->setContextMenuPolicy(Qt::NoContextMenu); + d->m_lineEdit->setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, + connect(d->m_lineEdit, &FancyLineEdit::customContextMenuRequested, this, &PathChooser::contextMenuRequested); @@ -294,7 +290,6 @@ void PathChooser::insertButton(int index, const QString &text, QObject *context, connect(button, &QAbstractButton::clicked, context, callback); d->m_hLayout->insertWidget(index + 1/*line edit*/, button); d->m_buttons.insert(index, button); - updateReadOnlyStateOfSubwidgets(); } QString PathChooser::browseButtonLabel() @@ -371,24 +366,15 @@ void PathChooser::setFilePath(const FilePath &fn) bool PathChooser::isReadOnly() const { - return d->m_isReadOnly; + return d->m_lineEdit->isReadOnly(); } void PathChooser::setReadOnly(bool b) { - d->m_isReadOnly = b; - updateReadOnlyStateOfSubwidgets(); -} - -bool PathChooser::isFileDialogOnly() const -{ - return d->m_isFileDialogOnly; -} - -void PathChooser::setFileDialogOnly(bool b) -{ - d->m_isFileDialogOnly = b; - updateReadOnlyStateOfSubwidgets(); + d->m_lineEdit->setReadOnly(b); + const auto buttons = d->m_buttons; + for (QAbstractButton *button : buttons) + button->setEnabled(!b); } void PathChooser::slotBrowse() @@ -478,29 +464,14 @@ void PathChooser::slotBrowse() void PathChooser::contextMenuRequested(const QPoint &pos) { - if (!d->m_lineEdit->rect().contains(pos)) - return; - QMenu *menu = d->m_lineEdit->createStandardContextMenu(); - if (!menu) - menu = new QMenu; - if (s_aboutToShowContextMenuHandler) - s_aboutToShowContextMenuHandler(this, menu); - if (!menu->actions().isEmpty()) { + if (QMenu *menu = d->m_lineEdit->createStandardContextMenu()) { menu->setAttribute(Qt::WA_DeleteOnClose); - menu->popup(mapToGlobal(pos)); - } else { - delete menu; - } -} -void PathChooser::updateReadOnlyStateOfSubwidgets() -{ - const bool readOnlyLineEdit = d->m_isReadOnly || d->m_isFileDialogOnly; - d->m_lineEdit->setEnabled(!readOnlyLineEdit); - d->m_lineEdit->setReadOnly(readOnlyLineEdit); - setFocusPolicy(d->m_lineEdit->focusPolicy()); - for (QAbstractButton *button : qAsConst(d->m_buttons)) - button->setEnabled(!d->m_isReadOnly); + if (s_aboutToShowContextMenuHandler) + s_aboutToShowContextMenuHandler(this, menu); + + menu->popup(d->m_lineEdit->mapToGlobal(pos)); + } } bool PathChooser::isValid() const diff --git a/src/libs/utils/pathchooser.h b/src/libs/utils/pathchooser.h index 3b4a83095ca..536015fd603 100644 --- a/src/libs/utils/pathchooser.h +++ b/src/libs/utils/pathchooser.h @@ -138,9 +138,6 @@ public: bool isReadOnly() const; void setReadOnly(bool b); - bool isFileDialogOnly() const; - void setFileDialogOnly(bool b); - void triggerChanged(); // global handler for adding context menus to ALL pathchooser @@ -164,7 +161,6 @@ private: QString makeDialogTitle(const QString &title); void slotBrowse(); void contextMenuRequested(const QPoint &pos); - void updateReadOnlyStateOfSubwidgets(); signals: void validChanged(bool validState); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index d0c3762a5f0..c79e249881c 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -844,9 +844,7 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) { m_buildSystem = new CMakeBuildSystem(this); - buildDirectoryAspect()->setFileDialogOnly(true); const auto buildDirAspect = aspect(); - buildDirAspect->setFileDialogOnly(true); buildDirAspect->setValueAcceptor( [](const QString &oldDir, const QString &newDir) -> Utils::optional { if (oldDir.isEmpty())