commit 49fe82ec8ddf829aabeddb74cd51f1bef5b4df52 Author: Stephan Witt <sw...@lyx.org> Date: Sat Aug 5 15:23:44 2023 +0200
#10740 fix focus problems with color picker on Mac - closing the color picker focuses the wrong (main) window - to return focus to correct (parent) window it has to be activated explicitly --- src/frontends/qt/GuiBranches.cpp | 4 ++-- src/frontends/qt/GuiDialog.cpp | 19 +++++++++++++++++++ src/frontends/qt/GuiDialog.h | 3 +++ src/frontends/qt/GuiDocument.cpp | 13 ++++--------- src/frontends/qt/GuiIndices.cpp | 4 ++-- src/frontends/qt/GuiPrefs.cpp | 3 +-- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/frontends/qt/GuiBranches.cpp b/src/frontends/qt/GuiBranches.cpp index 79d1640..795a6f6 100644 --- a/src/frontends/qt/GuiBranches.cpp +++ b/src/frontends/qt/GuiBranches.cpp @@ -15,6 +15,7 @@ #include "ColorCache.h" #include "GuiApplication.h" +#include "GuiDialog.h" #include "Validator.h" #include "qt_helpers.h" @@ -35,7 +36,6 @@ #include <QPixmap> #include <QIcon> #include <QColor> -#include <QColorDialog> #ifdef KeyPress #undef KeyPress @@ -341,7 +341,7 @@ void GuiBranches::toggleColor(QTreeWidgetItem * item) else guiApp->getRgbColor(lcolor.getFromLyXName(bcolor), rgbcol); QColor const initial = rgb2qcolor(rgbcol); - QColor ncol = QColorDialog::getColor(initial, qApp->focusWidget()); + QColor ncol = GuiDialog::getColor(initial, this); if (!ncol.isValid()) return; diff --git a/src/frontends/qt/GuiDialog.cpp b/src/frontends/qt/GuiDialog.cpp index 67793df..186d9ea 100644 --- a/src/frontends/qt/GuiDialog.cpp +++ b/src/frontends/qt/GuiDialog.cpp @@ -21,6 +21,7 @@ #include <QCloseEvent> #include <QDialogButtonBox> +#include <QColorDialog> using namespace std; @@ -282,6 +283,24 @@ QString GuiDialog::browseRelToSub( } +QColor GuiDialog::getColor(const QColor &initial, QWidget *parent) +{ + const QColor color = QColorDialog::getColor(initial, parent); + if (guiApp->platformName() == "cocoa") { + QWidget * dialog = parent->window(); + // On Mac explicitly activate the parents top-level widget + // See #10740 + dialog->raise(); + dialog->activateWindow(); + } + return color; +} + +QColor GuiDialog::getColor(const QColor &initial) +{ + return getColor(initial, asQWidget()); +} + } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt/GuiDialog.h b/src/frontends/qt/GuiDialog.h index 50910f4..bd50df0 100644 --- a/src/frontends/qt/GuiDialog.h +++ b/src/frontends/qt/GuiDialog.h @@ -178,6 +178,9 @@ public: QString const & label2 = QString(), QString const & dir2 = QString()); + static QColor getColor(const QColor &initial, QWidget *parent); + QColor getColor(const QColor &initial); + private: ButtonController bc_; /// are we updating ? diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp index e8c8c19..820fb24 100644 --- a/src/frontends/qt/GuiDocument.cpp +++ b/src/frontends/qt/GuiDocument.cpp @@ -73,7 +73,6 @@ #include <QAbstractItemModel> #include <QButtonGroup> #include <QColor> -#include <QColorDialog> #include <QCloseEvent> #include <QDirIterator> #include <QFontDatabase> @@ -2293,8 +2292,7 @@ void GuiDocument::setCustomMargins(bool custom) void GuiDocument::changeBackgroundColor() { - QColor const & newColor = QColorDialog::getColor( - rgb2qcolor(set_backgroundcolor), asQWidget()); + QColor const & newColor = getColor(rgb2qcolor(set_backgroundcolor)); if (!newColor.isValid()) return; // set the color @@ -2322,8 +2320,7 @@ void GuiDocument::deleteBackgroundColor() void GuiDocument::changeFontColor() { - QColor const & newColor = QColorDialog::getColor( - rgb2qcolor(set_fontcolor), asQWidget()); + QColor const & newColor = getColor(rgb2qcolor(set_fontcolor)); if (!newColor.isValid()) return; // set the color @@ -2351,8 +2348,7 @@ void GuiDocument::deleteFontColor() void GuiDocument::changeNoteFontColor() { - QColor const & newColor = QColorDialog::getColor( - rgb2qcolor(set_notefontcolor), asQWidget()); + QColor const & newColor = getColor(rgb2qcolor(set_notefontcolor)); if (!newColor.isValid()) return; // set the color @@ -2378,8 +2374,7 @@ void GuiDocument::deleteNoteFontColor() void GuiDocument::changeBoxBackgroundColor() { - QColor const & newColor = QColorDialog::getColor( - rgb2qcolor(set_boxbgcolor), asQWidget()); + QColor const & newColor = getColor(rgb2qcolor(set_boxbgcolor)); if (!newColor.isValid()) return; // set the color diff --git a/src/frontends/qt/GuiIndices.cpp b/src/frontends/qt/GuiIndices.cpp index 5e145f5..6fa9cbc 100644 --- a/src/frontends/qt/GuiIndices.cpp +++ b/src/frontends/qt/GuiIndices.cpp @@ -16,6 +16,7 @@ #include "ColorCache.h" #include "GuiApplication.h" +#include "GuiDialog.h" #include "Validator.h" #include "qt_helpers.h" @@ -32,7 +33,6 @@ #include <QPixmap> #include <QIcon> #include <QColor> -#include <QColorDialog> using namespace std; @@ -290,7 +290,7 @@ void GuiIndices::toggleColor(QTreeWidgetItem * item) return; QColor const initial = rgb2qcolor(index->color()); - QColor ncol = QColorDialog::getColor(initial, qApp->focusWidget()); + QColor ncol = GuiDialog::getColor(initial, this); if (!ncol.isValid()) return; diff --git a/src/frontends/qt/GuiPrefs.cpp b/src/frontends/qt/GuiPrefs.cpp index a74d97f..62ee814 100644 --- a/src/frontends/qt/GuiPrefs.cpp +++ b/src/frontends/qt/GuiPrefs.cpp @@ -56,7 +56,6 @@ #include <QAbstractItemModel> #include <QCheckBox> -#include <QColorDialog> #include <QFontDatabase> #include <QHeaderView> #include <QLineEdit> @@ -1056,7 +1055,7 @@ void PrefColors::changeColor() return; QString const color = newcolors_[size_t(row)]; - QColor const c = QColorDialog::getColor(QColor(color), qApp->focusWidget()); + QColor const c = form_->getColor(QColor(color)); if (setColor(row, c, color)) { setDisabledResets(); -- lyx-cvs mailing list lyx-cvs@lists.lyx.org http://lists.lyx.org/mailman/listinfo/lyx-cvs