Fix completely broken default button handling in wxMSW
The logic in wxButton::{Set,Unset}TmpDefault() didn't work at all when the temporary button was the same as the permanent default button as the code made the same button non-default immediately after making it default (or vice versa). In particular, this ensured that default button was never highlighted correctly (at least after the first focus change) in dialogs containing a single button only. Fix this by simply skipping modification of the old default button if it was the same one as the new default button.
This commit is contained in:
@@ -284,13 +284,19 @@ void wxButton::SetTmpDefault()
|
||||
return;
|
||||
|
||||
wxWindow *winOldDefault = tlw->GetDefaultItem();
|
||||
|
||||
tlw->SetTmpDefaultItem(this);
|
||||
|
||||
// Notice that the order of these statements is important, the old button
|
||||
// is not reset if we do it the other way round, probably because of
|
||||
// something done by the default DM_SETDEFID handler.
|
||||
SetDefaultStyle(this, true);
|
||||
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
|
||||
if ( winOldDefault != this )
|
||||
{
|
||||
// But we mustn't reset the default style on this button itself if it
|
||||
// had already been the default.
|
||||
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
|
||||
}
|
||||
}
|
||||
|
||||
// unset this button as currently default, it may still stay permanent default
|
||||
@@ -306,7 +312,10 @@ void wxButton::UnsetTmpDefault()
|
||||
|
||||
// Just as in SetTmpDefault() above, the order is important here.
|
||||
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), true);
|
||||
SetDefaultStyle(this, false);
|
||||
if ( winOldDefault != this )
|
||||
{
|
||||
SetDefaultStyle(this, false);
|
||||
}
|
||||
}
|
||||
|
||||
/* static */
|
||||
|
Reference in New Issue
Block a user