The order of buttons in wxGTK wxMessageDialog was accidentally broken since
r55482 and wxStdDialogButtonSizer implementation for wxGTK was subsequently
modified to work in the same way as the broken version of wxMessageDialog.
Fix wxMessageDialog and remove the "compatibility" workarounds from
wxStdDialogButtonSizer to restore correct behaviour in both places.
Closes #12565.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65812
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
m_buttonCancel = button;
}
m_buttonCancel = button;
}
-#ifdef __WXGTK20__
-
-namespace
-{
-
-// Returns true only if the button is non-NULL and has the given id and text
-// (possible translated).
-bool IsStdButtonWithStdText(wxButton *btn, wxWindowID id, const char *label)
-{
- if ( !btn )
- return false;
-
- if ( btn->GetId() != id )
- return false;
-
- const wxString labelText = btn->GetLabelText();
- return labelText == label || labelText == wxGetTranslation(label);
-}
-
-} // anonymous namespace
-
-#endif // __WXGTK20__
-
void wxStdDialogButtonSizer::Realize()
{
#ifdef __WXMAC__
void wxStdDialogButtonSizer::Realize()
{
#ifdef __WXMAC__
Add(12, 40);
#elif defined(__WXGTK20__)
// http://library.gnome.org/devel/hig-book/stable/windows-alert.html.en
Add(12, 40);
#elif defined(__WXGTK20__)
// http://library.gnome.org/devel/hig-book/stable/windows-alert.html.en
- // describes the margins and the buttons order but basically it is
+ // says that the correct button order is
//
// [Help] [Alternative] [Cancel] [Affirmative]
//
// [Help] [Alternative] [Cancel] [Affirmative]
- //
- // in general case but, somewhat confusingly, the native message box
- // uses "No Yes Cancel" with these particular buttons so do we as well.
// Flags ensuring that margins between the buttons are 6 pixels.
const wxSizerFlags
// Flags ensuring that margins between the buttons are 6 pixels.
const wxSizerFlags
// Align the rest of the buttons to the right.
AddStretchSpacer();
// Align the rest of the buttons to the right.
AddStretchSpacer();
- // "No Yes Cancel" is an exception to the general rule according to
- // which the affirmative buttons goes after "Cancel" so treat it
- // separately
- if ( IsStdButtonWithStdText(m_buttonNegative, wxID_NO, "No") &&
- IsStdButtonWithStdText(m_buttonAffirmative, wxID_YES, "Yes") &&
- IsStdButtonWithStdText(m_buttonCancel, wxID_CANCEL, "Cancel") )
- {
Add(m_buttonNegative, flagsBtn);
Add(m_buttonNegative, flagsBtn);
- Add(m_buttonAffirmative, flagsBtn);
- Add(m_buttonCancel, flagsBtn);
- }
- else // Use standard layout
- {
- if (m_buttonNegative)
- Add(m_buttonNegative, flagsBtn);
- if (m_buttonApply)
- Add(m_buttonApply, flagsBtn);
+ if (m_buttonApply)
+ Add(m_buttonApply, flagsBtn);
- if (m_buttonCancel)
- Add(m_buttonCancel, flagsBtn);
+ if (m_buttonCancel)
+ Add(m_buttonCancel, flagsBtn);
- if (m_buttonAffirmative)
- Add(m_buttonAffirmative, flagsBtn);
- }
+ if (m_buttonAffirmative)
+ Add(m_buttonAffirmative, flagsBtn);
// Ensure that the right margin is 12 as well.
AddSpacer(9);
// Ensure that the right margin is 12 as well.
AddSpacer(9);
+ // Add the buttons in the correct order which is, according to
+ // http://library.gnome.org/devel/hig-book/stable/windows-alert.html.en
+ // the following one:
+ //
+ // [Help] [Alternative] [Cancel] [Affirmative]
+
gtk_dialog_add_button(dlg, wxGTK_CONV(GetNoLabel()),
GTK_RESPONSE_NO);
gtk_dialog_add_button(dlg, wxGTK_CONV(GetNoLabel()),
GTK_RESPONSE_NO);
- gtk_dialog_add_button(dlg, wxGTK_CONV(GetYesLabel()),
- GTK_RESPONSE_YES);
if ( m_dialogStyle & wxCANCEL )
{
gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()),
GTK_RESPONSE_CANCEL);
}
if ( m_dialogStyle & wxCANCEL )
{
gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()),
GTK_RESPONSE_CANCEL);
}
+
+ gtk_dialog_add_button(dlg, wxGTK_CONV(GetYesLabel()),
+ GTK_RESPONSE_YES);
}
// it'd probably be harmless to call gtk_dialog_set_default_response()
}
// it'd probably be harmless to call gtk_dialog_set_default_response()