X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0b1add25fdb6a625c7b2a07de7e3316d5a869b41..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/gtk/infobar.cpp diff --git a/src/gtk/infobar.cpp b/src/gtk/infobar.cpp index 1069a86147..defc0738aa 100644 --- a/src/gtk/infobar.cpp +++ b/src/gtk/infobar.cpp @@ -3,7 +3,7 @@ // Purpose: wxInfoBar implementation for GTK // Author: Vadim Zeitlin // Created: 2009-09-27 -// RCS-ID: $Id: wxhead.cpp,v 1.10 2009-06-29 10:23:04 zeitlin Exp $ +// RCS-ID: $Id$ // Copyright: (c) 2009 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -31,6 +31,7 @@ #endif // WX_PRECOMP #include "wx/vector.h" +#include "wx/stockitem.h" #include "wx/gtk/private.h" #include "wx/gtk/private/messagetype.h" @@ -81,8 +82,12 @@ namespace inline bool UseNative() { +#ifdef __WXGTK3__ + return true; +#else // native GtkInfoBar widget is only available in GTK+ 2.18 and later return gtk_check_version(2, 18, 0) == 0; +#endif } } // anonymous namespace @@ -143,7 +148,7 @@ bool wxInfoBar::Create(wxWindow *parent, wxWindowID winid) GTKConnectWidget("response", G_CALLBACK(wxgtk_infobar_response)); GTKConnectWidget("close", G_CALLBACK(wxgtk_infobar_close)); - return false; + return true; } wxInfoBar::~wxInfoBar() @@ -192,7 +197,7 @@ void wxInfoBar::Dismiss() void wxInfoBar::GTKResponse(int btnid) { - wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, btnid); + wxCommandEvent event(wxEVT_BUTTON, btnid); event.SetEventObject(this); if ( !HandleWindowEvent(event) ) @@ -208,9 +213,9 @@ GtkWidget *wxInfoBar::GTKAddButton(wxWindowID btnid, const wxString& label) GtkWidget *button = gtk_info_bar_add_button ( GTK_INFO_BAR(m_widget), - label.empty() + (label.empty() ? GTKConvertMnemonics(wxGetStockGtkID(btnid)) - : label, + : label).utf8_str(), btnid ); @@ -254,16 +259,27 @@ void wxInfoBar::RemoveButton(wxWindowID btnid) i != buttons.rend(); ++i ) { - gtk_widget_destroy(i->button); - buttons.erase(i.base()); + if (i->id == btnid) + { + gtk_widget_destroy(i->button); + buttons.erase(i.base()); - // see comment in GTKAddButton() - InvalidateBestSize(); + // see comment in GTKAddButton() + InvalidateBestSize(); - return; + return; + } } wxFAIL_MSG( wxString::Format("button with id %d not found", btnid) ); } +void wxInfoBar::DoApplyWidgetStyle(GtkRcStyle *style) +{ + wxInfoBarGeneric::DoApplyWidgetStyle(style); + + if ( UseNative() ) + GTKApplyStyle(m_impl->m_label, style); +} + #endif // wxUSE_INFOBAR