From a52b9b5715de19934d9064e60c9e7ac74bd80608 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 22 May 2014 14:15:05 +0000 Subject: [PATCH] Avoid showing the colour selection dialog twice in wxPropertyGrid. Selecting "Custom" in a colour property cell resulted in the colour selection dialog being shown twice if it was cancelled the first time. Fix this by using wxPG_PROPERTY_SPECIFIC to indicate that the value is just being queried and the user shouldn't be asked to enter it, as it is already in the other places. Closes #15543. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_3_0_BRANCH@76593 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + src/propgrid/advprops.cpp | 23 ++++++++++++++++++++--- src/propgrid/editors.cpp | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index f20c778039..060162d5fd 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -603,6 +603,7 @@ All (GUI): - Support loading ICO files with data in PNG format (Artur Wieczorek). - Fix dragging columns in wxGrid when some of them are hidden (Artur Wieczorek). - Fix selecting elements from wxPropertyGrid enum properties (Artur Wieczorek). +- Don't show the dialog twice for colours in wxPropertyGrid (Artur Wieczorek). wxGTK: diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index 4dc1956222..5aabb0cbfb 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -1256,14 +1256,20 @@ bool wxSystemColourProperty::QueryColourFromUser( wxVariant& variant ) const } -bool wxSystemColourProperty::IntToValue( wxVariant& variant, int number, int WXUNUSED(argFlags) ) const +bool wxSystemColourProperty::IntToValue( wxVariant& variant, int number, int argFlags ) const { int index = number; int type = m_choices.GetValue(index); if ( type == wxPG_COLOUR_CUSTOM ) { - QueryColourFromUser(variant); + if ( !(argFlags & wxPG_PROPERTY_SPECIFIC) ) + return QueryColourFromUser(variant); + + // Call from event handler. + // User will be asked for custom color later on in OnEvent(). + wxColourPropertyValue val = GetVal(); + variant = DoTranslateVal(val); } else { @@ -1442,7 +1448,18 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te return false; } - QueryColourFromUser(value); + if ( (argFlags & wxPG_PROPERTY_SPECIFIC) ) + { + // Query for value from the event handler. + // User will be asked for custom color later on in OnEvent(). + ResetNextIndex(); + return false; + } + if ( !QueryColourFromUser(value) ) + { + ResetNextIndex(); + return false; + } } else { diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 1ed738945e..2a94c69266 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -1285,7 +1285,7 @@ bool wxPGComboBoxEditor::GetValueFromControl( wxVariant& variant, wxPGProperty* return true; } - bool res = property->StringToValue(variant, textVal, wxPG_EDITABLE_VALUE); + bool res = property->StringToValue(variant, textVal, wxPG_EDITABLE_VALUE|wxPG_PROPERTY_SPECIFIC); // Changing unspecified always causes event (returning // true here should be enough to trigger it).