]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/infobar.cpp
attempt to get the 'new focus' window parameter of a focus kill event set correctly
[wxWidgets.git] / src / gtk / infobar.cpp
index 1069a861475dccd9674275b4e2abcad9b541d8e2..defc0738aa459e7aec3cb537fc52c80e4e72c04b 100644 (file)
@@ -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 <vadim@wxwidgets.org>
 // 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