From e9432b766eb022b2ec79de4fba96b9e424322aa4 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Sat, 11 Feb 2023 13:15:18 +0000 Subject: [PATCH] colorbutton: Ensure only one color dialog can open Fixes #2161 Previously it was possible to open multiple color dialoges for one color button. --- app/widget/colorbutton/colorbutton.cpp | 14 ++++++++++---- app/widget/colorbutton/colorbutton.h | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/widget/colorbutton/colorbutton.cpp b/app/widget/colorbutton/colorbutton.cpp index f6a3cf3fd..798a41db8 100644 --- a/app/widget/colorbutton/colorbutton.cpp +++ b/app/widget/colorbutton/colorbutton.cpp @@ -27,7 +27,8 @@ namespace olive { ColorButton::ColorButton(ColorManager* color_manager, bool show_dialog_on_click, QWidget *parent) : QPushButton(parent), color_manager_(color_manager), - color_processor_(nullptr) + color_processor_(nullptr), + dialog_open_(false) { setAutoFillBackground(true); @@ -55,11 +56,14 @@ void ColorButton::SetColor(const ManagedColor &c) void ColorButton::ShowColorDialog() { - ColorDialog *cd = new ColorDialog(color_manager_, color_, this); + if (!dialog_open_) { + dialog_open_ = true; + ColorDialog *cd = new ColorDialog(color_manager_, color_, this); - connect(cd, &ColorDialog::finished, this, &ColorButton::ColorDialogFinished); + connect(cd, &ColorDialog::finished, this, &ColorButton::ColorDialogFinished); - cd->show(); + cd->show(); + } } void ColorButton::ColorDialogFinished(int e) @@ -75,6 +79,8 @@ void ColorButton::ColorDialogFinished(int e) } cd->deleteLater(); + + dialog_open_ = false; } void ColorButton::UpdateColor() diff --git a/app/widget/colorbutton/colorbutton.h b/app/widget/colorbutton/colorbutton.h index c325fc8bd..376607ea8 100644 --- a/app/widget/colorbutton/colorbutton.h +++ b/app/widget/colorbutton/colorbutton.h @@ -60,6 +60,8 @@ private: ColorProcessorPtr color_processor_; + bool dialog_open_; + }; }