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

Reply via email to