[graphics/krita/krita/6.0] plugins/dockers/widegamutcolorselector: Fix wide gamut color selector preview popup not hiding

Dmitry Kazakov <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 462554588a47fbb35511dc273232e342dbbe2927 by Dmitry Kazakov, on behalf of Luna Lovecraft.
Committed on 27/07/2026 at 12:15.
Pushed by dkazakov into branch 'krita/6.0'.

Fix wide gamut color selector preview popup not hiding

Before this commit when the wide gamut color selector is borrowed by the
popup palette, the color preview popup would not disappear properly.

BUG:522620

M  +14   -6    plugins/dockers/widegamutcolorselector/WGColorSelectorDock.cpp
M  +1    -1    plugins/dockers/widegamutcolorselector/WGColorSelectorDock.h

https://invent.kde.org/graphics/krita/-/commit/462554588a47fbb35511dc273232e342dbbe2927

diff --git a/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.cpp b/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.cpp
index b68da40fcc3..a723bfb6d71 100644
--- a/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.cpp
+++ b/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.cpp
@@ -48,6 +48,8 @@ WGColorSelectorDock::WGColorSelectorDock()
     setWindowTitle(i18n("Wide Gamut Color Selector"));
 
     QWidget *mainWidget = new QWidget();
+    mainWidget->installEventFilter(this);
+
     m_mainWidgetLayout = new QVBoxLayout(mainWidget);
     m_verticalElementsLayout = new QHBoxLayout();
     m_selectorAreaLayout = new QBoxLayout(QBoxLayout::TopToBottom);
@@ -155,12 +157,6 @@ void WGColorSelectorDock::setChannelValues(const QVector4D &values)
     m_pendingFgUpdate = false;
 }
 
-void WGColorSelectorDock::leaveEvent(QEvent *event)
-{
-    Q_UNUSED(event)
-    m_colorTooltip->hide();
-}
-
 void WGColorSelectorDock::setCanvas(KoCanvasBase *canvas)
 {
     if (m_canvas.data() == canvas)
@@ -486,6 +482,18 @@ void WGColorSelectorDock::slotShowGamutMaskToolbar(bool show)
     m_gamutToolbar->setVisible(show);
 }
 
+bool WGColorSelectorDock::eventFilter(QObject *obj, QEvent *e)
+{
+    Q_UNUSED(obj);
+
+    // Get the leave event of the inner widget, for when the docker is borrowed and doesn't properly handle leave events
+    if (e->type() == QEvent::Leave) {
+        m_colorTooltip->hide();
+    }
+
+    return false;
+}
+
 namespace WGConfig {
 const NumericSetting<WGColorSelectorDock::ColorSpaceSource> colorSpaceSource
 {
diff --git a/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.h b/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.h
index d820973e338..423c1a2236b 100644
--- a/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.h
+++ b/plugins/dockers/widegamutcolorselector/WGColorSelectorDock.h
@@ -60,10 +60,10 @@ public:
      */
     void setChannelValues(const QVector4D &values);
 protected:
-    void leaveEvent(QEvent *event) override;
     void setCanvas(KoCanvasBase *canvas) override;
     void unsetCanvas() override;
     void setViewManager(KisViewManager* viewManager) override;
+    bool eventFilter(QObject* obj, QEvent *ev) override;
 
     void disconnectFromCanvas();
     void updateLayout();
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.