X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6a3f8b4f1f1c802df93ce7bc05588536cb7a4dad..14722c43c30918cd8fbba956b50ac3426d2fe339:/src/gtk/infobar.cpp diff --git a/src/gtk/infobar.cpp b/src/gtk/infobar.cpp index 275f0199a8..9963cdb516 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() @@ -177,17 +182,26 @@ void wxInfoBar::ShowMessage(const wxString& msg, int flags) UpdateParent(); } +void wxInfoBar::Dismiss() +{ + if ( !UseNative() ) + { + wxInfoBarGeneric::Dismiss(); + return; + } + + Hide(); + + UpdateParent(); +} + void wxInfoBar::GTKResponse(int btnid) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, btnid); event.SetEventObject(this); if ( !HandleWindowEvent(event) ) - { - Hide(); - - UpdateParent(); - } + Dismiss(); } GtkWidget *wxInfoBar::GTKAddButton(wxWindowID btnid, const wxString& label) @@ -199,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 ); @@ -245,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