From 5d3056f180e54cca794622285281491bd1af0e89 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 15 Oct 2010 23:45:58 +0000 Subject: [PATCH] Fix button order in wxGTK wxMessageDialog and wxStdDialogButtonSizer. 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 --- src/common/sizer.cpp | 56 +++++++------------------------------------- src/gtk/msgdlg.cpp | 11 +++++++-- 2 files changed, 17 insertions(+), 50 deletions(-) diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 89eaacb15d..535cae56c5 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -2526,29 +2526,6 @@ void wxStdDialogButtonSizer::SetCancelButton( wxButton *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__ @@ -2591,12 +2568,9 @@ void wxStdDialogButtonSizer::Realize() 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] - // - // 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 @@ -2611,31 +2585,17 @@ void wxStdDialogButtonSizer::Realize() // 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") ) - { + if (m_buttonNegative) 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); diff --git a/src/gtk/msgdlg.cpp b/src/gtk/msgdlg.cpp index 5275bac3fe..d459602f0b 100644 --- a/src/gtk/msgdlg.cpp +++ b/src/gtk/msgdlg.cpp @@ -215,16 +215,23 @@ void wxMessageDialog::GTKCreateMsgDialog() { if ( addButtons ) { + // 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(GetYesLabel()), - GTK_RESPONSE_YES); 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() -- 2.47.2